Je voudrais obtenir l'intersection de plusieurs polygones. En utilisant le shapely
package de Python , je peux trouver l'intersection de deux polygones en utilisant la intersection
fonction. Existe-t-il une fonction efficace similaire pour obtenir l'intersection de plusieurs polygones?
Voici un extrait de code pour comprendre ce que je veux dire:
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)
Une intersection de deux cercles peut être trouvée par circle1.intersection(circle2)
. Je peux trouver l'intersection des trois cercles par circle1.intersection(circle2).intersection(circle3)
. Cependant, cette approche n'est pas vendable à un grand nombre de polygones car elle nécessite de plus en plus de code. Je voudrais une fonction qui prend un nombre arbitraire de polygones et renvoie leur intersection.
Réponses:
Une approche possible pourrait être de considérer la combinaison de paires de polygones, leurs intersections et enfin l'union de toutes les intersections via une union en cascade (comme suggéré ici ):
Une approche plus efficace devrait utiliser un index spatial, comme Rtree , afin de traiter un grand nombre de géométries (pas le cas des trois cercles):
la source
Pourquoi ne pas utiliser une itération ou une récursivité? quelque chose comme :
la source
Essayez ce code. son concept est assez simple et je crois que vous obtenez ce que vous recherchez.
et si vous voulez que la sortie soit stockée sous forme de fichier de formes, utilisez fiona:
cela produit -
la source
k
etv
sont de mauvais choix pour les noms de variables dans vosdict
compréhensions. Ces variables font chacune référence à différents éléments dedic.items()
, et non à une paire clé-valeur. Quelque chose commea, b
serait moins trompeur.