5 votos

Calcular el área total de varios polígonos dentro de un polígono

Me he unido a un conjunto de datos que contiene los polígonos de espacios verdes, con un conjunto de datos que contiene vegetación polígonos utilizando cruzan. El resultado es un conjunto de datos con entradas independientes para cada vegetación polígono dentro de los espacios verdes. De esta apariencia:

Situation now

Lo que quiero es el área total de cada tipo de vegetación dentro de cada uno de los espacios verdes, similares a este (esta tabla vino de un juicio mediante el cómputo de las áreas, a la derecha de formato pero mal áreas):

End Result

¿Cuál sería la mejor manera de lograr que, usando python? La zona tendría que ser calculado para cada tipo de vegetación (GRIDCODE) dentro de cada espacio Verde. Las áreas son, a continuación, destinado a ser conectado a mi conjunto de datos original contiene mucha más información acerca de los espacios verdes. He intentado usar un bucle para calcular por separado para cada fila, pero no consigo que funcione.

2voto

Spyros Puntos 56

Usted realmente no necesita Python para hacer esto, solo el Resumen de las Estadísticasde la herramienta: Uso Shape_Area y 'Suma' de la Estadística Campo + de Estadística tipo de parámetro, entonces FID_GreenSpace y GRIDCODE como el Caso de Campos de parámetro.

Si es necesario, usted puede, por supuesto, secuencia de comandos, consulte la sintaxis de la herramienta en la página de Ayuda.

2voto

Spyros Puntos 56

Si quieres que una sola fila para cada espacio verde en su resumen de la mesa, tendrá, de hecho, Python. El siguiente código debe hacer (no olvides adaptar la ruta a la entrada se unió a la clase de entidad de salida y la tabla de resumen del curso):

import arcpy, os
arcpy.env.overwriteOutput = 1

joined_fc = r"path_to_your_joined_fc"
summary_table = os.path.join(r"C:\test.gdb", "Summary")

# Create the summary table
arcpy.CreateTable_management(r"C:\test.gdb", "Summary")
fields = [["GreenSpace_ID", "LONG"], ["Trees", "DOUBLE"], ["Bushes", "DOUBLE"], ["Grass", "DOUBLE"]]
for f in fields:
    arcpy.AddField_management(summary_table, f[0], f[1])

# Make a list with unique Greenspace IDs
with arcpy.da.SearchCursor(joined_fc, "FID_GreenSpace") as cursor:
    GreenSpaceList = sorted({row[0] for row in cursor})

# Loop over the greenspaces and populate the summary table with the sum of each category of vegetation
with arcpy.da.InsertCursor(summary_table, [f[0] for f in fields])as InCur:
    for GreenSpace in GreenSpaceList:
        # Assign the correct codes to the corresponding vegetation type, here I assume Trees = 1, Bushes = 2, Grass = 3
        SumTrees = sum([row[0] for row in arcpy.da.SearchCursor(joined_fc, "Shape@AREA", """FID_GreenSpace = {} AND GRIDCODE = 1""".format(GreenSpace))])
        SumBushes = ([row[0] for row in arcpy.da.SearchCursor(joined_fc, "Shape@AREA", """FID_GreenSpace = {} AND GRIDCODE = 2""".format(GreenSpace))])
        SumGrass = sum([row[0] for row in arcpy.da.SearchCursor(joined_fc, "Shape@AREA", """FID_GreenSpace = {} AND GRIDCODE = 3""".format(GreenSpace))])
        InCur.insertRow((GreenSpace, SumTrees, SumBushes, SumGrass))

Supongo que trabajar con 10.1 o superior (hacer uso de la arcpy.da.InsertCursor()). Si usted trabaja con una versión anterior de ArcGIS, el código puede ser fácilmente adaptado para el uso de arcpy.InsertCursor() lugar.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X