Ich möchte den Schnittpunkt mehrerer Polygone erhalten. Mit dem Python- shapely
Paket kann ich mithilfe der intersection
Funktion den Schnittpunkt zweier Polygone ermitteln . Gibt es eine ähnlich effiziente Funktion, um den Schnittpunkt mehrerer Polygone zu erhalten?
Hier ist ein Code-Snippet, um zu verstehen, was ich meine:
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)
Ein Schnittpunkt zweier Kreise kann durch gefunden werden circle1.intersection(circle2)
. Ich kann den Schnittpunkt aller drei Kreise durch finden circle1.intersection(circle2).intersection(circle3)
. Dieser Ansatz ist jedoch für eine große Anzahl von Polygonen nicht verkaufbar, da er zunehmend mehr Code erfordert. Ich möchte eine Funktion, die eine beliebige Anzahl von Polygonen verwendet und deren Schnittpunkt zurückgibt.
python
polygon
intersection
polygon-creation
shapely
Splitter
quelle
quelle
Antworten:
Ein möglicher Ansatz könnte darin bestehen, die Kombination von Polygonpaaren, ihre Schnittpunkte und schließlich die Vereinigung aller Schnittpunkte über eine kaskadierte Vereinigung (wie hier vorgeschlagen ) zu berücksichtigen :
Ein effizienterer Ansatz sollte einen räumlichen Index wie Rtree verwenden , um mit vielen Geometrien umgehen zu können (nicht der Fall der drei Kreise):
quelle
Warum nicht eine Iteration oder Rekursivität verwenden? etwas wie :
quelle
Probieren Sie diesen Code aus. Das Konzept ist ziemlich einfach und ich glaube, Sie bekommen das, wonach Sie suchen.
und wenn Sie möchten, dass die Ausgabe als Shapefile gespeichert wird, verwenden Sie fiona:
diese Ausgaben -
quelle
k
undv
sind schlechte Entscheidungen für Variablennamen in Ihremdict
Verständnis. Diese Variablen beziehen sich jeweils auf verschiedene Elemente vondic.items()
, nicht auf ein Schlüssel-Wert-Paar. So etwasa, b
wäre weniger irreführend.