GMT – piękne mapy w kilku krokach

GMT (Generic Mapping Toolbox) to zestaw narzędzi do pracy z danymi geograficznymi (i nie tylko) opracowany na uniwersytecie na Hawajach (o mało co nie przyjęli mnie tam do pracy nad tym projektem… ehhh…), o którym mało kto pewnie słyszał. Podstawowym zastosowaniem GMT jest tworzenie różnego rodzaju map. Na stronie domowej projektu opisana jest instalacja (Windows, Mac OS X, Linux) oraz udostępniona jest obszerna dokumentacja, więc nie będę tych rzeczy tutaj powtarzał. Chciałem Was zachęcić kilkoma prostymi przykładami do zapoznania się z tym pakietem. Uwaga: to nie jest pełny tutorial, to tylko zachęta!

Przykład 1: Mapa bazowa Europy. GMT jest oczywiście pakietem bez interfejsu graficznego, więc wszystko odbywa się z wiersza poleceń:

gmt psbasemap -R-15/35/30/72 -Jl9/11/45/70/1:40000000 -B5g2:."Europa": -K -P -Y10 > Europa.ps
gmt pscoast -R -Di -Ia/0.03p,black -J -N1/0.5p,- -G#dde6d5 -S#a5bfdd -A0/0/4 -W0.5p,black -O -P >> Europa.ps
convert -geometry 2048x2048 -density 300 -trim Europa.ps Europa.png


Pierwszą komendą tworzymy mapę bazową o podanym wymiarze (-R), w projekcji azymutalnej równopowierzchniowej Lamberta (-Jl). GMT wynik (w postaci języka post script) wypisuje na standardowe wyjście. Drugą komendą rysujemy na mapie linię brzegową i granice państw. Opcja -D odpowiada za dokładność granic, -I za rysowanie rzek, -G i -S za kolory morza i lądów itd. (wszystko dokładnie opisane w dokumentacji). Trzecią komendą konwertujemy ps na png. Oto wynik:

europa

Przykład 2: Mapa bazowa Europy z naniesionymi punktami. Sama mapa bazowa jest ładna, ale mało użyteczna. Często chcemy na mapie pokazać jakieś lokalizacje. Na przykład lotniska. Ze strony http://openflights.org/data.html#airport pobrałem plik z listą lotnisk na świecie i przygotowałem mapę:

awk -F, '{print $8 "\t" $7}' airports.dat > airports.txt
gmt psbasemap -R-15/35/30/72 -Jl9/11/45/70/1:40000000 -B5g2:."Airports in Europe": -K -P -Y10 > Europa_air.ps
gmt pscoast -R -Di -J -N1/0.5p,- -G#dde6d5 -S#a5bfdd -A0/0/1 -W0.5p,black -O -P -K >> Europa_air.ps
gmt psxy airports.txt -Jl -O -R -Sc0.1c -W -G255/0/0 -K >> Europa_air.ps
convert -geometry 2048x2048 -density 300 -trim Europa_air.ps Europa_air.png


W pierwszej linii konwertują plik z danymi lotnisk na listę współrzędnych geograficznych. Drugą i trzecią linię już znamy. W czwartej linii rysuję na mapie czerwone kółeczka w każdej z zapisanych lokalizacji. Oto wynik:

europa_air

Przykład 3: Mapa topograficzna Polski. Jako przykład prezentacji rozkładu przestrzennego zmiennej wybrałem wysokość terenu nad poziomem morza. Miałem przygotowany wcześniej plik tekstowy zawierający informacje o wysokości n.p.m.:

screenshot_42

Teraz wystarczy tylko przeliczyć te dane na siatkę geograficzną i nanieść na mapę:

gmt surface DEM.xyz -R13.8/24.5/48.7/55 -I0.02/0.01 -GDEM.grd -T0.5 -C0.01
gmt psbasemap -R13.8/24.5/48.7/55 -Jl19.20/19.30/52/60/1:5000000 -B2g2:."Polska - Mapa Topo": -K -P -Y10 > PL.ps
gmt makecpt -CDEM_PL_wiki.cpt -T-10/2500/1 > tmp.cpt
gmt psscale -D3.1i/-.5i/7.0i/0.5ih -Ctmp.cpt -B250::/:m: -O -K -P >> PL.ps
gmt grdimage -Bg DEM.grd -R -J -O -Q -K -nn+a -Ctmp.cpt >> PL.ps
gmt pscoast -R  -Ia -Df -J -N1/0.5p,- -S#a5bfdd -A0/0/4 -W0.25p,black -K -O -P -L23.7/49.1/54/100+u -T14.2/54.5/1.5:: >> PL.ps
convert -geometry 2048x2048 -density 300 -trim PL.ps PL.png

W pierwszej linii przeliczamy dane w punktach na powierzchnię w siatce geograficznej i zapisujemy do pliku grd. W drugiej linii tworzymy mapę bazową dla Polski. Trzecia linia to przygotowanie skali kolorów na podstawie wzorca (DEM_PL_wiki.cpt, dużo wzorców tutaj). Czwarta linia to dodanie do mapy skali kolorów. Piąta linia to naniesienie na mapę naszej powierzchni w kolorach zgodnych ze skalą. Szósta linia to nałożenie na wszystko granic i zamalowanie wody na niebiesko. Oto efekt:

pl

GMT ma duże możliwości, niestety kosztem łatwości obsługi. Ważną zaletą jest tworzenie map w postaci wektorowej. GMT polecałbym szczególnie w dwóch przypadkach: po pierwsze gdy potrzebujemy bardzo wysokiej jakości np. do publikacji i po drugie w przypadku, gdy chcemy proces automatyzować np. generując indywidualne mapy dla użytkowników itp.

Gdybyście mieli jakieś pytania, piszcie – używam GMT od 5 lat więc może będę mógł pomóc.

|

Odpowiedz