ฉันพยายามคำนวณพื้นที่ของรูปหลายเหลี่ยมภายในสคริปต์ Python ของฉัน ฉันสร้างรูปหลายเหลี่ยมใหม่จากการรวมสองรูปเข้าด้วยกันและฉันต้องการเพิ่มพื้นที่ของรูปหลายเหลี่ยมที่เป็นผลลัพธ์ลงในเขตข้อมูลในไฟล์ผลลัพธ์ รูปหลายเหลี่ยมจะถูกเก็บไว้ในรูปร่างปกติและฉาย พื้นที่โดยเฉพาะอย่างยิ่งในหน่วยแผนที่
ฉันคิดว่านี่เป็นงานที่ค่อนข้างธรรมดาและเรียบง่าย แต่ถึงแม้ว่าจะมี Googleing อยู่มากมายฉันก็ยังหาวิธีแก้ปัญหาที่ใช้งานไม่ได้
ฉันวางแผนที่arcpy.updateCursor
จะใช้เพื่อแทรกค่าเมื่อคำนวณแล้ว (มีเพียงฟีเจอร์เดียวใน FC ในขั้นตอนนี้) ดังนั้นที่ง่ายที่สุดคือถ้ามันสามารถส่งคืนเป็นตัวแปรได้ โซลูชันทางเลือกใด ๆ ที่ทำภารกิจเดียวกันให้สำเร็จ (การรับค่าพื้นที่ลงในฟิลด์ที่ถูกต้อง) ก็จะใช้ได้เช่นกัน
ฉันได้ลองใช้เครื่องคิดเลขภาคสนามจาก Python ด้วย แก้ไขจากหน้าช่วยเหลือฉันคิดว่าสิ่งต่อไปนี้ใช้ได้ แต่ยังไม่มีโชค
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
ใช้งาน ArcGIS Basic 10.1 SP1 ด้วย Python 2.7 บน Windows 7
ส่วนที่เกี่ยวข้องของรหัสปัจจุบันของฉันมีลักษณะดังนี้:
#/.../
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
ส่วนของเคอร์เซอร์เพื่ออ่านพื้นที่ แต่โครงสร้างของรหัสขึ้นอยู่กับว่าพื้นที่ของคุณอยู่ในหน่วยเดียวกันกับสิ่งที่คุณต้องการเขียนหรือไม่