Wie verbinde ich Leitungen in einem Netzwerk?

15

Ich habe ein Shapefile von Linien und ein anderes von Polygonen. Wenn zwei oder mehr Linien ein Polygon schneiden, sollten sie verbunden (eingerastet) werden, aber manchmal tritt dies während der manuellen Digitalisierung nicht auf. Ich muss all diese Fehler finden und korrigieren. Ich habe v.cleanGRASS GIS verwendet und es hat automatisch viele Scheitelpunkte gefangen, was gut war, aber einige dieser getrennten Linien sind weiter von der Toleranz entfernt, und wenn ich die Toleranz zu stark erhöhe, entstehen andere Arten von Fehlern.

Bildbeschreibung hier eingeben

Irgendwelche Ideen?

vascobnunes
quelle
1
Verbinden Sie die Polylinienendpunkte räumlich mit den Polygonen und fassen Sie die Zählungen nach Polygon zusammen. Erstellen Sie für jedes Polygon, das mehr als einen verbundenen Endpunkt enthält, eine Polylinie, die aus Segmenten besteht, die vom Schwerpunkt dieser Endpunkte bis zu den Endpunkten selbst (einem "Stern") verlaufen. Verbinden Sie die Sterne mit den ursprünglichen Polylinien. Bereinigen Sie das Ergebnis, um eventuell auftretende Selbstüberschneidungen zu entfernen. Jeder dieser Schritte wird von voll funktionsfähigen GIS unterstützt (und kann automatisiert werden). Da ich mit den Details von QGIS oder GRASS nicht vertraut bin, biete ich diese Lösung nur als Kommentar an.
Whuber
aber manchmal enden alle Zeilen außerhalb des Polygons ...
vascobnunes
1
Was bedeuten diese Linien? Wenn es sich um Flüsse handelt, sind sie mit zusätzlichen Informationen wie Name oder Stream Order verschlüsselt? Ist das Netzwerk gerichtet (zB ein Flussnetz), so müssen beispielsweise zwei Ströme erster Ordnung in einen Strom zweiter Ordnung fließen. Ich denke, ich versuche zu sagen, dass Sie den Fangprozess mit ein wenig Intelligenz hinter sich lassen möchten, um das Problem des zweifelhaften Schnappens mit zunehmender Suchtoleranz zu überwinden.
Hornbydd
1
Ihr Kommentar scheint der Frage zu widersprechen. Die Frage scheint zu sagen, dass Sie Eckpunkte fangen möchten, die in ein gemeinsames Polygon fallen. Wenn ein Eckpunkt außerhalb eines Polygons liegt, geben Sie keine Kriterien an, wie er behandelt werden soll! Wie genau ist die Beziehung zwischen den Polygonen und den Polylinien?
whuber
1
Ich stimme whuber zu; vielleicht solltest du die frage klären. Klingt so, als ob Sie Linien wünschen, die sich im Polygon befinden, sowie "schließen", aber diejenigen ausschließen, die sich im Polygon befinden, aber ordnungsgemäß verbunden sind?
Darren Cope

Antworten:

7

Mein Verständnis des Problems ist wie folgt:

Wenn ein Polylinienendpunkt ein Polygon schneidet, muss die Polylinie (durch Hinzufügen oder Anpassen von Scheitelpunkten) mit allen zusätzlichen Polylinienendpunkten verbunden werden, die dasselbe Polygon schneiden.

Einige Polylinien-Endpunkte schneiden kein Polygon, da es sich um Unterschwinger handelt. Diese sollten jedoch wie oben beschrieben verbunden werden.

Diese Antwort baut auf einigen bereits gegebenen auf, ist aber nicht vollständig, da mir nicht alle QGIS-Befehle bekannt sind. Vielleicht kann noch jemand etwas hinzufügen?

  1. Extrahieren Sie für jede Polylinie die Endpunktkoordinaten ( Vektor> Geometriewerkzeuge> Knoten extrahieren und dann aufräumen) und berechnen Sie, ob sie sich innerhalb eines Polygons befinden oder nicht ( Vektor> Forschungswerkzeuge> Nach Position auswählen ).

  2. Für Linienzug Endpunkte , die innerhalb eines Polygons sind, dass Ende der Polylinie in der Mitte des Polygons erstrecken (Extrahieren Sie das Polygon - Zentrum mit Vector> Geometrie Tool> Polygon centroid , nicht sicher über die Linie Modifikation, wenn Sie zur Arbeit der Lage sein könnten , mit die Polylinienscheitelpunkte als Punkte und fügen Sie weitere mit der entsprechenden Nummerierung hinzu, bevor Sie die geänderte Polylinie mit dem Plugin "Punkte zu Pfaden" rekonstruieren.)

    Sie erwähnen, dass es Situationen geben kann, in denen einige oder alle Linien korrekt verbunden wurden. In diesen Situationen (erkennbar an übereinstimmenden Polylinienendpunkten) können Sie statt des Polygonschwerpunkts die übereinstimmende Endpunktposition als zu verlängernden Punkt verwenden Alle zusätzlichen nicht verbundenen Polylinien für dieses Polygon.

  3. Verlängern Sie bei Polylinienendpunkten, die außerhalb eines Polygons liegen, dieses Ende der Polylinie bis zur Mitte des nächsten Polygons. Auch hier bin ich mir nicht sicher, ob ich das nächste Polygon berechnen soll, obwohl das Modul GRASS v.distance den Trick zu tun scheint.

Andy Harfoot
quelle
Das ist eine gute Begründung für die Problemlösung. Ich habe auch so etwas mit der Antwort von alexgleith bekommen. Aber ich steckte in der Operation fest, "das Ende der Polylinie bis zur Mitte des nächsten Polygons zu verlängern". Die Frage ist jetzt, wie mache ich das? Wenn ich v.clean.snap für die Zentroide der Polygone verwende, werden trotzdem alle Scheitelpunkte verschoben, die keine Endpunkte sind ...
vascobnunes
Ein Ansatz wäre, die Polylinien wie beschrieben in Punkte umzuwandeln und erforderlichenfalls einen zusätzlichen Punkt am Anfang oder Ende einer bestimmten Linie hinzuzufügen, je nachdem, wo sich der vorhandene Start- oder Endpunkt befindet. Die Position des hinzugefügten Punkts ist der Schwerpunkt des Polygons, und dem Punkt wird eine Scheitelpunktsequenznummer von -1 oder 1000000 zugewiesen, um ihn am Anfang oder Ende der Polylinie zu platzieren. Auf diese Weise
könnten
2

Ich denke, dass ich es mit einem benutzerdefinierten Algorithmus tun könnte ... Beachten Sie, wie Sie es implementieren möchten, aber ich denke, es würde funktionieren.

Erstellen Sie für jede Linie und für jeden Endpunkt einen Punkt im Polygon für den Scheitelpunkt am Endpunkt und verknüpfen Sie ihn mit dem Polygon.

Wenn dann für jedes Polygon mehr als ein Linienendpunkt verknüpft ist, verschiebe ich sie alle zur Durchschnittskoordinate oder zum Schwerpunkt des Polygons.

Das ist ziemlich einfach. Bei Standardoperatoren jedoch nicht verfügbar. Ich denke, es könnte in ArcGIS mit einer Codierungszeit von Tagen durchgeführt werden.

Ein weiterer Hinweis: In dem von Ihnen geposteten Bild befindet sich eine der Linien außerhalb des Polygons. Sie können dies einfacher handhaben, indem Sie einfach den nächsten Scheitelpunkt zu jedem Endscheitelpunkt finden und sicherstellen, dass die Nähe zueinander besteht (ich denke, das ist notwendig, damit Sie Eckpunkte nur in einer Richtung fangen), dann können Sie sie an die durchschnittliche Position der Eckpunkte verschieben.

Alex Leith
quelle
1

Interessantes Problem! Ich kann mir keine Möglichkeit vorstellen, das Einrasten automatisch durchzuführen, aber hier ist ein Schritt, um Bereiche zu identifizieren, in denen zumindest eine manuelle Korrektur erforderlich ist:

  • Fügen Sie Ihrer Linienebene eine neue Spalte hinzu und setzen Sie sie für alle Features auf "1".
  • Legen Sie unter "Vektor> Attribute nach Position verbinden" die Zielebene auf die Polygonebene und die Linienebene als Verbindungsebene fest. Wählen Sie dann "Zusammenfassung sich überschneidender Features" und klicken Sie auf "Summe". Geben Sie einen Speicherort für die Ausgabedatei an und klicken Sie auf "OK".
  • Die resultierende Polygondatei ist Ihre ursprüngliche Polygonebene, enthält jedoch einige zusätzliche Felder. Das SUM-Feld ist das, was Sie wollen. Wenn es 2 ist, bedeutet dies, dass Sie darauf zoomen und die Features manuell einrasten können.

Abhängig von der Situation (Anzahl der Funktionen, Anzahl der in dieser Situation befindlichen Funktionen im Vergleich zu den nicht vorhandenen Funktionen usw.) kann dies einige Zeit sparen.

BEARBEITEN: Möglicherweise möchten Sie auch die Polygone mit einer Summe von 2 verwenden, um eine Teilmenge Ihrer Linienebenen zu erstellen. Führen Sie dann die Bereinigung für diejenigen mit einer größeren Toleranz durch, um die anderen Features nicht zu ändern.

Darren Cope
quelle
Ich hatte sowas schon gemacht. Ich habe sogar v.net verwendet, um die Knoten für die Linien abzurufen, und eine räumliche Auswahl der Polygone vorgenommen, die mit den Knoten übereinstimmen. Ich finde viele Fehler, die ich damit korrigieren kann, aber ich habe immer noch drei große Probleme: 1) Es gibt Tausende von Fehlern, die manuell korrigiert werden müssen, was lange dauert. 2) Ich erhalte nicht alle Fehler, weil in einigen Fällen die Linien oder die Knoten die Polygone nicht einmal "berühren". 3) Ich erhalte Fehler, die keine Fehler sind. Wenn zwei Leitungen richtig verbunden sind, werden sie ebenfalls ausgewählt.
vascobnunes
0

Sobald Sie die Endpunkte haben, würde ich ein Spinnen-Diagramm erstellen, in dem Polygon-Zentroide als Einrichtungen und Endpunkte von Linien in der Nähe als Ziele verwendet werden. Sie führen die Spinnendiagrammanalyse durch und als Ergebnis hätten Sie ein Segment für jede Polylinie.

Dies würde sogar für diejenigen funktionieren, die außerhalb der Polygone enden. Wie man das in QGIS macht Ich weiß es nicht, sorry, aber ich würde es in ESRI-Produkten machen, die ich gut kenne. Das habe ich verstanden, als whuber in der ersten Antwort vorschlug, einen "Stern" zu bauen.

Ich bin mir ziemlich sicher, dass es hier Leute gibt, die wissen, wie man solche Analysen in QGIS durchführt

ankilosado
quelle
4
Willkommen bei GIS Stack Exchange! Ich habe festgestellt, dass Ihre Antwort einige Ablehnungen und den Verdacht auf sich gezogen hat, dass Sie eine Alternative zu der vom Fragesteller verwendeten Technologie (GRASS / QGIS) vorgeschlagen haben. Meine Empfehlung wäre, Vorschläge als Kommentare und nicht als Antworten zu veröffentlichen. Wenn der Fragesteller interessiert zu sein scheint, sollten Sie die Informationen in eine Antwort umwandeln.
PolyGeo