Estoy tratando de calcular el área de un polígono dentro de mi script Python. Creo un nuevo polígono fusionando dos juntos, y me gustaría agregar el área del polígono resultante a un campo en el archivo de salida. El polígono se almacena en un archivo de forma regular y se proyecta. Área preferiblemente en unidades de mapa.
Hubiera pensado que se trataba de una tarea bastante común y simple, pero a pesar de mucho Googleing, hasta ahora no he podido encontrar soluciones que funcionen.
Estaba planeando usar arcpy.updateCursor
para insertar el valor una vez que se calcula (solo hay una característica en el FC en esta etapa), por lo que es más fácil si se puede devolver como una variable. Cualquier solución alternativa que realice la misma tarea (obtener el valor del área en el campo correcto) también funcionará.
También probé la calculadora de campo de Python. Modificado de las páginas de ayuda, pensé que lo siguiente funcionaría, pero hasta ahora no tuve suerte.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Ejecutando ArcGIS Basic 10.1 SP1 con Python 2.7 en Windows 7.
Las partes relevantes de mi código actual se ven así:
#/.../
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
como parte de su cursor para leer el área; pero la estructura del código depende de si su área está en las mismas unidades que lo que desea escribir.