Wie kann man in Arcpy ein konkaves Polygon in konvexe Polygone aufteilen?

20

Ich suche ein Werkzeug oder einen Algorithmus, um konkave Polygone zu erkennen und in konvexe Polygone aufzuteilen. Wie im Bild erklärt, wird das blaue Polygon in A- und B-Polygone aufgeteilt

Ich verwende Arcpy unter Arcgis 10.1

geteilte Polygone

Geogeek
quelle
15
Vielleicht könnten Sie erläutern, warum Sie das tun? Schließlich ist (a) die Erkennung einfach: Ein konkaves Polygon hat weniger Fläche als seine konvexe Hülle; und (b) jede Triangulation eines Polygons teilt es automatisch in konvexe Polygone, da alle Dreiecke konvex sind. Dies zeigt, dass Sie eine gewisse Flexibilität bei der Auswahl der vielen möglichen Lösungen haben.
whuber
2
Mit diesem Toolset können Sie sehen, wovon Bill spricht resources.arcgis.com/gallery/file/geoprocessing/… konvertieren Sie das Polygon in Punkte und führen Sie dann die Option Delaunay aus
1
Auf Stack Overflow gibt es eine Antwort darauf: stackoverflow.com/a/6686842/1300519 Die beschriebenen Algorithmen sollten mit Arcpy nicht zu schwierig zu schreiben sein.
Snorfalorpagus
1
@snorf Das scheint eine etwas, aber vor allem andere Frage zu beantworten. Die Lösung beinhaltet anscheinend eine Kombination von "Polygonen" und "Löchern" , was normalerweise nicht mit "Teilen" gemeint ist. Zumindest muss diese Antwort weiter ausgearbeitet werden, um hier von Nutzen zu sein. (Übrigens, Ihre Antwort wurde in einen Kommentar geändert, da Querverweise auf andere Lösungen im Internet ohne zusätzliche Erklärung hier auf SE nicht als Antworten angesehen werden.)
whuber
2
Nach den Kommentaren hier zu urteilen und keine Antworten zu erhalten, würde ich empfehlen, Ihre Frage zu bearbeiten, um dieses Feedback zu berücksichtigen und ein Kopfgeld anzubieten.
PolyGeo

Antworten:

1

Hier sind ein paar Schritte, um die Eckpunkte von den konkaven Teilen zu identifizieren:

mit Paket: minimale Begrenzungsgeometrie (Rumpf) -> parcelHull

mit Paket: FeatureVerticesToPoint -> parcelPoints

mit parcelHull: FeatureVerticesToPoint -> parcelHullPoints

mit parcelPoint und parcelHullPoint: symmetrisches Diff -> concavePoints

Basierend auf diesen Punkten können Sie entweder die Bissectrice zeichnen, um Ihr Polygon zu schneiden (Peilungsabstand zur Linie), die Kanten des Voronoï-Dreiecks auswählen, die Ihren Punkt schneiden, aber kein Segment mit Ihrer Flurstücksgrenze teilen (Auswahl nach Position nach Aufteilen des Dreiecks Linien an Eckpunkten), wählen Sie den Eckpunkt auf der gegenüberliegenden Seite und machen Sie eine Linie (Punkte zu Linie), wählen Sie den nächsten Punkt auf der gegenüberliegenden Kante und machen Sie eine Linie (Punkte zu Linie) ...

Verwenden Sie am Ende Ihre bevorzugten Linien und die ursprünglichen Flurstücke mit "Feature to Polygon", um die Polygone zu teilen.

radouxju
quelle