
1. Instalace tile serveru (apache + mapnik)
Podle návodů na OSM jsem celkem bez problémů stáhnul data celé ČR a v Dockeru spustil instanci pro generování vlastních tiles.
Zpracování celé ČR trvalo asi 1h, vstupní soubor má 750MB a výsledná databáze zabere 22GB, to se mi zdálo pro mé účely zbytečné moc, čili jsem zredukoval vstupní soubor, na malou oblast kolem Čelákovic:
sudo apt install osmium-tool
osmium extract -b 14.641,50.109,14.835,50.195 czech-republic-latest.osm.pbf -o celakovice-a-okoli.osm.pbf
Výsledný soubor má 3MB a import do databáze trvá 20s :-)
2. Test zobrazování v prohlížeči
Po spuštění dockeru je možné se dívat na generovanou mapu , mapa vypadá +- stejně jako na OSM jen oblast je drasticky zmenšena. Aplikace po načtení ukáže prázdnou mapu světa a až když se správně zazoomuje, tak jsou vidět detaily v okolí. proto jsem upravil index.html aby a) zamířil rovnou v detailu na město b) aby šlo zoomovat až na úroveň 22.
3. Zobrazení našich dat
Podle předpokladů data schovaná pod zemí se standardně na mapu nevykreslují!
V docker instanci jsem našel, kde je umístěný soubor mapnik.xml, což je hlavní a jediný konfigurační soubor, který je potřeba změnit. Je to poměrně masivní a chaotické XML. Pro jednoduší práci existuje CartoCSS, což je jazyk/nástroj pro nastavení vzhledu mapy. Soubory s CartoCSS se pak zkonvertují pomocí nástroje Carto do XML. Ještě jsem zkoušel magnaCarto (alternativa v Go), ale to mi padalo takže vyhrál JavaScript a Carto.
- Sosnul jsem si celý projekt openstreetmap-carto z běžícího dockeru a trochu se v tom šťoural. Je zajímavé, že od oficiální verze na github se to liší.
docker cp <instance>: /home/renderer/src/openstreetmap-carto .
- Nakonec jsem v
project.mml
našel část, která se týká námořní dopravy ‘ferry-routes’ a jelikož se u nás námořní doprava nepěstuje, tak jsem rozšířil SQL dotaz tak, aby vracel i naše chráničky. - Současně jsem trochu upravil data v databázi a ručně nastavil příznak pro rychlejší hledání:
update planet_osm_line set man_made = 'dataline' where tags -> 'operator' = 'czela.net'
- Potom už stačilo je vygenerovat nový mapnik.xml
npm init
npm install carto
.node_modules/.bin/carto project.mml > my-mapnik.xml
- Po vrácení XML souboru (resp namounvovani do dockeru) se objevili i naše chráničky (zatím jsou úzké a modré). Ale cíl cvičení je splněn! Další hraní se styly už je brnkačka.
- Pokud změním styl, stačí restartovat docker image a začnou se generovat tiles podle nových pravidel.
4. Naše tiles a externí aplikace
- Našel jsem docela hezkou mobilní free aplikaci OsmApp, která mimo jiné má možnost nastavit si dlaždice. Zkusil jsem tam dát naší url a nic.
-
- chyba: Server musí vracet v hlavičce
Access-Control-Allow-Origin: *
, k tomu se musí do kontaineru nastavit-e ALLOW_CORS=1
- chyba: Server musí vracet v hlavičce
-
- chyba: Aplikace používá https a naše aplikace to musí podporovat taky, jinak to browser zamítne co by mixed content …
-
- Objevil jsem projekt fieldpapers, ktery má možnost definovat vlastní tiles a vytvoří PDF s mapou připravenou pro tisk. Takže pokud bych si chtěl mapu vytisknout, ručně dokreslit, naskenovat a zanést zpět do OSM tak to nenížádný problém.
URL Template
https://maptiles.chmelej-dev-docker.czela.net/tile/{z}/{x}/{y}.png
TODO
- lepší styly pro chráničky a případně nastavit další zajímavé objekty co chceme vidět.
- automatický upgrade databáze pro generování dat
- potřeba ručního zásahu do SQL po importu dat není úplně ideální řešení
- možnost rychle malovat/měřit čáry a následně je ukládat v KML pro další zpracování
- varianta mapy pro černobílý tisk