Chcę przypisać określoną pozycję długą / krótką na mapie do rzędnej z plików danych SRTM3, ale nie mam pojęcia, jak znaleźć konkretną wartość. Więc chcę jakiś przykład, jak mogę znaleźć w podniesieniu N50E14.hgt do 50 ° 24'58.888 "N, 14 ° 55'11.377" E.
20
.hgt
formatu pliku , ale szczegółowa odpowiedź zależy od dostępnego oprogramowania.Odpowiedzi:
Format danych
Zajmę się tym jako małe ćwiczenie w programowaniu czytnika danych. Zajrzyj do dokumentacji :
Jak postępować
Dla swojej pozycji, 50 ° 24'58.888 "N 14 ° 55'11.377" E, już znalazłeś prawidłową płytkę, N50E14.hgt. Sprawdźmy, który piksel Cię interesuje. Pierwsza szerokość geograficzna, 50 ° 24'58.888 "N:
sekundy łukowe. Podzielony przez trzy i zaokrąglony do najbliższej liczby całkowitej daje wiersz siatki 500. To samo obliczenie długości geograficznej daje kolumnę 1104 siatki.
W dokumentacji szybkiego startu brakuje informacji o tym, jak wiersze i kolumny są zorganizowane w pliku, ale w pełnej dokumentacji jest to zaznaczone
Pierwszy wiersz w pliku jest najprawdopodobniej tym najbardziej wysuniętym na północ, tzn. Jeśli interesuje nas wiersz 500 od dolnej krawędzi , musimy spojrzeć na wiersz
od początku, jeśli plik . Nasza komórka siatki to liczba
od początku pliku (tj. pomiń 700 wierszy, a w 701-szym weź próbkę 1104). Dwa bajty na próbkę oznaczają, że musimy pominąć pierwsze 1683606 bajtów w pliku, a następnie odczytać dwa bajty, aby uzyskać komórkę siatki. Dane są typu big-endian, co oznacza, że musisz zamienić dwa bajty np. Na platformach Intela.
Przykładowy program
Uproszczony program Pythona do pobierania odpowiednich danych wyglądałby tak (patrz dokumentacja dotycząca korzystania z modułu struct):
Zauważ, że wydajne pobieranie danych musiałoby wyglądać na bardziej wyrafinowane (np. Nie otwieranie pliku dla każdej próbki).
Alternatywy
Możesz także użyć programu, który może odczytywać pliki .hgt po wyjęciu z pudełka. Ale to jest nudne.
źródło
GDAL może odczytywać / zapisywać te formaty rastrowe za pomocą sterownika SRTMHGT . Oznacza to, że możesz wyświetlić raster za pomocą QGIS, ArcGIS lub użyć narzędzi GDAL, takich jak gdallocationinfo, aby uzyskać wartości z punktu, np .:
Konwertuj DMS na DD:
Następnie z powłoki użyj
gdallocationinfo file.hgt -wgs84 long lat
:Wysokość wynosi 216 m.
źródło
Jeśli korzystasz z QGIS, sprawdź, czy wtyczka Pythona „Point Sampling Tool” jest zainstalowana. Znajdziesz go w -> Ulepszenia (Python) -> Analizuj.
Wybierz warstwę punktową wymaganych pozycji, a następnie rozpocznij PST, wybierz hgt (lub dowolny plik rastrowy / wielokątny) i wybierz nowy kształt punktowy do wydruku.
To wszystko :-)
źródło
Odpowiedź Chrisa wskazuje, że próbkowanie punktów z warstwy w QGIS jest proste.
Ponieważ jednak odpowiedź na mój komentarz wyjaśnia, że piszesz własny program do odczytu wartości wysokości z
.hgt
plików, zapoznaj się z dokumentem Quickstart PDF w dokumentach SRTM. Wyjaśnia, w jaki sposób przechowywane są dane wysokości. Podsumowując:-32768
, które wskazują piksele bez danych.Mówisz, że możesz konwertować między współrzędnymi lon / lat i pikselami, więc uzyskanie wysokości jest kwestią odczytu wartości całkowitej z odpowiedniego przesunięcia w pliku. Biorąc pod uwagę współrzędne pikseli
x
iy
względem lewego górnego rogu sceny, to w zasadzieoffset = (y * 1201) + x
. Piksel0,0
to pierwsza liczba całkowita w pliku, a piksel1200,1200
to ostatnia liczba całkowita w pliku.źródło