Ich habe den "Namen" des Algorithmus nicht gefunden, mit dem man Linien in Polygone konvertieren kann. Da dieses Thema GIS und die Bereiche Computergeometrie und Informatik kreuzt. Ich bin mir nicht sicher, was ich noch zu der Mischung hinzufügen soll. Ich zögere es, eine Liste meiner Suchanfragen bereitzustellen, da ich auch gerne wissen möchte, welche anderen Personen ihre erste Wahl für Suchkriterien treffen würden.
Das Szenario ... Ich habe Linien (zwei Punkte werden benötigt, um eine Linie zu konstruieren) ... jede Linie ist mit mindestens einer anderen Linie verbunden. Der Zwischenraum zwischen den verbundenen Linien würde ein Polygon bilden. Das einfachste Szenario wäre ein Dreieck ... ein Rechteck ... und man könnte darüber hinaus zu mehrsegmentierten Features übergehen.
Entschuldigen Sie vage Beschreibungen, aber wie gesagt, ich möchte die möglichen Lösungen nicht auf einen Weg führen, den ich bereits besucht habe, da ich mich sowohl für den "ersten Gedanken" als auch für eine endgültige Lösung interessiere.
quelle
Antworten:
Vielleicht "Flächenfüllung"? Sehen Sie hier und hier .
Bearbeiten
Eine andere Möglichkeit ist die eingeschränkte Triangulation . (Der Link führt zu einem Java-Applet, mit dem Sie ein Diagramm mit der Maus zeichnen und anschließend einen Ebenen-Sweep-Algorithmus zum Triangulieren veranschaulichen können.) Das Ergebnis einer solchen Triangulation, unabhängig davon, wie sie ausgeführt wird, kann problemlos verarbeitet werden Erstellen Sie die gewünschten Polygone: Führen Sie einfach alle benachbarten Dreiecke zusammen, die eine neu erstellte Kante gemeinsam haben.
Beispiel
Originalgrafik:
Triangulierter Graph:
quelle
In der Graphentheorie wird diese Operation als Flächenberechnung bezeichnet . Es bezieht sich auf die Berechnung des Duals eines gegebenen Graphen.
In der GeOxygène- Java-Bibliothek verfügt beispielsweise ein Diagramm ( CarteTopo ) über eine Methode getFaces, mit der das Gesicht abgerufen werden kann .
Dies wird in JTS als Polygonisierung bezeichnet
quelle
Die RepRap-Hostsoftware konvertiert eine Liste von Liniensegmenten (in einer unbekannten zufälligen Reihenfolge) in eine Liste von Polygonen, die sich ähnlich anhört, wie Sie es versuchen.
Insbesondere behandelt der RepRap-Algorithmus "End Matching" eine Reihe von pathologischen Fällen.
Leider geht die RepRap-Software davon aus, dass jede Ecke eine gerade Anzahl von Kanten aufweist - 2 Linien, die zu einer Ecke eines normalen Objekts führen. 4 Linien gehen zusammen, wenn die Ecke eines Objekts die Ecke eines anderen Objekts berührt usw. Ich weiß nicht, wie schwierig es wäre, diesen Algorithmus für Voronoi-Diagramme anzupassen, bei denen normalerweise 3 Kanten zu jeder Ecke verlaufen.
quelle
Haben Sie die Codebasis von GRASS nach einer Lösung für Ihr Problem durchsucht? -> http://old.nabble.com/Polyline-to-Polygon-operation-td20257839.html
quelle
main.c
derv.type
Quelle ersehen kann, werden die Features lediglich als Grenzen umbenannt: Es findet keine tatsächliche Verarbeitung statt. Im Nachhinein ist dies nicht allzu überraschend: Wenn (ich weiß nicht genau) die Features mit vollständigen topologischen 2D-Informationen verwaltet werden, hat die gesamte Berechnung zur Identifizierung polygonaler Regionen automatisch während der Erstellung oder des Imports von Features stattgefunden und wird durchgehend beibehalten alle Geoverarbeitungsvorgänge.Hallo
Ich glaube nicht, dass Sie nach einem bestimmten Algorithmus suchen. Die Aufgabe kann je nach Datensatz sehr schwierig oder sehr einfach sein.
Sie sollten das Problem in mindestens 2 Teile teilen. 1) ist eher ein Netzwerkproblem, wie man geschlossene Ringe von Linestrings findet. 2) Drücken Sie den geschlossenen Linienstreifen als Polygon aus
Der zweite Teil, der "Konvertieren von Linien in Polygone" ist, hängt mehr vom Format als von der Darstellung von Polygonen / Linien ab. Ich meine von:
LINESTRING (1 1, 2 2)
LINESTRING (2 2, 2 1)
LINESTRING (2 1, 1 1)
an:
POLYGON ((1 1,2 2,2 1,1 1))
konvertiert Linie in Polygon, ist aber nicht das, wovon Sie sprechen, denke ich. Der schwierigere Teil ist der erste. Wenn Sie eine Spaghetti von Linien haben, wie Sie sie als geschlossene Linien bestellen.
Ich denke, die Antwort auf diese Frage hängt stark vom Datensatz ab. Wie Kirk fragt, ist es viel größer, ob die Linien das Problem kreuzen können. Wenn Sie wissen, dass alle "Liniensammlungen" Teil eines geschlossenen Linestrings sind, wird es einfacher. Dann können Sie eine beliebige Linie greifen und sich um den Pfad herumbewegen, bis Sie wieder zurück sind, und dann mit Schritt zwei oben fortfahren.
Mein Punkt ist, dass der Zustand des Datensatzes alle Regeln dafür festlegt. Wenn Sie alle möglichen Polygone in einer Spaghetti von Linestrings finden möchten, müssen vermutlich viele verschiedene Algorithmen verwendet werden, um Scheitelpunkte in alle Kreuzungen einzufügen, alle möglichen Pfade zu durchsuchen und so weiter.
In PostGIS heißt die Funktion ST_Polygonize. Diese Funktion erstellt alle möglichen Polygone aus den von Ihnen angegebenen Linestrings.
Dies wird von GEOS durchgeführt, sodass Sie die dahinter stehenden Algorithmen sowohl im GEOS- als auch im JTS-Code finden können.
Nur ein paar Gedanken
/ Nicklas
quelle
Sie könnten versuchen, nach dem "Forward Star" -Algorithmus zu suchen. Mir wurde gesagt, dass es generisch ist, aber die einzigen Diskussionen darüber, die ich jemals gelesen habe, bezogen sich immer auf Arcgis. Schauen Sie sich vielleicht die in diesen Vorlesungsunterlagen zitierten Referenzen für Forward Star an.
quelle