मैं अपने अजगर स्क्रिप्ट के भीतर एक बहुभुज के क्षेत्र की गणना करने की कोशिश कर रहा हूं। मैं एक साथ दो विलय करने से एक नया बहुभुज बनाता हूं, और मैं परिणामी बहुभुज के क्षेत्र को आउटपुट फ़ाइल में एक क्षेत्र में जोड़ना चाहूंगा। बहुभुज को एक नियमित आकार में संग्रहीत किया जाता है, और इसे अनुमानित किया जाता है। मानचित्र इकाइयों में क्षेत्र अधिमानतः।
मैंने सोचा होगा कि यह एक बहुत ही सामान्य और सरल कार्य है, लेकिन बहुत सारे Googleing के बावजूद मैं अभी तक एक कार्य समाधान खोजने में असमर्थ रहा हूं।
मैं arcpy.updateCursor
एक बार गणना करने के बाद मूल्य डालने का उपयोग करने की योजना बना रहा था (इस स्तर पर एफसी में केवल एक ही सुविधा है), इसलिए सबसे आसान है यदि इसे एक चर के रूप में वापस किया जा सकता है। कोई भी वैकल्पिक समाधान जो एक ही कार्य को पूरा करता है (क्षेत्र मान को सही क्षेत्र में प्राप्त करना) भी काम करेगा।
मैंने पायथन से फील्ड कैलकुलेटर की भी कोशिश की है। मदद पृष्ठों से संशोधित मुझे लगा कि निम्नलिखित काम करेगा, लेकिन अभी तक कोई भाग्य नहीं है।
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
विंडोज 7 पर पायथन 2.7 के साथ आर्कगिस बेसिक 10.1 SP1 चला रहा है।
मेरे वर्तमान कोड के प्रासंगिक भाग इस प्रकार हैं:
#/.../
arcpy.Copy_management(inpgs, outpgs)
arcpy.AddField_management(outpgs, 'Shape_area', 'LONG')
fields = AM.FieldLst(outpgs)
#/.../
# Identify and search for shapes smaller than minimum area
where1 = '"' + 'Shape_Area' + '" < ' + str(msz)
polyrows = arcpy.SearchCursor(inpgs, where1)
for prow in polyrows:
grd1 = prow.GridID # GridID on the current polygon
grd2 = nDD.get(grd1) # GridID on the polygon downstream
# Update features
if grd2
geometry1 = prow.Shape
geometry2 = geometryDictionary[grd2]
# Update temporary features
arcpy.Merge_management([geometry1, geometry2], tempMerged)
arcpy.Dissolve_management(tempMerged, tempPgs)
fds = AM.FieldLst(tempPgs)
for field in fields[2:]:
arcpy.AddField_management(tempPgs, field, 'DOUBLE')
for fd in fds[2:]:
arcpy.DeleteField_management(tempPgs, fd)
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
# Append them to output FC
try:
arcpy.Append_management(tempPgs, outpgs, "TEST")
except arcgisscripting.ExecuteError:
arcpy.Append_management(tempPgs, outpgs, "NO_TEST")
elif ...
else ...
SHAPE@AREA
अपने कर्सर के हिस्से के रूप में उस क्षेत्र को पढ़ने के लिए जो चाहें प्राप्त कर सकते हैं; लेकिन कोड की संरचना इस बात पर निर्भर करती है कि क्या आपका क्षेत्र उसी इकाइयों में है जो आप लिखना चाहते हैं।