Zdarma offline mapy pro Android

Získání dat z OpenStreetMap

Projekt OpenStreetMap nejsou pouze mapy v různých formátech, ale i volně dostupný zdroj dat pro další použití. Ta jsou k dispozici pod licencí Open Data Commons Open Database, která vám dává možnost (při dodržení jednoduchých pravidel) je dále použít například ve vaší aplikaci či službě. A to i tehdy, když je komerční.

Co třeba získat informace o čerpacích stanicích v České republice? Nebo snad o zastávkách MHD ve vašem městě? Či jiný bod zájmu (POI)?

Jak na to

Základem je stažení zdrojových dat OpenStreetMap pro Českou republiku z webu Geofabrik.de. Stahovat budeme formát OSM XML (soubor czech-republic-latest.osm.bz2), který rozbalíme.

V druhém kroku potřebujeme z velkého souboru dostat pouze ty informace, které nás zajímají. K tomu využijeme program Osmfilter. Pokud nás tedy zajímají výše uvedené benzinové stanice, bude spuštění programu s parametry vypadat přibižně následovně:

osmfilter czech-republic-latest.osm --keep="amenity=fuel" > czech-republic-benzinky.osm

Výsledkem bude soubor czech-republic-benzinky.osm, který bude výrazně menší než ten zdrojový, a bude obsahovat pouze ty informace, které potřebujeme. Jako první parametr programu příchází zdrojový soubor z daty projektu OpenStreetMap, následuje parametr --keep, kterým sdělujete, co zachovat, a výsledek je přesměrován do cílového souboru.

Možnosti parametru --keep jsou celkem velké a rozhodně nekončí na pouhém určení jednoho typu objektu bez dalších podmínek. Jaké všechny typy dat lze z OpenStreetMap dostat, popisuje stránka ve wiki. Pro začátek je dobré vědět, že jednotlivé elementy mají atributy typu "klíč=hodnota", čehož jste si mohli všimnout výše.

Nyní, když již máte pouze ta data, která potřebujete, je dobré je převést do nějakého formátu, s kterým lze snadno dále pracovat. Našim výstupním formátem bude CSV a budeme do něj exportovat přes program Osmconvert.

osmconvert czech-republic-benzinky.osm --all-to-nodes 
  --max-objects=80000000 --csv="name @lat @lon" 
	--csv-headline --csv-separator=, -o=benzinky.csv

Zde je parametrů o něco více. První zajímavý je --all-to-nodes, kterým se říká, že všechny n-úhelníky, relace apod. se mají převést na jeden bod. To se hodí, když je informace o benzince nastavena na budově. Souřadnice na výsledný bod pak bude ukazovat doprostřed budovy. Parametr --max-objects udává maximální množství objektů, s kterými se bude pracovat. Parametr netřeba zadávat.

O něco zajímavější je parametr --csv, který udává, jaké hodnoty se mají ve výstupním CSV souboru objevit. Hodnoty @lat a @lon udávají souřadnice bodů. Následují dva parametry udávající podobu CSV souboru (hlavičku a oddělovač) a nakonec je zde uvedení názvu výstupního souboru.

Snadné, že?

Možné nevýhody

Výhodou OpenStreetMap je volná dostupnost dat. Je však dobré zmínit, že ne vždy se v projektu OpenStreetMap nachází odpovídající data v odpovídající kvalitě. Pokud například budete chtít seznam benzinových stanic jak je uvedeno výše, budou vám poskytnuty pouze ty informace, které někdo do dat zanesl. Neznamená to tedy automaticky, že v nich budou všechny benzinky v ČR.


Poslední aktualizace: 2. prosince 2013, Pavel Cvrček