أكثر

محاولة الحفاظ على الإسناد المكاني في مصفوفة عددية تم إنشاؤها حديثًا

محاولة الحفاظ على الإسناد المكاني في مصفوفة عددية تم إنشاؤها حديثًا


أحاول نسخ القيم من البيانات النقطية إلى المصفوفة التي تم إنشاؤها حديثًا ثم أحاول حفظ المصفوفة بنفس الإسناد المكاني كملف نقطي

inRas = arcpy.GetParameterAsText (0) double_layer = arcpy.GetParameterAsText (1) num_layer = int (double_layer) output_path = arcpy.GetParameterAsText (2) # معلومات عن البيانات النقطية dsc = arcpy.Desefer (inRas) dsc.Extent ll = arcpy.Point (ext.XMin، ext.YMin) arr = arcpy.RasterToNumPyArray (inRas، nodata_to_value = 0) شكل = arr.shape arcpy.AddMessage ("تم إنشاء مجموعة صور") freq = numpy.empty ( شكل = (1، شكل [1]، شكل [2])) freq_numpy = numpy.uint8 (freq) arcpy.AddMessage ("تم إنشاء مصفوفة تردد") #count = 1 # تحقق من 46 طبقة # العدد يعطيني الإجمالي عدد وحدات البكسل لـ x في النطاق (0 ، الشكل [1]): بالنسبة إلى y في النطاق (0 ، الشكل [2]): freq = 0 لـ z في النطاق (0 ، num_layer): # z هو رقم الطبقة في حالة arr [z] [x] [y] == 1: freq = freq + 1 freq_numpy [0] [x] [y] = freq arcpy.AddMessage ("ملف إنهاء الكود المخزن في" + output_path) newRaster = arcpy.NumPyArrayToRaster ( freq_numpy، ll، inRas.meanCellWdith، inRas.meanCellHeight) arcpy.DefineProject_management (newRaster، sr) newR aster.save (output_path)

الخطأ الذي أحصل عليه:

خطأ: Traceback (آخر مكالمة أخيرة): ملف "D:  PythonScripts  FrequencyBackup.py" ، السطر 66 ، في  cellHeight = inRas.meanCellHeight AttributeError: كائن "unicode" ليس له سمة "meanCellHeight" فشل التنفيذ (التردد). فشل في الخميس 17 ديسمبر 16:20:53 2015 (الوقت المنقضي: 4.75 ثانية)

عندما أحاول الوصولinRas.meanCell ارتفاعفي وحدة تحكم Python في ArcGIS ، تقوم بإرجاع قيمة. كيف يمكنني الوصول إليه من داخل البرنامج النصي الخاص بي؟


يمكن أن يكون inRas مسارًا لخطوط المسح أو كائن RasterDataset. في هذا الخطأ ، يمكنني أن أرى أن inRas هو كائن Str. لا يمكنك الاتصال بكيعني الخليةويعني ارتفاع الخليةفي هذا النوع من الكائنات

لكن باستخدامdsc. ارتفاع الخليةوdsc. ارتفاع الخلية، يمكنك أن تفعل ما تريد

لا تستخدم الشيء الجيد ...


تحتاج إلى إنشاء ملف كائن نقطي من أجل الوصول إلى الخصائص. الآن ، المتغير الخاص بكinRasهي مجرد سلسلة تشير إلى البيانات النقطية على القرص ، ولا يتعرف عليها ArcPy على أنها "نقطية".

inRasName = arcpy.GetParameterAsText (0) inRas = النقطية (inRasName)

ملاحظة: أعتقد أنك ستظل بحاجة إلى استخدام السلسلة عند التحويل إلى مصفوفة NumPy ...

arr = arcpy.RasterToNumPyArray (inRasName، nodata_to_value = 0)

شاهد الفيديو: 43 - Array - Simple Operation العمليات على المصفوفات