Saya mencoba menghitung luas poligon dalam skrip Python saya. Saya membuat poligon baru dari menggabungkan keduanya, dan saya ingin menambahkan area poligon yang dihasilkan ke bidang di file output. Poligon disimpan dalam bentuk biasa, dan diproyeksikan. Area sebaiknya dalam unit peta.
Saya akan berpikir ini menjadi tugas yang cukup umum dan sederhana, tetapi meskipun banyak Googleing saya belum dapat menemukan solusi yang berfungsi sejauh ini.
Saya berencana menggunakan arcpy.updateCursor
untuk memasukkan nilai setelah dihitung (hanya ada satu fitur di FC pada tahap ini), jadi yang paling mudah adalah jika dapat dikembalikan sebagai variabel. Solusi alternatif apa pun yang menyelesaikan tugas yang sama (memasukkan nilai area ke bidang yang benar) juga akan berfungsi.
Saya juga telah mencoba kalkulator Field dari Python. Dimodifikasi dari halaman bantuan saya pikir berikut ini akan berhasil, tetapi sejauh ini tidak berhasil.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Menjalankan ArcGIS Basic 10.1 SP1 dengan Python 2.7 di Windows 7.
Bagian yang relevan dari kode saya saat ini terlihat seperti ini:
#/.../
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
sebagai bagian dari kursor untuk membaca area tersebut; tetapi struktur kode tergantung pada apakah area Anda berada dalam unit yang sama dengan apa yang ingin Anda tulis.