6 votos

Encontrar el área de intersección común de cada par de rectángulos con topes de círculo dentro de cada uno usando ArcPy con ArcGIS Pro

Estoy en ArcGIS Pro medio ambiente y para este caso una herramienta simple Intersect no es suficiente, así que estoy tratando de algunas secuencias de comandos de Python.

A continuación se muestran los rectángulos y los topes de círculo que necesito sus intersecciones de pares.

enter image description here

La segunda imagen de abajo es cómo NO quiero que mis intersecciones. Esto es sólo un resultado normal de la herramienta de intersección.

enter image description here

Y la tercera imagen de abajo es la forma en que me gustaría obtener todas las intersecciones.

enter image description here

Soy muy nuevo en programación y Python. He hecho algunos intentos y hasta ahora esto es lo que tengo:

import arcpy

arcpy.env.workspace = 'Workspace'    
blocos = 'rectangles'    
buffers = 'circle_Buffers'    
out_fc_intersect = []

with arcpy.da.SearchCursor(blocos, 'SHAPE@') as cursor_blocos:    
    for row_blocos in cursor_blocos:    
        with arcpy.da.SearchCursor(buffer, 'SHAPE@') as cursor_buffer:    
            for row_buffer in cursor_buffer:    
                arcpy.Intersect_analysis([cursor_blocos, cursor_buffer], out_fc_intersect_SC[])

Intenté usar SearchCursors para recorrer los registros de las clases de características (rectángulos y círculos) para poder usar estos cursores para intersectar cada característica por separado. Creo que estoy en el camino correcto, pero no sé cómo guardar y montar de nuevo todas las intersecciones separadas de cada par.

5voto

FelixIP Puntos 4035

Este es el caso cuando el scripting es una exageración masiva, porque:

arcpy.Intersect_analysis("buffer #;fish_net #","in_memory/isect", "ONLY_FID")
arcpy.Dissolve_management("isect", "in_memory/dissolve", dissolve_field="FID_fish_net")

Hace el trabajo en un santiamén:

enter image description here

4voto

jbalk Puntos 581

Esto debería funcionar - encuentra el polígono que interseca con el centroide del buffer, y encuentra la intersección sólo del polígono que contiene el centroide del buffer. No se ha probado. Tenga en cuenta que esto modificará sus datos en el lugar, así que haga una copia.

import arcpy

polygon_geom_list = []

buffers = r'C:\path_to_your_buffer_layer'
polys = r'C:\path_to_your_polygon_layer'

buffers = arcpy.mapping.Layer(buffers)
polys = arcpy.mapping.Layer(polys)

# Create list of geometries from the polygons
with arcpy.da.SearchCursor(polys,["SHAPE@"]) as ecur:
    for e in ecur:
        polygon_geom_list.append(e[0])
del ecur

# Test if polygons intersect the buffer centroids and if so, run the intersection for the buffer and polygon
for e in polygon_geom_list:
    with arcpy.da.UpdateCursor(buffers, ["SHAPE@"]) as buffers:
        for buffer in buffers:
            if e.contains(buffer[0].centroid)==True:
                buffers.updateRow([buffer[0].intersect(e)])
del buffers

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