2016-09-12 1 views
1

Ich habe zwei formschöne MultiPolygon-Instanzen (aus lon, lat punkten), die sich an verschiedenen Stellen schneiden. Ich versuche, eine Schleife zu durchlaufen, zu bestimmen, ob ein Schnittpunkt zwischen zwei Polygonen besteht, und ein neues Polygon zu erstellen, das diesen Schnittpunkt ausschließt. Aus dem angehängten Bild möchte ich grundsätzlich nicht, dass sich der rote Kreis mit der gelben Kontur überschneidet. Ich möchte, dass die Kante genau dort ist, wo die gelbe Kontur beginnt.Erstellen Sie ein neues formschönes Polygon, indem Sie den Schnittpunkt mit einem anderen Polygon subtrahieren

Ich habe versucht, die Anweisungen here zu folgen, aber es ändert meine Ausgabe überhaupt nicht, und ich möchte sie nicht zu einer Kaskadenverbindung zusammenführen. Ich erhalte keine Fehlermeldungen, aber wenn ich diese MultiPolygons zu einer KML-Datei hinzufüge (nur Rohtextmanipulation in Python, kein schickes Programm), werden sie immer noch als Kreise ohne irgendwelche Modifikationen angezeigt.

# multipol1 and multipol2 are my shapely MultiPolygons 
from shapely.ops import cascaded_union 
from itertools import combinations 
from shapely.geometry import Polygon,MultiPolygon 

outmulti = [] 
for pol in multipoly1: 
    for pol2 in multipoly2: 
     if pol.intersects(pol2)==True: 
      # If they intersect, create a new polygon that is 
      # essentially pol minus the intersection 
      intersection = pol.intersection(pol2) 
      nonoverlap = pol.difference(intersection) 
      outmulti.append(nonoverlap) 

     else: 
      # Otherwise, just keep the initial polygon as it is. 
      outmulti.append(pol) 

finalpol = MultiPolygon(outmulti) 

Polygon Overlap

Antwort

2

Ich denke, man die symmetric_difference zwischen Thesen zwei Polygone verwenden kann, um die Differenz mit dem zweiten Polygon kombiniert zu erreichen, was Sie (der symmetrische Differenz Wille bringt Ihnen das nicht tun wollen Überlappende Teile aus den beiden Polygonen, auf denen Teile des Polygons 2 durch die Differenz entfernt werden. Ich habe nicht getestet, aber es könnte aussehen wie:

# multipol1 and multipol2 are my shapely MultiPolygons 
from shapely.ops import cascaded_union 
from itertools import combinations 
from shapely.geometry import Polygon,MultiPolygon 

outmulti = [] 
for pol in multipoly1: 
    for pol2 in multipoly2: 
     if pol.intersects(pol2)==True: 
      # If they intersect, create a new polygon that is 
      # essentially pol minus the intersection 
      nonoverlap = (pol.symmetric_difference(pol2)).difference(pol2) 
      outmulti.append(nonoverlap) 

     else: 
      # Otherwise, just keep the initial polygon as it is. 
      outmulti.append(pol) 

finalpol = MultiPolygon(outmulti) 
+0

Vielen Dank, das hat geholfen! Ich erkannte, dass der Fehler teilweise darauf zurückzuführen war, dass ich später in meinem Code eine andere Schleife eingerichtet hatte ... Ups. – edub

+0

Froh, dass Sie Ihr Ergebnis erhalten haben! – mgc

Verwandte Themen