Tôi đang cố gắng tính diện tích của một đa giác trong tập lệnh Python của tôi. Tôi tạo một đa giác mới từ việc hợp nhất hai lại với nhau và tôi muốn thêm diện tích của đa giác kết quả vào một trường trong tệp đầu ra. Đa giác được lưu trữ trong một shapefile thông thường, và được chiếu. Diện tích tốt nhất là trong các đơn vị bản đồ.
Tôi đã có thể nghĩ rằng đây là một nhiệm vụ khá phổ biến và đơn giản, nhưng mặc dù có rất nhiều Google, tôi đã không thể tìm thấy một giải pháp làm việc cho đến nay.
Tôi đã lên kế hoạch sử dụng arcpy.updateCursor
để chèn giá trị khi nó được tính toán (chỉ có một tính năng trong FC ở giai đoạn này), vì vậy dễ nhất là nếu nó có thể được trả về dưới dạng một biến. Bất kỳ giải pháp thay thế nào thực hiện cùng một nhiệm vụ (nhận giá trị khu vực vào trường chính xác) cũng sẽ hoạt động.
Tôi cũng đã thử máy tính Field từ Python. Được sửa đổi từ các trang trợ giúp tôi nghĩ rằng những điều sau đây sẽ hoạt động, nhưng cho đến nay không có may mắn.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Chạy ArcGIS Basic 10.1 SP1 với Python 2.7 trên Windows 7.
Các phần có liên quan của mã hiện tại của tôi trông như thế này:
#/.../
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
như một phần của con trỏ để đọc khu vực; nhưng cấu trúc của mã phụ thuộc vào việc khu vực của bạn có cùng đơn vị với những gì bạn muốn viết ra không.