J'essaie de calculer l'aire d'un polygone dans mon script Python. Je crée un nouveau polygone en fusionnant deux et j'aimerais ajouter la zone du polygone résultant à un champ dans le fichier de sortie. Le polygone est stocké dans un fichier de formes régulier et est projeté. Zone de préférence en unités de carte.
J'aurais pensé que c'était une tâche assez courante et simple, mais malgré beaucoup de recherches sur Google, je n'ai pas pu trouver de solutions de travail jusqu'à présent.
J'avais l'intention d'utiliser arcpy.updateCursor
pour insérer la valeur une fois qu'elle est calculée (il n'y a qu'une seule fonctionnalité dans le FC à ce stade), donc le plus simple est de savoir si elle peut être retournée sous forme de variable. Toute solution alternative qui accomplit la même tâche (obtenir la valeur de la zone dans le champ correct) fonctionnera également.
J'ai également essayé la calculatrice Field de Python. Modifié à partir des pages d'aide, j'ai pensé que ce qui suit fonctionnerait, mais jusqu'à présent, pas de chance.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Exécution d'ArcGIS Basic 10.1 SP1 avec Python 2.7 sous Windows 7.
Les parties pertinentes de mon code actuel ressemblent à ceci:
#/.../
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
dans le cadre de votre curseur pour lire la zone; mais la structure du code dépend si votre région est dans les mêmes unités que ce que vous voulez écrire.