]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/blob - cviceni/osm.mdwn
Update twitter
[edu/osp-wiki.git] / cviceni / osm.mdwn
1 [[!meta title="OpenStreetMap – Otevřená Geo Data"]]
2
3 [[!toc]]
4
5 O projektu
6 ==========
7
8 Projekt [OpenStreetMap.org][osmo] byl inspirován úspěchem projektu [Wikipedie][wp],
9 kdy množství jednotlivců bylo často i po malých příspěvcích a bez
10 direktivního řízení a plánu schopné vytvořit ucelené dílo srovnatelné
11 s největšími placenými encyklopediemi světa. Projekt OpenStreetMap
12 umožňuje každému zájemci přispět k tvorbě mapy světa. Přitom data
13 jsou publikovaná pod licencí [ODbL][], která umožňuje data využívat
14 i pro komerční účely a kombinovat mapový podklad i s vrstvami,
15 které není povolené kopírovat. V podmínkách použití je pouze
16 vyžadované, aby byl každý uživatel mapy (papírové nebo mapového
17 portálu) informován o tom, že data (určitá vrstva) pochází z projektu
18 OpenStreetMap.org a dále, pokud je ve vrstvě mapy získané z projektu
19 provedena úprava/oprava, musí být příslušná změna poskytnutá i do
20 původního otevřeného projektu.
21
22 [osmo]: https://www.openstreetmap.org/
23 [wp]: https://www.wikipedia.org/
24 [ODbL]: http://opendatacommons.org/licenses/odbl/
25
26 Motivace úkolu
27 ==============
28
29 Hlavní motivací této úlohy je seznámit studenty i s jinými otevřenými
30 projekty, než jsou přímo vlastní zdrojové kódy programů.
31 Přitom úloha umožňuje využít programátorské dovednosti a libovolné
32 technologie a vyzkoušet je při práci s velkými datovými objemy.
33 S výhodou lze použít otevřených knihoven a nástrojů, které komunita
34 vytvořila. Práce se středně velkým objemem dat také studentům
35 přinese zkušenost s tím, jak se jejich oblíbené/jimi vybrané
36 technologie se zpracováním dat vyrovnají.
37
38
39 Zadání úkolu
40 ============
41
42 Vytvořte aplikaci, která dokáže spočítat součet délek všech úseků
43 určitého typu liniových staveb, vodních toků nebo železnic na území
44 České republiky v databázi OpenStreetMap uložené k určitému
45 datu na disk počítače.
46
47 Data vztahující se k území České republiky naleznete uložená
48 v adresáři `/opt/osm/data` síťové instalace systému GNU/Linux
49 na počítačích v laboratoři. Snímek dat je k dispozici ve dvou
50 formátech. Jedná se o soubory:
51
52 - `czech-republic-snapshot.osm.bz2` – data v textovém formátu XML,
53   která jsou poté komprimovaná kompresí BZip2 (900MB, 13 GB před kompresí)
54 - `czech-republic-snapshot.osm.pbf` – data v binárním formátu Protocol Buffers (552MB)
55
56 Vytvořená aplikace musí umožnit zadat typ hledaných elementů
57 omezených kombinací jednoho klíče a jeho požadované hodnoty.
58 Například pro vyhledání všech úseků dálnic bude vstupním
59 parametrem klíč *highway* a jeho hodnota *motorway*. Pro délku
60 vodních toků *waterway=river*, atd. Výstupem programu bude součet
61 délek všech úseků daného typu.
62
63 Program může parametry přijímat na příkazovém řádku nebo
64 s využitím grafického rozhraní. Výstup může být
65 také pouze číslo vytisknuté na terminál.
66
67
68 Požadavkem je, že hodnota bude spočtena z předložených dat.
69 S daty je možné pracovat a program předvést i na svém počítači
70 nebo vzdáleném systému. K výpočtu však nesmí být použité online
71 služby nad aktuálními daty projektu OpneStreetMap.org. Odůvodnění:
72
73 1. docházelo by ke zbytečné zátěži komunitních serverů,
74 2. výsledky pro novější, průběžně editovaná data nebudou odpovídat
75    referenčním hodnotám,
76 3. cílem je si vyzkoušet práci s velkými daty a ne jen zasílat dotazy
77    do cizích služeb.
78
79 Pokud budete ke zpracování používat infrastrukturu laboratoří, nekopírujte
80 prosím data ani meziprodukty zpracování do svého
81 domovského adresáře. Došlo by k překročení limitů přidělené kapacity na uživatele.
82 Pokud budete potřebovat dočasné výsledky
83  ukládat do souboru, použijte adresář
84 /tmp. Do něj uložená data se ukládají pouze do paměti RAM na dané stanici. Velikost
85 je pak
86  omezena přibližně na polovinu fyzické paměti stanice.
87
88 Podpůrné informace pro řešení úkolu
89 ===================================
90
91 Struktura dat
92 -------------
93
94 Struktura dat projektu OpenStreetMap.org je ve své podstatě velmi jednoduchá.
95 Svět je popsaný s využitím následujících třech elementů:
96
97 - uzel (node) – definuje bod v prostoru (jeho zeměpisnou délku a šířku)
98 - cesta (way) – popisuje liniové objekty a hranice ploch/oblastí
99   (cesta přímo nedefinuje polohu, pouze se odkazuje na uzly, kterými prochází)
100 - relace (relation) – seskupuje uzly a cesty podle určitého kritéria/příslušnosti.
101
102 Ke každému elementu pak mohou být přiřazeny vlastnosti. Vlastnosti se definují
103 dvojicemi klíč, hodnota. Přitom pořadí klíčů nenese žádnou informaci, není
104 součástí databáze. Často se vlastnosti přiřazené k relaci týkají i všech
105 do ní zahrnutých cest a bodů.
106
107 Pro jednoduchost nebude brán na tento přenos vlastností zřetel. Úkolem
108 je opravdu pouze vyhledat všechny cesty, které mají přímo nastavený
109 daný klíč s požadovanou hodnotou. Délka se pak spočítá z rozdílů poloh
110 všech bodů v rámci daného úseku.
111
112 Výpočet vzdálenosti
113 -------------------
114
115 K výpočtu rozdílu poloh, které jsou v databázi uloženy ve formě zeměpisných
116 souřadnic, je potřeba provést přepočet na vzdálenost mezi body pro nejkratší
117 spojnici po zemském povrchu. Pro tento výpočet použijte některou vhodnou knihovnu.
118
119 Protocol Buffers
120 ----------------
121
122 Formát Protocol Buffers byl vytvořený firmou Google jako základní mechanizmus
123 pro předávání dat a požadavků mezi jejími službami. Jedná se o formát,
124 který umožňuje serializovat datové struktury existující v paměti nějakého
125 procesu do binární podoby (sekvence bytů), která je nezávislá na konkrétní
126 procesorové platformě a tak umožňuje data přeposlat nebo načíst ze souboru
127 jinému procesu (programu) a zde je rozbalit do jím používaných datových
128 struktur. Pro efektivní uložení dat formát přímo s daty nepřenáší pojmenování
129 a popis struktury dat. Proto, aby data mohla být uložena a poté správně
130 interpretovaná musí obě strany znát schéma/strukturu datového modelu.
131
132 [Více o vlastním formátu na Wikipedii](http://en.wikipedia.org/wiki/Protocol_Buffers).
133
134 Použití formátu Protocol Bufferes pro data projektu OpenSteerMap.org
135 je popsané na [wiki projektu OpenSteerMap](http://wiki.openstreetmap.org/wiki/PBF_Format).
136
137 Strojově čitelné schéma popisující konkrétní strukturu dat OSM je
138 spravované v rámci projektu
139 [OSM-binary na serveru GitHub](https://github.com/scrosby/OSM-binary/tree/master/src).
140
141 XML
142 ---
143
144 K dispozici jsou i data ve formátu XML. Zpracování/načtení přibližně
145 20× většího objemu dat a převod z textové reprezentace do interní
146 reprezentace může práci s daty v tomto formátu výrazně prodloužit.
147 Limit pro získání výsledku od zadání požadavku během cvičení bude
148 omezený (předběžný předpoklad půl hodiny).