Ich habe mehrere 1000 km lange Stromsegmente. Ich muss den Höhenunterschied zwischen zwei aufeinanderfolgenden Punkten mit einer Entfernung von 1 km von stromaufwärts nach stromabwärts ermitteln. Wie kann ich den Höhenunterschied von DEM ermitteln? Ich habe Stream-Segmente im Raster-Format und auch im Vektor-Format. Es wäre besser, wenn ich eine Idee zum Python-Skript hätte.
10
Antworten:
Als Geologe verwende ich diese Technik oft, um einen geologischen Querschnitt in reinem Python zu erstellen. Ich habe in Python eine Komplettlösung vorgestellt : Verwenden von Vektor- und Rasterebenen in einer geologischen Perspektive ohne GIS-Software (auf Französisch)
Ich präsentiere hier eine Zusammenfassung auf Englisch:
Wenn Sie ein DEM mit GDAL / OGR Python-Modul öffnen:
Als Ergebnis haben Sie die Anzahl der Bänder und die Geotransformationsparameter. Wenn Sie den Wert des Rasters unter einem xy-Punkt extrahieren möchten:
Da es sich um ein DEM handelt, erhalten Sie den Höhenwert unter dem Punkt. Mit 3 Rasterbändern mit demselben xy-Punkt erhalten Sie 3 Werte (R, G, B). Sie können also eine Funktion erstellen, mit der Sie die Werte mehrerer Raster unter einem xy-Punkt abrufen können:
Anwendung
Danach verarbeiten Sie das Linienprofil (das möglicherweise Segmente enthält):
Um äquidistante Punkte auf der Linie zu generieren, können Sie das Shapely- Modul mit Interpolation verwenden (einfacher als ogr).
und die Ergebnisse (mit auch den RGB-Werten einer geologischen Karte) mit den x-, y-, z- und Entfernungswerten der Listen in 3D mit matplotlib und Visvis (x-, y-, z-Werte)
Querschnitte (x, Höhe vom Stromabstand (dista list)) mit matplotlib :
quelle