Generowanie poziomic z danych SRTM

 

            W poniższym opisie postaram się przedstawić prosta metodę generowania poziomic na podstawie danych SRTM które można pobrać ze trony:

ftp://e0srp01u.ecs.nasa.gov/srtm/

Więcej o SRTM : http://www.jpl.nasa.gov/srtm/

Dane te są zapisane w plikach *.hgt

Zabawę zaczynamy od otwarcia tego pliku w programie Global Mapper (ja testowałem wersje 5.06 - zarejestrowaną).

Następnie włączamy - Menu: File -> Generate Contours... , w pierwszej zakładce ustawiamy co ile metrów ma być generowana poziomica. Wybrana wartość zależy od typu terenu (płaski [np. 10m] lub górzysty [np. 25m]) lub od przeznaczenia wygenerowanych poziomic - do której warstwy w mapie trafią poziomice (patrz dalsze opcje):

W kolejnej zakładce ustawiamy dokładność generowania tych poziomic, dla Levels0 zalecane dokładne - np. jak na poniższym przykładzie:

Po kliknięciu OK po chwili tworzą się poziomice (kontury). Teraz najważniejszy etap - eksport do "strawnego" dla nas formatu. Wybrany format jest podyktowany użytą przeze mnie metodą w programie UMP_Edit v0.3b - musi dokładnie odpowiadać moim zaleceniom. Tym formatem jest Simple ASCII Text File *.xyz. Wybieramy:

Następnie dokładnie według poniższego rys. ustawiamy parametry exportu:

Wynikiem jest plik w formacie txt o np. takiej zawartości:

DESCRIPTION=Contour Line, Minor
NAME=240 m            
<- wysokość w metrach
LINE_WIDTH=1          
<- typ lini: 1 co 10 m
LINE_COLOR=RGB(128,64,0)
LINE_STYLE=Solid
18.54579567 50.40840931
18.54495059 50.40840931
18.54579567 50.40840931

DESCRIPTION=Contour Line, Intermediate
NAME=250 m
LINE_WIDTH=2          
<- typ lini: 2 co 50 m
LINE_COLOR=RGB(128,64,0)
LINE_STYLE=Solid
18.62156741 50.66736019
18.62156741 50.66736019

DESCRIPTION=Contour Line, Major
NAME=200 m
LINE_WIDTH=3          
<- typ lini: 3 co 100 m
LINE_COLOR=RGB(128,64,0)
LINE_STYLE=Solid
18.17151766 50.90299716
18.17144486 50.90333426
18.17110776 50.90338977

Widzimy od razu użyteczne dla nas dane: Wysokość w metrach, typ lini i kolejne wsp. Format pliku musi dokładnie odpowiadać temu powyżej gdyż na sztywno przyjąłem jego obsługę w UMP_Edit. Ten program właściwie tylko przekształca układ tego tekstu na zgodny z txt formatem mapy. Przejdźmy więc do właściwej części generowania poziomic - uruchamiamy program UMP_Edit. Interesuje nas zakładka: Poziomice - generowanie z danych SRTM :

Wygenerować poziomice możemy na dwa sposoby: pierwszy szybszy - generujemy od razu jeden plik z kompletem danych, drugi wolniejszy - generujemy każdą warstwę osobno - jednocześnie mamy większy wpływ na układ elementów w poszczególnych warstwach.

Zacznijmy od pierwszego sposobu. Plik *.xyz możemy otworzyć już teraz lub po ustawieniu wszystkich parametrów klikając na przycisk Otwórz plik *.xyz.  Włączamy: Generuj wszystko naraz ...

Ustawiamy tu jaki typ linii (właśnie ten typ z pliku xyz (1,2,3)) trafi do ilu warstw (Levels). Jeśli używamy filtrowania za pomocą sekcji [DICTIONARY] to możemy wszędzie dać Levels=3.

 

 

W sekcji:

ustalamy jaki typ obiektu będzie reprezentował dany typ linii z pliku xyz (1,2,3).

Na koniec tu ustalamy nazwę pliku (a także ID i Name jakie zostaną wpisane do nagłówka mapy). Nazwę ustalamy na podstawie numeru arkusza jaki przetwarzamy : N i E. Oczywiście wszystkie trzy parametry można ustawić niezależnie - ale w programie przyjęto że "bawimy" się jednak z całymi arkuszami z SRTM. Nazwa pliku zostanie automatyczne nadana jeśli w ścieżce dostępu znajdzie się: ...NxxEyyy...

 

Gdy już wszystko mamy ustawione klikamy na: i czekamy aż program zakomunikuje że zadanie wykonał:

Drugi sposób jak napisano wcześniej pozwala generować każdą warstwę osobno - jednocześnie mamy większy wpływ na układ elementów w poszczególnych warstwach. Postępujemy podobnie jak wyżej z małymi zmianami, wyłączamy:

A wszystkich ustawień dokonujemy tu:

Jak napisano wcześniej generowanie poziomic robimy osobno dla każdej warstwy wykorzystując osobne pliki xyz. Np. dla Level0 plik xyz może zawierać linie co 10m a dla Level1 plik xyz może zawierać linie co 30m - wszystko to ustalamy na etapie generowania konturów w Global Mapper. Zacznijmy np. od Level0, generujemy tu obiekty dla Data0 - ustalamy jaki typ obiektu będzie reprezentował dany typ linii z pliku  xyz (1,2,3), mamy tu pełną dowolność - można np. ustalić że w Level0 będą się znajdować tylko obiekty typu 0x20. Plik jest zapisywany do ump_out_level_0.txt, ump_out_level_1.txt .... zależnie która warstwę generujemy. Możemy też tu ustalić dane do nagłówka pliku. Na końcu w jakimś edytorze txt łączymy powstałe pliki.

        Osobnym zagadnieniem jest częstotliwość występowania poszczególnych typów linii w wygenerowanym pliku. Domyślnie jest ona ustawiana na taką jaką zawiera plik *.xyz - to Global Mapper podczas generowania konturów ustawił że linia typu 2 występuje co 5 odległości linii typu 1 a linia typu 3 co dwie odległości linii typu 2. I dla przykładu jeśli poziomice w pliku *.xyz mamy co 10m to linie typu 2 zostaną rozmieszczone co 50m a typu 3 co 100m. I to się może bezpośrednio przełożyć na plik txt - jednak jeśli chcemy samodzielnie ustalić co ile metrów maja wystąpić poziomice wyższych typów (Type=0x21, Type=0x22) [np. może nam nie odpowiadać że przy 25m linii typu 1 linie typu 2 pojawią się co 125m - lepiej wygląda na mapie odległość co 100m] to w zakładce Dokładne poziomice/warstwice ustawiamy:

 

 

Dostaniemy wtedy możliwość edycji:

Częstotliwość występowania linii pierwszego typu ustalamy dokładnie na taką jaka
jest zapisana w pliku *.xyz
- więc częstotliwość występowania poziomic ogólnie dalej ustalamy na etapie generowania konturów w Global Mapper. Kolejne wartości to wielokrotność linii pierwszego typu.

 

Kilka uwag: wysokość w metrach może zostać zamieniana na wysokość w stopach oraz zaokrąglana do liczby całkowitej - tak aby poprawnie była wyświetlana przez GPS. [Wysokość w stopach = int (Wysokość w metrach * 3.2808399 + 0.5)]. Jednak domyślnie wysokość zapisywania jest bezpośrednio w metrach po dodaniu w sekcji [IMG ID] klucza: Elevation=M .

Zalecane jest włączenie dla oryginalnych danych SRTM przesunięcia poziomic o:
N: 0,00042
E: -0,00041

 

 

Program jak widać nie jest jeszcze zoptymalizowany - powstawał w miarę narastającego zapotrzebowania na kolejne funkcje, ale myślę że się przyda nie tylko mi ;)

Wróć