আরকিপি ব্যবহার করে * .lyr ফাইলগুলিতে ডেটাসেট বৈশিষ্ট্যযুক্ত ডেটা উত্সের পথ পরিবর্তন করা?


11

আরকিপি ব্যবহার করে একটি ফোল্ডার এক্স-এর প্রতিটি স্তর ফাইলের উত্স ডেটা পথগুলিকে কীভাবে পরিবর্তন করতে পারে?

আমি আরকিপি-ম্যাপিংয়ের মাধ্যমে ডেটা উত্সগুলি আপডেট এবং ফিক্সিংয়ের অনুসরণ করেছি। যতটা ভাল পারি ততই আমি যা পাই তা হতাশাব্যঞ্জকRuntime error <type 'exceptions.ValueError'>: Layer: Unexpected error যা ভুল বা নিখোঁজ সমস্যা সমাধানের জন্য আমাকে যথেষ্ট পরিমাণে বলে না।

হেরস কোড (একক স্তর ফাইলের পরীক্ষার জন্য সরলীকৃত):

import arcpy, os

fname = r'K:\Layers\xxx.lyr'
lyr = arcpy.mapping.Layer(fname)
oldpath = lyr.workspacePath
print 'oldpath: ', oldpath
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
print 'newpath: ', lyr.workspacePath

এবং ফলাফল:

oldpath:  K:\Canvec_Utility\Temp.gdb
Traceback (most recent call last):
  File "x10x.py", line 12, in <module>
    lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb')
  File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\utils.py", line 181, in fn_
    return fn(*args, **kw)
  File "C:\ESRI\ArcGIS\Desktop10.0\arcpy\arcpy\_mapping.py", line 601, in findAndReplaceWorkspacePath
    return convertArcObjectToPythonObject(self._arc_object.findAndReplaceWorkspacePath(*gp_fixargs((find_workspace_path, replace_workspace_path, validate), True
)))
ValueError: Layer: Unexpected error

((উত্তরে 'আপডেট' বিভাগ সরানো হয়েছে))


Runtime error...উপরে উদ্ধৃত Arccatalog মধ্যে ইন্টারেক্টিভ পাইথন শেল, যা একটি ট্রেসব্যাক দেয় না থেকে। ট্রেসব্যাক সহ ফলাফলগুলি কমান্ড শেল থেকে অনুলিপি করা হয়।
ম্যাট উইলকি

1
আপনি কি কোনও কর্মক্ষেত্রের পাশাপাশি কোনও বৈশিষ্ট্যযুক্ত ডেটাসেটের বাইরে বা বাইরে ডেটা সরিয়ে নিচ্ছেন?
geographika

@ জিওগ্রাফিক: হ্যাঁ এফডিএস পাশাপাশি কর্মক্ষেত্রেরও পরিবর্তন হচ্ছে। আমি ডকুমেন্টেশন দ্বারা বিভ্রান্ত হয়েছিল যা বলে যে এফডিএস নির্দিষ্ট করে না , এবং এমএক্সডি এবং লির এগুলি উপেক্ষা করে। অন্যদিকে যাচাইকরণ সেগুলি উপেক্ষা করে না, বা কমপক্ষে সম্পূর্ণরূপে নয় (আমার উত্তর দেখুন)।
ম্যাট উইলকি

উত্তর:


7

ওয়ার্কস্পেসগুলি এবং বৈশিষ্ট্য ডেটাসেটগুলি স্যুইচ করার সময় ব্যবহারের সঠিক পদ্ধতির মতো দেখে মনে হচ্ছে lyr.replaceDataSource () । এখানে আমার কাজের স্ক্রিপ্ট:

''' Change the datasource path for the given layer file '''

import arcpy, os

# layer file to re-path
fname = arcpy.GetParameterAsText(0)
# new path to workspace containing the feature class
target_wspace = arcpy.GetParameterAsText(1)
# where to save the layer files
savedir = arcpy.GetParameterAsText(2)

lyr = arcpy.mapping.Layer(fname)

fixed_fname = os.path.join(savedir, lyr.longName)

print '\nOld layer properties (%s)' % (fname)
print 'workspace:\t', lyr.workspacePath
print 'full path:\t', lyr.dataSource

try:
    lyr.replaceDataSource(target_wspace, 'FILEGDB_WORKSPACE', lyr.datasetName, True)
    lyr.saveACopy(fixed_fname)
except:
    print arcpy.GetMessages()

print '\nNew layer properties (%s)' % (fixed_fname)
print 'workspace:\t', lyr.workspacePath
print 'full path:\t', lyr.dataSource

del lyr

পরীক্ষায় এটি আবার এই পদ্ধতিতে বৈধ বলে মনে হয়: এটি নতুন কর্মক্ষেত্রটি বৈধ কিনা তা যাচাই করে তবে বৈশিষ্ট্য শ্রেণি এবং বৈশিষ্ট্য ডেটাসেটগুলি উপেক্ষা করে - যার অর্থ লক্ষ্য এফসি না থাকলে এটি কোনও ত্রুটি ফিরিয়ে আনবে না।

অন্যদিকে যদি লক্ষ্য এফসি উপস্থিত থাকে, এমনকি অন্য কোনও বৈশিষ্ট্য ডেটাসেটের অভ্যন্তরে, নতুন ডেটা উত্সের পথটি বৈধতা সত্য বা মিথ্যা কিনা নির্বিশেষে সেই অনুযায়ী মানিয়ে নেওয়া হয়।

আপডেট: সহজেই ভাগ করে নেওয়ার এবং পুনর্বিবেচনার অনুমতি দেওয়ার জন্য গিথুবে এখন


আমি যখন নতুন একটি দিয়ে .lyr উত্স shp ফাইলটি প্রতিস্থাপন করতে চাই তখন কি এই কাজ করবে? আমি মান ভঙ্গি পেয়েছি: স্তর: অপ্রত্যাশিত ত্রুটি।
জর্জিসি

@ জর্জিসি - আমি জানি এটি একটি পুরানো পোস্ট তবে যদি কেউ অনুসন্ধান ইঞ্জিনের মাধ্যমে এটি খুঁজে পায় তবে এই ত্রুটির সমাধানটি ডেটাসেটের নাম থেকে .shp বাদ দিতে পারে। ডেটাসোর্স প্রতিস্থাপনের জন্য IOW তৃতীয় আর্গটি "newfile" হওয়া দরকার "newfile.shp" নয়
পেরিওজিও

6

অকেজো unexpected errorএই ইনস্ট্যান্সের মধ্যে ভালো কিছু অর্থ "নতুন পথ অস্তিত্ব নেই" । ঐচ্ছিক validateসত্যতে প্যারামিটার অক্ষমতা নির্দিষ্ট করা নেই পারেন। মিথ্যা দিয়ে, স্ক্রিপ্টটি ত্রুটি ছাড়াই সম্পূর্ণ করে তবে ফলাফলের স্তরগুলির ফাইলগুলি এখনও ভাঙ্গা ছিল যদিও গন্তব্য পথ এবং বৈশিষ্ট্য বর্গ উপস্থিত রয়েছে।

...    
lyr.findAndReplaceWorkspacePath(oldpath, r'C:\some\other.gdb', False)
...

ফলাফল

oldpath:  K:\code\Canvec\Scripts\Temp.gdb
newpath:  C:\some\other.gdb

প্রাথমিকভাবে সত্যকে ডিফল্ট হিসাবে বৈধতা না জানার পাশাপাশি একটি বাগ, বা কমপক্ষে খুব কৌতূহলপূর্ণ আচরণ এটিকে সমস্যা সমাধানের পক্ষে পরিণত করে। আরকিপি.ম্যাপিং সহ ডেটা উত্সগুলি আপডেট এবং ফিক্সিং বলছে ওয়ার্কস্পেসের পথে বৈশিষ্ট্য ডেটাসেটের নাম অন্তর্ভুক্ত করবেন না। বৈশিষ্ট্যযুক্ত ডেটাসেটগুলি ওয়ার্কস্পেসের অংশ। উদাহরণস্বরূপ, যদি কোনও বৈশিষ্ট্য শ্রেণি একটি স্ট্যান্ড-একল বৈশিষ্ট্য শ্রেণি থেকে কোনও বৈশিষ্ট্য ডেটাसेटে স্থানান্তরিত হয় তবে মানচিত্র নথিটি স্তরটি ভাঙ্গা না করে এখনও খোলা থাকবে " , এবং " যদি কোনও মানচিত্র নথিতে বা স্তর ফাইলের মধ্যে একটি স্তর বা টেবিল থাকে কোনও বৈশিষ্ট্য ডেটাসেটের মধ্যে বা বাইরে সরানো হয়, তাদের লিঙ্কগুলি ভাঙা উচিত নয়। "

দেখা যাচ্ছে যে এইটিতে বৈধতাটির কিছুটা আলাদা কোণ রয়েছে। হ্যাঁ নতুন জিওডাটাবেজে (ওয়ার্কস্পেস) লক্ষ্য বৈশিষ্ট্য শ্রেণিটি শীর্ষ স্তরে বা সম্পূর্ণ আলাদা বৈশিষ্ট্যযুক্ত ডেটাসেটে কোথায় থাকে তা বিবেচ্য নয়তবে লক্ষ্য কর্মক্ষেত্রে অবশ্যই একই নাম বা বৈধতা ব্যর্থ সহ একটি বৈশিষ্ট্য ডেটাসেট থাকতে হবে

ভাঙ্গা এবং "স্থির" স্তরগুলি, যেমন তারা আরক্যাটেলগ এবং আর্কম্যাপে দেখায়

সূত্র :

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.