أكثر

لا يمكن إعداد معلمات أداة البرنامج النصي

لا يمكن إعداد معلمات أداة البرنامج النصي


أنا أستخدم Arcgis 10.0. قمت بإعادة مستند ESRI لإعداد معلمات أدوات البرنامج النصي ، لكنني لم أنجح في إعدادها.

معلماتي من قبل (بدون متغير)

# arcpy.env.workspace = r'Z:  Documents  SIG  tests  synthese_tocorrect.gdb '#pochoir = r'Z:  Documents  SIG  tests  decoupe.shp' # طبقة القصاصة ذات المضلعات المتعددة #outFolder = r'Z:  Documents  SIG  الاختبارات  طلعات جوية '

المعلمات الخاصة بي بعد ، مع المشكلات:

import arcpy، os من arcpy import env inWorkspace = arcpy.GetParamterAsText (0) #Refers to the geodatabase pochoir = arcpy.GetParamterAsText (1) #Refers to the clip layer out outFolder = arcpy.GetParamterAsText (2) #Output folder. env.workspace = inWorkspace arcpy.MakeFeatureLayer_management (pochoir، "pochoirlyr") #Create layer للسماح بالاختيار fcList = arcpy.ListFeatureClasses () # فئة المعالم المراد قصها بواسطة كل من مضلع طبقة القصاصة OIDField = arcpy.Describe ("pochoirlyr"). OIDFieldName # احصل على اسم حقل OID لـ fc في fcList: arcpy.MakeFeatureLayer_management (os.path.join (arcpy.env.workspace، fc)، "lyr") pocursor = arcpy.SearchCursor ("pochoirlyr" ) من أجل porow in pocursor: sql = '"' + OIDField + '" =' + str (porow.getValue (OIDFalue (OIDField)) #SQL لتحديد ميزة واحدة arcpy.SelectLayerByAttribute_management ("pochoirlyr"، ""، sql) #Select polygon feature بواسطة OID arcpy.SelectLayerByLocation_management ("lyr"، "INTERSECT"، "pochoirlyr") # حدد طبقة المعالم المراد قصها بواسطة ميزة المقطع المحدد إذا كانت arcpy.Describe ("lyr") FIDSet: #Check for select out_poly = os. path.join (outFolder، fc + "_" + str (porow.getValue (OIDField))) #Output feature class arcpy.Clip_analysis (fc، "pochoirlyr"، out_poly) del porow d el pocursor arcpy.SelectLayerByAttribute_management ("pochoirlyr"، "CLEAR_SELECTION") arcpy.Delete_management ("lyr")

وفي خصائص أدوات السكربت:

  • قاعدة البيانات الجغرافية: مساحة العمل أو مجموعة بيانات الميزة ، الإدخال ، بلا قيم متعددة ...
  • pochoir: ملف الشكل ، الإدخال ، لا متعدد القيم ...
  • طلعات جوية: مجلد ، إخراج ...

ولكن عندما أختار معلمة مختلفة عند فتح أداة البرنامج النصي GUI ، فإنها لا تعمل. يقوم بالعمل مع معلمات IDE.

أي مساعدة ؟


أنت بحاجة إلى استخدام

Arcpy.GetParameterAsText (0)

طريقة:

شاهد أمثلة من:

فهم معلمات أداة البرنامج النصي


أنا أستخدم sys.argv [n] ولكن GetParameterAsText هو نفس الشيء ، ولكن يجب أن تدرك أن argv [0] هو البرنامج النصي ، و argv [1] هو المعامل الأول على عكس GetParameterAsText (0) باعتباره المعلمة الأولى.

في كل تكرار (بعد المقطع) ، تحتاج إلى مسح التحديد أو إعادة تشكيل الطبقات"لير"و"pochoirlyr"وإلا فإنه سيعمل فقط على التكرار الأول ، فستكون كلتا الطبقتين فارغتين بعد ذلك ، واختيار الطبقة مضحك من هذا القبيل.

أعتقد أن هذا سيفعل ما تبحث عنه:

استيراد arcpy ، os ، sys من arcpy import env inWorkspace = sys.argv [1] #Refers to the geodatabase pochoir = sys.argv [2] #Refers to the clip layer is outFolder = sys.argv [3] #Output folder. env.workspace = inWorkspace fcList = arcpy.ListFeatureClasses () # فئة المعالم المراد قصها بواسطة كل مضلع لطبقة القصاصة OIDField = arcpy.Describe (pochoir) .OIDFieldName # احصل على اسم حقل OID من فئة الميزة لـ fc في fcList: pocursor = arcpy.SearchCursor (pochoir) # cursor من فئة الميزة لـ porow in pocursor: sql = '"" + OIDField +' "= '+ str (porow.getValue (OIDField)) #SQL لتحديد ميزة واحدة arcpy.MakeFeatureLayer_management (pochoir، "pochoirlyr"، sql) #Create layer مع التحديد بالفعل arcpy.MakeFeatureLayer_management (os.path.join (arcpy.env.workspace، fc)، "lyr") arcpy.SelectLayerByLocation_management ("lyrByLocation"، " INTERSECT "،" pochoirlyr ") # حدد طبقة المعالم المراد قطعها بواسطة ميزة المقطع المحددة إذا كانت arcpy.Describe (" lyr "). fidSet: # تحقق من التحديد في lyr out_poly = os.path.join (outFolder، fc +" _ "+ str (porow.getValue (OIDField))) #Output if arcpy.Exists (out_poly) أو arcpy.Exists (out_poly +" .shp "): # تحقق من أنها غير موجودة بالفعل 'arcpy.AddWar ning ("عذرًا ، فئة الميزة هذه موجودة بالفعل") else: arcpy.Clip_analysis (fc، "pochoirlyr"، out_poly) # احذف الطبقات حتى تتمكن من استخدام الأسماء مرة أخرى arcpy.Delete_management ("lyr") arcpy.Delete_management (" pochoirlyr ") del porow del pocursor

بدلاً من عمل الطبقة ثم التحديد حسب السمات مقابلها ، قمت بتعديلها بحيث تنشئ الطبقة"pochoirlyr"باستخدام SQL كمكان السبب. في كل تكرار"لير"و"pochoirlyr"يتم إنشاؤها وحذفها مما يتجنب الالتباس حول ما هو موجود في الطبقة / ليس في الطبقة ، وما يتم تحديده وما هو غير ذلك ... بداية نظيفة في كل مرة.


شاهد الفيديو: Monique - Sê My Hoe