Ich muss in der Lage sein, Entfernungen zwischen Punkten zu messen, aber die Entfernung muss in Bezug auf die Höhe berechnet werden. Die Punkte sind Häuser von Geschichtenerzählern aus dem 19. Jahrhundert und die Orte, die in ihren Geschichten erwähnt werden. Die Entfernung muss daher "zu Fuß" sein. Ein Weg entlang eines Tals ist wahrscheinlich kürzer als ein Weg über einen Berg, obwohl die tatsächliche gerade Strecke kürzer ist. Anbei ein Screenshot, der mein Denken veranschaulicht. In dem Bild würden die Pfade A und C daher kürzer als Pfad B berechnet.
Die Punkte stammen aus einer CSV-Datei, aber ich habe auch eine Rasterebene mit den Höhendaten.
Antworten:
Das Erreichen dieses Ziels ist eine grundlegende Aufgabe in GIS, die Methode in QGIS ist jedoch möglicherweise nicht trivial. Ihre beste Chance ist die Verwendung der GRASS-
r.walk
Funktion, die eine anisotrope Kostenfläche erzeugt (dem + Steigung + andere Faktoren).Zunächst müssen Sie eine Reibfläche als Eingabe für erstellen
r.walk
. In Ihrem Fall kann es sich um ein einwertiges Raster (1.0) handeln, das dem Umfang Ihres DEM entspricht. Sie können es mitr.mapcalculator
der Formel erstellen :A*0+1
wobei A Ihr DEM ist.Als nächstes müssen Sie eine Reihe von Startpunkten aus Ihrer CSV auswählen. Dies sind die Punkte, aus denen die kumulierte Kostenfläche berechnet wird. Sie müssen von jedem Ausgangspunkt aus eine individuelle Kostenfläche erstellen. Es kann sinnvoll sein, die Endpunkte zu definieren, die jedem Startpunkt in diesem Schritt zugeordnet sind (natürlich in einzelnen Ebenen). Danach können Sie
r.walk
mit den erstellten Eingaben ausführen . Die Startpunkte können sich in einer einzelnen Ebene befinden. Sie können sie mit dem grünen Pfeil im Dialogfeld durchlaufen.Im Idealfall haben Sie jetzt die Kostenflächen und die Endpunkte für jede Kostenfläche. Theoretisch konnte man die kostengünstigsten Pfade finden
r.drain
, aber für mich kam es zu einem Fehler (Python konnte die QgisRaster-Bibliothek nicht importieren). Wenn Sie in derselben Ausgabe arbeiten, können Sie den SAGA-Algorithmus "Least Cost Pathways" verwenden. Es werden für jeden Endpunkt mit der Kostenfläche ein Punkt und eine Linienebene erstellt (verwenden Sie die Iterationsschaltfläche erneut). Nachdem Sie alle Linien erstellt haben, können Sie sie mit dem SAGA-Werkzeug "Formenebenen zusammenführen" zu einem einzigen Shapefile zusammenführen.Diese Methode kann mit dem Inkrementieren von Punkten sehr langsam sein. Wenn Sie also viele davon haben, können Sie versuchen, die Methode mit Python zu automatisieren. Die Berechnung (insbesondere der Kostenoberflächen) wird noch viel Zeit in Anspruch nehmen, aber Sie müssen nicht Tonnen von Endpunktebenen manuell erstellen.
quelle
r.walk
. Sie können die Reibungskarte verwenden, um die unpassierbaren Zellen einzurichten. Klassifizieren Sie Ihr DEM mitr.reclass
Regeln wie1 thru 2000 = 1
2000 thru * = 9999
in einer Regeldatei (wenn Ihr Schwellenwert 2000 m beträgt). Auf diese Weise passiert der Algorithmus keine Zellen mit hohen Reibungswerten, es ist weniger kostspielig, ihn zu umgehen.