Estou tentando calcular a área de um polígono dentro do meu script Python. Crio um novo polígono a partir da mesclagem de dois e gostaria de adicionar a área do polígono resultante a um campo no arquivo de saída. O polígono é armazenado em um arquivo de forma regular e é projetado. Área preferencialmente em unidades de mapa.
Eu pensaria que essa é uma tarefa bastante comum e simples, mas apesar de muito Googleing, não consegui encontrar soluções funcionais até agora.
Eu estava pensando em usar arcpy.updateCursor
para inserir o valor uma vez calculado (há apenas um recurso no FC neste estágio), então é mais fácil se ele pode ser retornado como uma variável. Qualquer solução alternativa que realize a mesma tarefa (colocar o valor da área no campo correto) também funcionará.
Eu também tentei a calculadora de campo do Python. Modificado nas páginas de ajuda, pensei que o seguinte funcionaria, mas até agora não houve sorte.
arcpy.AddField_management(tempPgs, "Shape_area", 'DOUBLE')
exp = "float(!SHAPE.AREA!.split())"
arcpy.CalculateField_management(tempPgs, "Shape_area", exp)
Executando o ArcGIS Basic 10.1 SP1 com Python 2.7 no Windows 7.
Partes relevantes do meu código atual são assim:
#/.../
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 do seu cursor para ler a área; mas a estrutura do código depende se sua área está nas mesmas unidades que você deseja escrever.