Me gustaría obtener la intersección de múltiples polígonos. Usando el shapely
paquete de Python , puedo encontrar la intersección de dos polígonos usando la intersection
función. ¿Existe una función eficiente similar para obtener la intersección de múltiples polígonos?
Aquí hay un fragmento de código para entender lo que quiero decir:
from shapely.geometry import Point
coord1 = ( 0,0 )
point1 = Point(coord1)
circle1 = point1.buffer(1)
coord2 = ( 1,1 )
point2 = Point(coord2)
circle2 = point2.buffer(1)
coord3 = ( 1,0 )
point3 = Point(coord3)
circle3 = point3.buffer(1)
Se puede encontrar una intersección de dos círculos por circle1.intersection(circle2)
. Puedo encontrar la intersección de los tres círculos por circle1.intersection(circle2).intersection(circle3)
. Sin embargo, este enfoque no se puede vender a una gran cantidad de polígonos, ya que requiere cada vez más código. Me gustaría una función que tome un número arbitrario de polígonos y devuelva su intersección.
Respuestas:
Un posible enfoque podría ser considerar la combinación de pares de polígonos, sus intersecciones y finalmente la unión de todas las intersecciones a través de una unión en cascada (como se sugiere aquí ):
Un enfoque más eficiente debería usar un índice espacial, como Rtree , para tratar con muchas geometrías (no el caso de los tres círculos):
fuente
¿Por qué no usar una iteración o recursividad? algo como :
fuente
Dale una oportunidad a este código. es bastante simple en concepto y creo que te da lo que estás buscando.
y si desea que la salida se almacene como un archivo shape, use fiona:
esto produce
fuente
k
yv
son malas elecciones para nombres de variables en susdict
comprensiones. Esas variables se refieren a elementos diferentesdic.items()
, no a un par clave-valor. Algo asía, b
sería menos engañoso.