Ermitteln des Abstands zwischen Punkten entlang eines Flusses (lineare Referenzierung)

10

Ich bin neu in Gis und bin geschlagen. Ich habe ein Netz von Flüssen, das aus kleinen Linien (Polylinien) besteht. In einem anderen Shapefile habe ich Standorte von mehreren Stationen an einem Fluss. Ich muss Abstand entlang des Flusses von jeder Station bis zum Ende des Flusses finden.

Das Problem ist, dass ich keinen vollständigen Flusslauf habe. Und es gibt kein gemeinsames Attribut, mit dem ich die Linestrings vereinen oder zusammenführen kann. Einige Stationen befinden sich auch an Nebenflüssen.

Geben Sie hier die Bildbeschreibung ein

Unter dem Strich muss ich also ein großes Netz von Flüssen einschließlich Nebenflüssen aufbauen und die Referenzierung von Linien durchführen. Aber ich weiß nicht, wie ich das machen soll. Jede Hilfe wird sehr geschätzt. Bitte erklären Sie dies so deutlich wie möglich.

Bitte kommentieren Sie, wenn Sie weitere Informationen benötigen.

Naresh
quelle
3
Welche Softwareplattform verwenden Sie?
TheSteve0
Ich habe Arcmap Arcinfo ausprobiert. Aber es waren überwältigende Informationen über lineare Referenzierung. Dann bin ich zu pgRouting und QGIS übergegangen. Immer noch kämpfend.
Naresh
Haben Sie Zugriff auf die Erweiterung ArcGIS Network Analyst? Ich denke, es wäre möglich, einen Netzwerkdatensatz mit Ihren Flüssen zu erstellen, und dann sollte es relativ einfach sein, kürzeste Entfernungen zu finden.
Radek

Antworten:

2

Ich würde BWill zustimmen. Ihr Hauptproblem besteht darin, den Ursprung jeder Polylinie zu definieren. Was macht einen Fluss aus? Ι würde davon ausgehen, dass ein Nebenfluss eine eigenständige "Route" ist, die von 0-> Länge des Nebenflusses ausgeht. Dann würde ich dasselbe für die Hauptflüsse tun, aber in diesem Fall würde ich aus allen Polylinienbestandteilen eine zusammengeführte Polylinie erstellen. Ich denke, sobald Sie haben, dass Sie "fast" da sind. Dann: Konvertieren Sie alle zusammengeführten Polylinien in gemessene Polylinien (PolylineM), einschließlich der Nebenflüsse. Sie haben dann Ihr 'Streckennetz'. Von da an müssen Sie für jede Station die Entfernung entlang Ihrer Route ermitteln. Ich denke, die Stationsstandorte sind in XYs definiert. Auch - eine andere Vermutung - sie fallen nicht genau auf den Fluss, tun sie? In jedem Fall benötigen Sie eine Möglichkeit, die Entfernung der Station vom Beginn jedes Flusses oder Nebenflusses zu ermitteln. Wenn sich eine Station an der Kreuzung von Fluss und Nebenfluss befindet, kann sie theoretisch zwei Standorte haben (jeweils einen).

Um diesen Speicherort zu finden, können Sie ArcMap-Tools verwenden, die Sie jedoch eine Weile nicht verwendet haben. Sie können sich also nicht an die Oberseite meines Kopfes erinnern. Wenn Sie dagegen Ihre Shapefiles (?) In PostGIS importieren, können Sie den ST_Line_Locate_Point verwenden . Diese Funktion:

Gibt einen Gleitkommawert zwischen 0 und 1 zurück, der die Position des nächstgelegenen Punkts auf LineString zum angegebenen Punkt als Bruchteil der gesamten 2D-Linienlänge darstellt.

Das heißt, Sie können dann den Ort entlang des Flusses finden, indem Sie das, was Sie finden, mit der (zusammengeführten) Flusslänge multiplizieren. Ein letzter Hinweis: Wenn Sie PostGIS verwenden, müssen Sie den Schritt zum Erstellen von PolylineM nicht ausführen. Nur ArcGIS benötigt dies für die lineare Referenzierung.

Hoffe das macht Sinn!

mapoholic
quelle
Meine Stationen liegen genau an den Nebenflüssen oder am Fluss. Dumm ist, dass es keinen großen Fluss gibt, nur kleine Liniensegmente. Ich kann den großen Fluss sehen, aber die Daten selbst haben kein gemeinsames Attribut, um einen vollen Fluss zu bilden. Außerdem habe ich Koordinaten in Grad. Wenn ich also Routen in Arcmap erstelle, bekomme ich Länge in Grad? Ich denke das macht keinen Sinn. Ich muss die Koordinaten von wgs84 in eine andere Projektion konvertieren. Und ja, ich habe Shapefiles in PostGIS importiert.
Naresh
1

Aus meiner Frage der gleichen Art,

So erstellen Sie einen Punkt entlang einer Linie in einem bestimmten Abstand

Die folgenden nützlichen Links wurden angezeigt.
grass.osgeo.org/gdp/html_grass63/lrs.html
wiki.faunalia.it/dokuwiki/doku.php/qgis/lrs

Ich erledige meine Aufgabe nicht durch mangelnde Anstrengung. Ich glaube, die Langeweile, die Sie erleben werden, ist die Nominierung des Ursprungs jeder Polylinie.

BWill
quelle
2
Ich habe einige Fortschritte gemacht. Ich kann mit pGrouting den kürzesten Weg finden, aber ich muss "Knoten" aktualisieren. Im Moment erstelle ich eine Knotentabelle in postgresql und verwende diese, um ein Netzwerk zu erstellen, das ich an pgrouting weitergebe. Aber ich muss benutzerdefinierte Knoten in die Tabelle einfügen, die sich nicht an den Endknoten befinden. Eine dumme Möglichkeit besteht darin, meine Polylinien an den Stationen zu teilen, damit sie automatisch zu Knoten werden. Immer noch am arbeiten. Update bald.
Naresh