]> rtime.felk.cvut.cz Git - edu/osp-wiki.git/blob - cviceni/osm.mdwn
lectures: minor update of link to LinuxDays 2023 presentation listing.
[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 publikována pod licencí [ODbL][], která je umožňuje využívat
14 i pro komerční účely a kombinovat mapový podklad i s vrstvami,
15 které není povoleno kopírovat. V podmínkách použití je pouze
16 vyžadováno, 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ž je open source software.
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 objemy dat.
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 Požadavkem je, že hodnota bude spočtena z předložených dat.
68 S daty je možné pracovat a program předvést i na svém počítači
69 nebo vzdáleném systému. K výpočtu však nesmí být použité online
70 služby nad aktuálními daty projektu OpneStreetMap.org. Odůvodnění:
71
72 1. docházelo by ke zbytečné zátěži komunitních serverů,
73 2. výsledky pro novější, průběžně editovaná data nebudou odpovídat
74    referenčním hodnotám,
75 3. cílem je si vyzkoušet práci s velkými daty a ne jen zasílat dotazy
76    do cizích služeb.
77
78 Pokud budete ke zpracování používat infrastrukturu laboratoří,
79 nekopírujte prosím data ani meziprodukty zpracování do svého
80 domovského adresáře. Došlo by k překročení limitů přidělené kapacity
81 na uživatele. Pokud budete potřebovat dočasné výsledky ukládat do
82 souboru, použijte adresář `/tmp`. Do něj uložená data se ukládají
83 pouze do paměti RAM na dané stanici. Velikost je pak omezena přibližně
84 na polovinu fyzické paměti stanice.
85
86 Podpůrné informace pro řešení úkolu
87 ===================================
88
89 Struktura dat
90 -------------
91
92 Struktura dat projektu OpenStreetMap.org je ve své podstatě velmi jednoduchá.
93 Svět je popsaný s využitím následujících třech elementů:
94
95 - uzel (node) – definuje bod v prostoru (jeho zeměpisnou délku a šířku)
96 - cesta (way) – popisuje liniové objekty a hranice ploch/oblastí
97   (cesta přímo nedefinuje polohu, pouze se odkazuje na uzly, kterými prochází)
98 - relace (relation) – seskupuje uzly a cesty podle určitého kritéria/příslušnosti.
99
100 Ke každému elementu pak mohou být přiřazeny vlastnosti. Vlastnosti se definují
101 dvojicemi klíč, hodnota. Přitom pořadí klíčů nenese žádnou informaci, není
102 součástí databáze. Často se vlastnosti přiřazené k relaci týkají i všech
103 do ní zahrnutých cest a bodů.
104
105 Pro jednoduchost nebude brán na tento přenos vlastností zřetel. Úkolem
106 je opravdu pouze vyhledat všechny cesty, které mají přímo nastavený
107 daný klíč s požadovanou hodnotou. Délka se pak spočítá z rozdílů poloh
108 všech bodů v rámci daného úseku.
109
110 Výpočet vzdálenosti
111 -------------------
112
113 K výpočtu rozdílu poloh, které jsou v databázi uloženy ve formě zeměpisných
114 souřadnic, je potřeba provést přepočet na vzdálenost mezi body pro nejkratší
115 spojnici po zemském povrchu. Pro tento výpočet použijte některou vhodnou knihovnu.
116
117 Protocol Buffers
118 ----------------
119
120 Formát Protocol Buffers byl vytvořený firmou Google jako základní mechanizmus
121 pro předávání dat a požadavků mezi jejími službami. Jedná se o formát,
122 který umožňuje serializovat datové struktury existující v paměti nějakého
123 procesu do binární podoby (sekvence bytů), která je nezávislá na konkrétní
124 procesorové platformě a tak umožňuje data přeposlat nebo načíst ze souboru
125 jinému procesu (programu) a zde je rozbalit do jím používaných datových
126 struktur. Pro efektivní uložení dat formát přímo s daty nepřenáší pojmenování
127 a popis struktury dat. Proto, aby data mohla být uložena a poté správně
128 interpretovaná musí obě strany znát schéma/strukturu datového modelu.
129
130 [Více o vlastním formátu na Wikipedii](http://en.wikipedia.org/wiki/Protocol_Buffers).
131
132 Použití formátu Protocol Bufferes pro data projektu OpenSteerMap.org
133 je popsané na [wiki projektu OpenSteerMap](http://wiki.openstreetmap.org/wiki/PBF_Format).
134
135 Strojově čitelné schéma popisující konkrétní strukturu dat OSM je
136 spravované v rámci projektu
137 [OSM-binary na serveru GitHub](https://github.com/scrosby/OSM-binary/tree/master/src).
138
139 XML
140 ---
141
142 K dispozici jsou i data ve formátu XML. Zpracování/načtení přibližně
143 20× většího objemu dat a převod z textové reprezentace do interní
144 reprezentace může práci s daty v tomto formátu výrazně prodloužit.
145 Limit pro získání výsledku od zadání požadavku během cvičení bude
146 omezený na cca půl hodiny.