OpenStreetMap — Výšková data SRTM

Index

Základem pro vytvoření přídavné výškové mapy byl příspěvek na fóru aplikace Lokus, kde autor zmiňuje návod k dosažení cíle a reference, odkud informace shromáždil. Díky němu jsem cíle dosáhl prošlapanou cestou, která ale nebyla úplně bez trnů. Pro stestavování mapy používám automatizovaný skript, který sám zkontroluje aktuálnost mapových podkladů ze kterých čerpám (osm.kyblsoft.cz), mapu sestaví a nahraje ji sem. Pokud nám jde o zobrazení vrstevnic, to se skládá ze dvou částí. Zaprvé přimíchat mezi mapová data ta výšková, zadruhé, vhodným stylem vrstevnice vykreslit na mobilním zařízení. Výšková data poskytuje NASA z projektu SRTM. Tato data zpracuje Phyghtmap, nástroj v Pythonu, který obstará stažení dat z NASA. Není problém jej zprovoznit dle návodu na stránce a na fóru Locusu:

phyghtmap -a 11.887207:48.531157:18.9624023:51.1104199 -o czech_republic --pbf -j 2 -s 20 -c 200,100 --start-node-id=20000000000 --start-way-id=10000000000 --write-timestamp --max-nodes-per-tile=0

Přidal jsem pouze BoundingBox, který používám i pro sestavení mapy a výpočet na dvou jádrech. Dále se doporučuje odstranit chybná data (mezery, skoky apod.), nenašel jsem jak, všichni byli tajní, takže to oželím. Produkt tohoto příkazu nám zůstane už pro všechny naše další vygenerované mapy, jen se vždy smísí s novým souborem mapových dat. Doporučují před sloučením výškových a mapových dat tato seřadit:

osmosis --rb file="czech_republic.pbf" --sort-0.6 --rb czech_republic_srtm.pbf --sort-0.6 --merge --wb czech_republic_merge.pbf

Samozřejmě neuvažují jiné pojmenování souboru s výškovými daty, zde označenou _srtm.pbf. Spojená výšková a mapová data pak stačí prohnat znovu přes osmosis a zapsat soubor s mapou. POZOR však, na to, že se do vektorové mapy zapíše jen to co chceme, resp. to, co jsme počítači nařídili, aby zapsal. K stávajícímu tag-mapping.xml (je v jar souboru pluginu mapsforge pro osmosis, nebo lze libovolný připojit parametrem při spuštění programu) je třeba přihodit ještě pár řádek:

<!-- Elevation TAGS --> <ways> <osm-tag key="contour_ext" value="elevation_minor" zoom-appear="12" force-polygon-line="true" /> <osm-tag key="contour_ext" value="elevation_medium" zoom-appear="12" force-polygon-line="true" /> <osm-tag key="contour_ext" value="elevation_major" zoom-appear="12" force-polygon-line="true" /> <osm-tag key="ele" value="100" zoom-appear="14" /> <osm-tag key="ele" value="200" zoom-appear="14" /> <osm-tag key="ele" value="300" zoom-appear="14" /> <osm-tag key="ele" value="400" zoom-appear="14" /> <osm-tag key="ele" value="500" zoom-appear="14" /> <osm-tag key="ele" value="600" zoom-appear="14" /> <osm-tag key="ele" value="700" zoom-appear="14" /> <osm-tag key="ele" value="800" zoom-appear="14" /> <osm-tag key="ele" value="900" zoom-appear="14" /> <osm-tag key="ele" value="1000" zoom-appear="14" /> <osm-tag key="ele" value="1100" zoom-appear="14" /> <osm-tag key="ele" value="1200" zoom-appear="14" /> <osm-tag key="ele" value="1300" zoom-appear="14" /> <osm-tag key="ele" value="1400" zoom-appear="14" /> <osm-tag key="ele" value="1500" zoom-appear="14" /> <osm-tag key="ele" value="1600" zoom-appear="14" /> <osm-tag key="ele" value="1700" zoom-appear="14" /> <osm-tag key="ele" value="1800" zoom-appear="14" /> <osm-tag key="ele" value="1900" zoom-appear="14" /> <osm-tag key="ele" value="2000" zoom-appear="14" /> <osm-tag key="ele" value="2100" zoom-appear="14" /> <osm-tag key="ele" value="2200" zoom-appear="14" /> <osm-tag key="ele" value="2300" zoom-appear="14" /> <osm-tag key="ele" value="2400" zoom-appear="14" /> <osm-tag key="ele" value="2500" zoom-appear="14" /> <osm-tag key="ele" value="2600" zoom-appear="14" /> <osm-tag key="ele" value="2700" zoom-appear="14" /> <osm-tag key="ele" value="2800" zoom-appear="14" /> <osm-tag key="ele" value="2900" zoom-appear="14" /> <osm-tag key="ele" value="3000" zoom-appear="14" /> <osm-tag key="ele" value="3100" zoom-appear="14" /> <osm-tag key="ele" value="3200" zoom-appear="14" /> <osm-tag key="ele" value="3300" zoom-appear="14" /> <osm-tag key="ele" value="3400" zoom-appear="14" /> <osm-tag key="ele" value="3500" zoom-appear="14" /> <osm-tag key="ele" value="3600" zoom-appear="14" /> <osm-tag key="ele" value="3700" zoom-appear="14" /> <osm-tag key="ele" value="3800" zoom-appear="14" /> <osm-tag key="ele" value="3900" zoom-appear="14" /> <osm-tag key="ele" value="4000" zoom-appear="14" /> <osm-tag key="ele" value="4100" zoom-appear="14" /> <osm-tag key="ele" value="4200" zoom-appear="14" /> <osm-tag key="ele" value="4300" zoom-appear="14" /> <osm-tag key="ele" value="4400" zoom-appear="14" /> <osm-tag key="ele" value="4500" zoom-appear="14" /> <osm-tag key="ele" value="4600" zoom-appear="14" /> <osm-tag key="ele" value="4700" zoom-appear="14" /> <osm-tag key="ele" value="4800" zoom-appear="14" /> <osm-tag key="ele" value="4900" zoom-appear="14" /> <osm-tag key="ele" value="5000" zoom-appear="14" /> <!-- .... etc .... --> </ways>

Spustit osmosis a čekat:

osmosis --rb czech_republic_merge.pbf --b --mw file="czech_republic_contour.map" bbox=48.531157,11.887207,51.1104199,18.9624023 type=hd

A je hotovo na straně sestavené mapy. V zařízení je třeba použít styl, který vrstevnice zobrazí. Locus to k dnešnímu dni (leden 2013) umí svými layouty pro pěší a cyklo turistiku. Pokud máte vlastní styl, aplikujte následující:

<!-- contour lines level 12 --> <rule e="way" k="contour_ext" v="*" zoom-min="12" zoom-max="12"> <rule e="way" k="contour_ext" v="elevation_minor"> <line stroke="#60800000" stroke-width="0.3"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.6"/> </rule> </rule> <!-- contour lines level 13 --> <rule e="way" k="contour_ext" v="*" zoom-min="13" zoom-max="13"> <rule e="way" k="contour_ext" v="elevation_minor"> <line stroke="#60800000" stroke-width="0.2"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.5"/> </rule> </rule> <!-- contour lines level 14--> <rule e="way" k="contour_ext" v="*" zoom-min="14" zoom-max="14"> <rule e="way" k="contour_ext" v="elevation_minor"> <line stroke="#60800000" stroke-width="0.15"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.4"/> <rule e="way" k="*" v="*"> <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" /> </rule> </rule> </rule> <!-- contour lines level 15--> <rule e="way" k="contour_ext" v="*" zoom-min="15" zoom-max="15"> <rule e="way" k="contour_ext" v="elevation_minor" zoom-max="15"> <line stroke="#60800000" stroke-width="0.12"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.3"/> <rule e="way" k="*" v="*"> <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" /> </rule> </rule> </rule> <!-- contour lines level 16 --> <rule e="way" k="contour_ext" v="*" zoom-min="16" zoom-max="16"> <rule e="way" k="contour_ext" v="elevation_minor"> <line stroke="#60800000" stroke-width="0.08"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.2"/> <rule e="way" k="*" v="*"> <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" /> </rule> </rule> </rule> <!-- contour lines level 17 and above --> <rule e="way" k="contour_ext" v="*" zoom-min="17"> <rule e="way" k="contour_ext" v="elevation_minor"> <line stroke="#60800000" stroke-width="0.06"/> </rule> <rule e="way" k="contour_ext" v="elevation_medium|elevation_major"> <line stroke="#60800000" stroke-width="0.15"/> <rule e="way" k="*" v="*"> <pathText k="ele" font-style="bold" font-size="10" fill="#000000" stroke="#ffffff" stroke-width="2.0" /> </rule> </rule> </rule>