Teilen von Polygonen in bestimmte Größen mit ArcGIS Desktop?

26

Ich habe mehrere tausend unregelmäßig geformte Polygone in einem Shapefile. Ich möchte in der Lage sein, jedes Polygon in drei Bereiche aufzuteilen und die Größe dieser Bereiche anzugeben (sie summieren sich zur vorherigen Gesamtfläche). Es spielt keine Rolle, wie die Subpolygonform lautet, da dies zu Visualisierungszwecken dient.

Wie kann ich das machen? Gibt es einen Standardalgorithmus, den ich verwenden kann?


Ein Ansatz, den ich in Betracht gezogen habe, bestand darin, alle Punkte zu ermitteln, aus denen das Polygon besteht. Dann verband ich zwei zufällig mit einer geraden Linie, teilte das Polygon und überprüfte, ob der Bereich innerhalb einer zufriedenstellenden Toleranz lag. Wenn es zu klein wäre, würde ich den Punkt in eine Richtung ändern; Wenn es zu groß wäre, würde ich zu einem Punkt in die entgegengesetzte Richtung wechseln.

djq
quelle

Antworten:

34

Dieses Problem hat viele gültige Lösungen. Eine davon funktioniert ein wenig wie Ihre Beschreibung, aber anstatt die Polygone an "zufälligen" Stellen aufzuteilen, können Sie dies gezielt tun, um den Rechenaufwand zu minimieren.

Hier ist der grundlegende Algorithmus. Seine Eingabe besteht aus einer beliebigen Ebenenabtastrichtung, einem Polygon P mit einer Fläche ungleich Null, einer Zielfläche a zwischen Null und der Fläche des Polygons und einer nichtnegativen Schwelle t (in Flächeneinheiten). Sein Zweck ist es, P mit einer Linie senkrecht zur Abtastrichtung in zwei Teile zu teilen , einen rechts von der Linie und den anderen links von der Linie, so dass der Unterschied zwischen dem rechten Bereich und dem Zielbereich a nein ist größer als t .

Es sei L eine beliebige gerichtete Linie senkrecht zur Sweep-Richtung. Definiere f (L) als die Fläche von P rechts von L minus a . In diesen Begriffen besteht die Aufgabe darin , eine Null von f zu finden . Da es unwahrscheinlich ist, dass f differenzierbar ist, es aber stetig ist, verwenden Sie entweder eine Halbierungsmethode, die Sekantenmethode oder - meine Lieblingsmethode - die Methode von Brent . Alle sind einfach und konvergieren garantiert. Verwenden Sie t für die Konvergenztoleranz für das Argument.

Das ist es. Lassen Sie uns überlegen, wie das codiert wird. Die Wurzelfindung ist Routine - Sie können einen generischen Codeabschnitt dafür verwenden -, sodass die GIS-Arbeit auf die Codierung von f hinausläuft . Dies erfordert

1.  Splitting the polygon by a line.
2.  Computing the area of the piece(s) to the right of the line.

Beide Operationen sind in nahezu jedem vektorbasierten GIS implementiert. Andernfalls können Sie die Linie durch ein sehr großes Rechteck ersetzen, das die Halbebene rechts von der Linie darstellt. Schritt 1 wird

1'. Clip the polygon to the rectangle.

Das ist eine wirklich grundlegende Operation.

Um mit der Wurzelfindung zu beginnen, müssen Sie ein Intervall finden, in dem die Null von f garantiert liegt. Dies ist ganz einfach: Projizieren Sie den Umschlag des Polygons ("Bounding Box") in Richtung des Linien-Sweeps. Die Projektion ist das gewünschte Intervall.

Diese Frage hat eine lange Geschichte. Ich habe diesen Algorithmus für ArcView 3.x vor langer Zeit implementiert und ihn in den alten ESRI-Benutzerforen oft beschrieben. Google

huber split polygon site: forums.esri.com

für Diskussionen, Links zu Code, Verbesserungen und Variationen (wie das Aufteilen von Polygonen in Teile gewünschter Größen, die so kompakt wie möglich sind) und Algorithmen für Rasterdaten.

So sehen die kontinentalen US-Bundesstaaten aus (in einer flächengleichen Projektion), wobei das untere Drittel jedes Bundesstaates schattiert ist. Offensichtlich war die Schwenkrichtung vertikal.

Alt-Text

whuber
quelle
6

Es gibt ein fertiges Tool namens "GeoTools" von ET Spatial. Wo gibt es ein Tool namens "ET Miscellaneous". In diesem Tool gibt es zwei Möglichkeiten, Polygone zu teilen, nämlich. Nach Prozentsatz und nach Fläche (mehrere Einheiten, z. B. m², Hektar usw.). Dieses Werkzeug teilt Polygone von jeder der vier Seiten, dh NESW, wie in den Bildern gezeigt. Ich habe die Methode "von oben nach unten" verwendet, dh von Nord nach Süd.

Teilt

Islam
quelle
0

In ArcGIS Pro 2.3 gibt es ein neues Werkzeug namens " Polygon unterteilen" .

Es ermöglicht das Teilen / Unterteilen eines Polygons mit einer bestimmten Anzahl von Teilen oder einer gewünschten Teilefläche.

0kcats
quelle