Python betiğimin içindeki bir çokgenin alanını hesaplamaya çalışıyorum. İkisini birleştirmekten yeni bir çokgen oluşturuyorum ve elde edilen çokgenin alanını çıktı dosyasındaki bir alana eklemek istiyorum. Çokgen normal bir şekil dosyasında saklanır ve yansıtılır. Alan tercihen harita birimlerinde.
Bunun oldukça yaygın ve basit bir görev olduğunu düşünürdüm, ancak birçok Googleing'e rağmen şimdiye kadar çalışan bir çözüm bulamadım.
arcpy.updateCursor
Hesaplandıktan sonra değeri eklemek için kullanmayı planlıyordum (bu aşamada FC'de yalnızca bir özellik var), bu yüzden en kolayı değişken olarak döndürülebilirse. Aynı görevi gerçekleştiren herhangi bir alternatif çözüm (alan değerini doğru alana almak) da işe yarayacaktır.
Ayrıca Python Alan hesap makinesi denedim. Aşağıdakilerin işe yarayacağını düşündüğüm yardım sayfalarından değiştirildi, ancak şimdiye kadar şans yok.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Windows 7'de ArcGIS Basic 10.1 SP1'i Python 2.7 ile çalıştırmak.
Geçerli kodumun ilgili bölümleri şöyle:
#/.../
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
alanı okumak için imlecinizin bir parçası olarak istediğinizi elde edebilirsiniz ; ancak kodun yapısı, bölgenizin yazmak istediğinizle aynı birimlerde olup olmadığına bağlıdır.