4 votos

¿Contando y almacenando eventos contenidos dentro de un polígono usando ArcPy?

Tengo un proyecto bastante grande y me gustaría automatizar algunas tareas usando Python. El problema es que no tengo ninguna experiencia con Python para ArcGIS. Y yo rara vez uso ArcGIS hasta que algo grande como esto viene, y por lo general estoy bajo alguna restricción de tiempo (smh) Estoy buscando alguna orientación (como la sintaxis de Python a utilizar, metodología, etc.) para ayudarme a lograr lo siguiente, utilizando las capturas de pantalla como referencia

  1. Los puntos rojos indican varios sucesos que se solapan entre sí (contienen varios registros) que caen dentro de los puntos de amortiguación del polígono (etiquetados A y B, respectivamente): Screenshot 1
  2. Los sucesos forman parte de un shapefile específico de un corredor vial, de modo que cada shapefile de corredor puede contener varios puntos de sucesos, que representan colisiones de vehículos de motor en una intersección. Cada incidente contiene un campo "AÑO" que puede ser 2007, 2008, 2009 o 2010: enter image description here
  3. Los archivos shape de polígono tampón tienen un campo distinto para cada uno de los años mencionados. La mayoría de los corredores tienen entre 6 y 10 filas, que representan los puntos de control a lo largo del corredor. enter image description here

Lo que deseo conseguir es:

  1. Cuenta todos los eventos que caen dentro de los puntos del polígono.
  2. Rellene los campos de polígono de cada año con el correspondiente recuentos del campo "YEAR" de los archivos shape de sucesos con los campos "CNT_20XX" de los archivos shape de polígonos. de los archivos shape de polígonos
  3. Ejemplo: El polígono A tiene un total de 10 eventos en su interior. Los recuentos para cada año son 2007= 3, 2008= 1, 2009= 2, 2010= 4; por lo que el polígono del punto A tendría sus campos "CNT_20XX" con la suma de los recuentos de cada año. de cada año en el archivo shape de eventos.

Entonces... ¿se puede hacer esto en python? ¿Existe una manera no-python para lograr lo mismo? Tengo 16 corredores.

4voto

wonderfulthunk Puntos 182

Podría hacerlo con cursores anidados y sentencias de selección en Python. ¿Algo como lo siguiente, tal vez?

    polygons = arcpy.UpdateCursor(yourIntersectionsLayer)
    for row in polygons:
        arcpy.management.SelectLayerByAttribute(yourIntersectionsLayer,"NEW_SELECTION","\"ObjectID\" = "+str(row.ObjectID))    
        #you now have one polygon at a time selected
        arcpy.management.SelectLayerByLocation(eventsLayer,"WITHIN",yourIntersectionsLayer)
        #this has selected the points within the polygon on the cursor
        year1=0
        year2=0
        year3=0
        for x in range(0,2):
            if x==0:
                eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2005")
                for event in eventCursor:
                    year1+=1
                del event,eventCursor
            if x==1:
                eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2006")
                for event in eventCursor:
                    year2+=1
                del event,eventCursor
            if x==2:
                eventCursor = arcpy.SearchCursor(eventsLayer,"\"Year\" = 2007")
                for event in eventCursor:
                    year3+=1
                del event,eventCursor

        row.Year2005=year1
        row.Year2006=year2
        row.Year2007=year3
        polygon.updateRow(row)
del row,polygons

Aún no he tenido ocasión de probarlo en un entorno con datos, pero podría ser plausible. Aquí hay algo de documentación sobre los cursores en ArcPy: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002z0000001q000000

0 votos

Muchas gracias @AHigh. Lo intentaré. Esto suena como un buen proyecto de libro de cocina que puedo experimentar y tal vez aprender de ella, así que voy a darle un +1. Voy a esperar un día o dos y dejar que otros respondan, si los hay, antes de aceptar la solución. Muchas gracias.

1 votos

Claro. Espero que ayude, definitivamente hay espacio para la optimización si funciona. Puede ser un marco en todo caso.

0 votos

Absolutamente, no hay daño en intentarlo. Es un buen comienzo.

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