So teilen Sie zwei sich überschneidende Polygone durch die durchschnittliche Linienführung des gemeinsam genutzten Bereichs (QGIS / Python formschön)

9

Ich habe zwei Polygone,

POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5)) POLYGON ((1 1, 1 7, 7 7, 7 1, 1 1))

und möchten sie gleichmäßig aufteilen. Das Ergebnis sollte eine Aufteilung entlang der rot markierten Linie sein.

Ich benutze qgis / python formschön und möchte es mit python machen.

LINESTRING (1 5,5 1)

OLS
quelle
4
Wie allgemein ist Ihr Problem? Offensichtlich beabsichtigen Sie eine Lösung, die auf mehr als nur diese beiden Polygone angewendet werden soll. Welche Arten von Polygonen betrachten Sie? Was genau meinst du mit "gleichmäßig"? Muss die Teilung entlang eines Liniensegments erfolgen oder kann sie entlang eines nichtlinearen Bogens erfolgen? Was soll passieren, wenn der Polygonschnitt aus mehreren Komponenten besteht oder nicht einfach verbunden ist? Welche Form sollte die Ausgabe annehmen - sollte sie den Schnittpunkt oder jedes der Polygone teilen oder vielleicht nur die Trennlinie sein?
whuber
1
Ich arbeite mit unregelmäßigen Polygonen und möchte zwei sich nicht überschneidende Polygone haben. In diesem Fall sind die ursprünglichen Polygone als Erwähnungen und das gewünschte Ergebnis POLYGON ((- 5 -5, -5 5,1 5,5 1,5 -5, -5 -5)) POLYGON ((1 5, 1 7, 7 7, 7 1,5 1,1 5))
OLS
1
Das Problem ist schwierig, wenn eines oder beide der Polygone Ringe haben können (dh nicht einfach verbunden sind).
whuber

Antworten:

5

Ich habe einmal einen Ansatz mit Voronoi-Polygonen verwendet. Ich habe es von Hand gemacht und ich habe nur eine vage Vorstellung davon, wie man es formschön machen kann, aber hier ist, wie es geht.

Zunächst extrahieren Sie die Eckpunkte der einzelnen überlappenden Polygone und erstellen daraus Voronoi-Polygone (Vektor> Geometriewerkzeuge> Knoten extrahieren & Vektor> Geometriewerkzeuge> vononoi). Mit der resultierenden Form können Sie die Linie zeichnen, die Ihren überlappenden Bereich genau in zwei Teile teilt. (Die hellgrüne Linie) voronoi

Sie schneiden die Voronoi-Ebene mit dem überlappenden Polygon ab, entfernen die Überlappung von den ursprünglichen Formen und fügen das abgeschnittene Voronoi-Polygon mit Ihren ursprünglichen Formen wieder ein. Auswählen, zusammenführen, voilà!

Jetzt sieht es ein wenig grob aus, weil meine wirklich einfache Formen sind. Wenn Sie es jedoch verdichten (Vektor> Geometrie-Werkzeuge> Dichte-Geometrien) und zwischen jedem vorhandenen Scheitelpunkt etwa 20 Knoten hinzufügen, können Sie Folgendes haben:

densigy_voronoi

Welches ist viel besser. Einfach, wenn Sie nur eine kleine Anzahl von Formen ändern müssen.

fgcartographix
quelle
Das ist eine gute Idee. Aber woher kommt diese hellgrüne Linie und woher weißt du, dass sie die Region in zwei gleiche Teile aufteilt?
whuber
Wie unterschiedlich ist dieser Prozess von `SELECT astext (Kreuzung (geomFromText ('POLYGON ((- 5 -5, -5 5,5 5,5 -5, -5 -5))', 4326), geomFromText ('POLYGON (') (1 1, 1 7, 7 7, 7 1, 1 1)) ', 4326))); astext -------------------------------- POLYGON ((1 5,5 5,5 1,1 1,1 5) ) '?
OLS
Es kommt von der Angemessenheit des Voronoi-Polygons. Es teilt den Raum gleichmäßig zwischen den Punkten auf. Deshalb müssen Sie Ihre Polygone verdichten, da sonst die "Mittellinie" nicht den Grenzen folgt. Die helle Linie zeichne ich manuell, um zu veranschaulichen, wo sich die Mitte befindet ... Was den PostGIS-Befehl betrifft (ich bin ein Neuling in PostGIS), wird er meiner Meinung nach nur den Schnittbereich auswählen, nicht teilen.
fgcartographix
1
Trotzdem habe ich nicht gesagt, dass es zu gleichen Teilen sein wird. Diese Methode wird verwendet, um die Mittellinie des Flusses zu finden. Wenn Sie eine Bucht im Fluss haben, wird die Mittellinie dorthin gezogen. aber es wird nicht eintreten, so dass es trotzdem "zentriert" wird.
fgcartographix