Ich möchte der Höhe aus SRTM3-Datendateien eine bestimmte Long / Lat-Position auf einer Karte zuweisen, habe jedoch keine Ahnung, wie der bestimmte Wert ermittelt werden soll. Ich möchte ein Beispiel dafür, wie ich in N50E14.hgt eine Höhe von 50 ° 24'58.888 "N, 14 ° 55'11.377" E finden kann.
20
.hgt
Dateiformat in der SRTM-Dokumentation , eine spezifische schrittweise Antwort hängt jedoch von der verfügbaren Software ab.Antworten:
Datei Format
Ich nehme es als kleine Übung, wie man einen Datenleser programmiert. Schauen Sie sich die Dokumentation an :
Wie geht es weiter?
Für Ihre Position, 50 ° 24'58.888 "N 14 ° 55'11.377" E, haben Sie bereits die richtige Kachel gefunden, N50E14.hgt. Lassen Sie uns herausfinden, an welchem Pixel Sie interessiert sind. Erster Breitengrad, 50 ° 24'58.888 "N:
Bogensekunden. Geteilt durch drei und auf die nächste ganze Zahl gerundet ergibt sich eine Gitterreihe von 500. Dieselbe Berechnung für den Längengrad ergibt die Gitterspalte 1104.
In der Schnellstart-Dokumentation fehlen Informationen darüber, wie Zeilen und Spalten in der Datei organisiert sind. In der vollständigen Dokumentation heißt es jedoch, dass
Die erste Zeile in der Datei ist sehr wahrscheinlich die nördlichste, dh wenn wir an Zeile 500 vom unteren Rand interessiert sind , müssen wir uns die Zeile tatsächlich ansehen
von anfang an ob die datei . Unsere Gitterzelle ist die Nummer
vom Dateianfang an (dh 700 Zeilen überspringen und im 701. Beispiel 1104 nehmen). Zwei Bytes pro Sample bedeuten, dass wir die ersten 1683606 Bytes in der Datei überspringen und dann zwei Bytes lesen müssen, um unsere Gitterzelle zu erhalten. Die Daten sind Big-Endian, was bedeutet, dass Sie die zwei Bytes auf z. B. Intel-Plattformen austauschen müssen.
Beispielprogramm
Ein einfaches Python-Programm zum Abrufen der richtigen Daten sieht folgendermaßen aus ( Informationen zur Verwendung des struct-Moduls finden Sie in den Dokumenten ):
Beachten Sie, dass ein effizienter Datenabruf etwas ausgefeilter aussehen müsste (z. B. das Öffnen der Datei nicht für jede einzelne Probe).
Alternativen
Sie können auch ein Programm verwenden, mit dem die .hgt-Dateien sofort gelesen werden können. Aber das ist langweilig.
quelle
GDAL kann diese Rasterformate mit dem SRTMHGT-Treiber lesen / schreiben . Dies bedeutet, dass Sie das Raster mit QGIS, ArcGIS anzeigen oder GDAL-Dienstprogramme wie gdallocationinfo verwenden können , um Werte von einem Punkt abzurufen , z.
DMS in DD konvertieren:
Verwenden Sie dann aus einer Shell
gdallocationinfo file.hgt -wgs84 long lat
:Die Höhe beträgt 216 m.
quelle
Wenn Sie QGIS verwenden, überprüfen Sie, ob das Python-Plugin "Point Sampling Tool" installiert ist. Sie finden es unter -> Verbesserungen (Python) -> Analysieren.
Wählen Sie Ihren Punktlayer für die gewünschten Positionen aus, starten Sie die PST, wählen Sie das HGT (oder eine beliebige Raster- / Polygondatei) und wählen Sie eine neue Punktform für die Ausgabe aus.
Das ist alles :-)
quelle
Chris 'Antwort zeigt an, dass es einfach ist, Punkte aus einer Ebene in QGIS abzutasten.
Da Ihre Antwort auf meinen Kommentar jedoch verdeutlicht, dass Sie Ihr eigenes Programm zum Lesen von Höhenwerten aus den
.hgt
Dateien schreiben, lesen Sie die Quickstart-PDF-Datei in den SRTM-Dokumenten. Es wird erklärt, wie die Höhendaten gespeichert werden. Zusammenfassen:-32768
, die keine Datenpixel angeben.Sie sagen, Sie können zwischen Lon / Lat-Koordinaten und Pixeln konvertieren. Um die Höhe zu ermitteln, müssen Sie den ganzzahligen Wert aus dem entsprechenden Versatz in der Datei lesen. Bei gegebenen Pixelkoordinaten
x
undy
relativ zur oberen linken Ecke der Szene ist das im Grunde genommenoffset = (y * 1201) + x
. Pixel0,0
ist die erste Ganzzahl in der Datei und Pixel1200,1200
ist die letzte Ganzzahl in der Datei.quelle