Dies ist eine einfache und recht häufige Frage, die bereits für verschiedene Zwecke gestellt wurde (siehe diesen Link und dies auch zum Beispiel). Hier suchen wir jedoch nicht nach einem Softwarepaket, sondern nach Algorithmen , die wir beispielsweise implementieren könnten Python .
Wie unten gezeigt, wird eine Reihe von Linien zugeordnet (sie sind übrigens bereits zugeschnitten).
Algorithmen / Ideen zur Erzeugung von Polygonen (wie rot gezeigt) ?
algorithm
polygonize
geometry-conversion
Entwickler
quelle
quelle
Antworten:
Nun, wir geben hier eine Antwort, die keine vollständige Antwort auf unsere Frage ist, dh die Frage bleibt " offen für Antworten ". Es ist jedoch eine Lösung für das Problem in der Frage. Hier ist der Trick, den wir verwendet haben:
Lassen Sie uns zuerst die Ergebnisse sehen :
Also die angegebenen Linien in den
left
gebauten Polygonen in dermiddle
. Sie sind echte Polygone, wie in der Abbildung gezeigtright
;)Für den unten angegebenen Algorithmus haben wir das
Shapely
Paket in Python verwendet .MultiLineString
{:: M}buffer
, sageps
{:: MB}Polygon
{:: P} (region hier ist ein Quadrat)P.difference(MB)
{resultierende Polygone}Beachten Sie, dass es im Betrieb sehr schnell ist. Der fehlende Punkt ist jedoch, dass der Algorithmus keine ursprüngliche Methode zum Erstellen von Polygonen aus Linien ist . Trotzdem funktionierte es perfekt für das Problem, das wir in der Hand hatten.
quelle
Die JTS Topology Suite verfügt über eine Polygonizer-Klasse, die dies ziemlich genau tut.
Sie können sich den hier verfügbaren Quellcode ansehen und ihn in Python konvertieren.
quelle
Sie können sich das Python Shapely-Paket ansehen, insbesondere polygonize ()
quelle
from shapely.ops import polygonize
) GEOS.Polygonize von GEOS verwendet . Dies ist also ein Link, über den ein Link zu einem Link besteht ...: |polygonize
waren überhaupt nicht erfolgreich. Vielen Dank jedoch, dass Sie uns daran erinnert haben,Shapely
mit welcher Lösung wir eine Lösung finden können (eigentlich ein Trick).Hier ist eine andere Lösung, die wir finden könnten.
Für Python gibt es ein Paket {hier} . Es ist eine winzige Implementierung mit einigen Fehlern. Trotzdem kann es mit etwas Aufwand für dieses Problem eingesetzt werden. Beachten Sie auch die folgenden Schritte:
Eine Vorverarbeitungsstufe, in der alle Schnittpunkte zwischen Linien gefunden werden. Dementsprechend werden dann alle Linien an den Interaktionspunkten in Segmente unterteilt. Eine Liste der Schnittpunkte und eine Liste der zugehörigen Kanten werden für DCEL benötigt.
quelle
difference
Betrieb verwendet wird.