MASARYKOVA UNIVERZITA PŘÍRODOVĚDECKÁ FAKULTA GEOGRAFICKÝ ÚSTAV
KARTOGRAFICKÁ VIZUALIZACE DAT Z OPENSTREETMAP Bakalářská práce
Ludvík Adamec
Vedoucí práce: Mgr. Bc. Jiří Kozel, Ph.D.
Brno 2014
Bibliografický záznam Autor:
Ludvík Adamec Přírodovědecká fakulta, Masarykova univerzita Geografický ústav
Název práce:
Kartografická vizualizace dat z OpenStreetMap
Studijní program:
Geografie a kartografie
Studijní obor:
Geografická kartografie a geoinformatika
Vedoucí práce:
Mgr. Bc. Jiří Kozel, Ph.D.
Akademický rok:
2013/2014
Počet stran:
48+11
Klíčová slova:
OpenStreetMap; webová kartografie; kartografická vizualizace; CartoCSS; SLD; GeoServer; Mapnik; Leaflet; PostgreSQL; hromadná doprava
Bibliographic Entry Author
Ludvík Adamec Faculty of Science, Masaryk University Department of Geography
Title of Thesis:
Cartographic visualization of OpenStreetMap data
Degree programme:
Geography and Cartography
Field of Study:
Geographical Cartography and Geoinformatics
Supervisor:
Mgr. Bc. Jiří Kozel, Ph.D.
Academic Year:
2013/2014
Number of Pages:
48+11
Keywords:
OpenStreetMap; web cartography; cartographic visualization; CartoCSS; SLD; GeoServer; Mapnik; Leaflet; PostgreSQL; public transport
Abstrakt Bakalářská práce se zabývá kartografickou vizualizací dat z projektu OpenStreetMap. Nejdříve se věnuje samotným datům, jejich struktuře a obsahu. Následně dochází k porovnání open source nástrojů a standardů využitelných pro kartografickou vizualizaci na internetu. V praktické části práce byl na základě porovnání jednotlivých metod (CartoCSS a SLD GeoServeru) vytvořen návrh webové mapy pro městskou hromadnou dopravu v Novém Městě na Moravě a v Brně.
Abstract Bachelor thesis concerns deals with cartographical vizualization of data from OpenStreetMap project. Firstly it deals with the data itself, their composition and structure. Further, open source cartographical tools and standards for cartographical visualisation are compared. In practical part a map draft was created based on the comparisons (CartoCSS and GeoServer SLD). The draft visualizes web map of public transport in Nové Město na Moravě and Brno.
Poděkování Na tomto místě bych chtěl poděkovat především Mgr. Bc. Jiřímu Kozlovi, Ph.D. za vstřícnost a cenné rady při vedení této práce. Dále bych chtěl poděkovat komunitě uživatelů projektu OpenStreetMap za data a nástroje.
Prohlášení Prohlašuji, že jsem svoji bakalářskou práci vypracoval samostatně s využitím informačních zdrojů, které jsou v práci citovány.
Brno 8. května 2014
……………………………… Ludvík Adamec
OBSAH 1 Úvod .....................................................................................................................................10 1.1 Cíl práce ......................................................................................................................... 10 2 Zhodnocení dostupné literatury ..........................................................................................11 3 Data OpenStreetMap ...........................................................................................................13 3.1 Datový model OpenStreetMap ..................................................................................... 13 3.1.1 Základní typy objektů ..........................................................................................14 3.1.2 Seznam mapovaných objektů..............................................................................15 3.2 Vlastnosti OpenStreetMap dat ..................................................................................... 15 3.2.1 Přesnost a kvalita dat ..........................................................................................15 3.2.2 Licenční podmínky užití dat .................................................................................17 3.3 Zdroje poskytující data OpenStreetMap ....................................................................... 17 4 Kartografická vizualizace z dat OpenStreetMap ..................................................................19 4.1 Databáze PostgreSQL .................................................................................................... 19 4.2 Vykreslování map nástrojem Mapnik ........................................................................... 20 4.2.1 XML styl pro Mapnik ............................................................................................20 4.2.2 Generování XML Mapnik stylu prostřednictvím nástroje Tilemill .......................22 4.2.3 CartoCSS ..............................................................................................................22 4.3 Mapové servery ............................................................................................................ 22 4.3.1 GeoServer ............................................................................................................22 4.3.2 Mapserver............................................................................................................25 4.4 Porovnání kartografických vyjadřovacích prostředků v SLD a CartoCSS ...................... 25 4.4.1 Metoda bodových znaků .....................................................................................25 4.4.2 Metoda liniových znaků.......................................................................................27 4.4.3 Metoda plošných znaků.......................................................................................28 4.4.4 Popis bodových, liniových a plošných znaků v SLD a CartoCSS ...........................28 4.4.5 Závěr z porovnávání kartografických vyjadřovacích prostředků .........................31 4.5 Publikace Map na webu ................................................................................................ 31 4.5.1 OpenLayers ..........................................................................................................32 4.5.2 Leaflet ..................................................................................................................32 5 Ukázka kartografické vizualizace dat z openstreetmap .......................................................33 5.1 Zpracování dat............................................................................................................... 34 5.2 Vytvoření mapových podkladů ..................................................................................... 34 5.2.1 Vytvoření mapového podkladu Mapnikem .........................................................35 5.2.2 Data poskytovaná GeoServerem .........................................................................37 5.2.3 Leaflet ..................................................................................................................37 6 Závěr .....................................................................................................................................40
Seznam použité literatury .........................................................................................................42 Seznam použitých zkratek ........................................................................................................45 Seznam obrázků ........................................................................................................................46 Seznam tabulek .........................................................................................................................47 Seznam příloh ...........................................................................................................................48
1 ÚVOD Kartografie na webu zažívá v současné době velký rozmach. S tím roste i popularita volně dostupných dat. Nejvýznamnějším zdrojem geografických volně dostupných dat je projekt OpenStreetMap, který si klade za cíl zmapovat celý svět prostřednictvím práce dobrovolníků. Steve Coast založil tento projekt v roce 2004 v Anglii. V roce 2006 vznikla nezisková mezinárodní organizace OpenStreetMap foundation, která projekt spravuje až do současnosti. Aktuálně je do projektu zapojeno více než 1,6 milionu uživatelů. Data z OpenStreetMap je možné stáhnout a používat. Podmínkou je uvedení jako zdroj „OpenStreetMap a jeho přispěvatele“ a zároveň použitá data zveřejnit pod stejnou licencí. V posledních letech OpenStreetMap vytváří konkurenci i poskytovatelům komerčních dat a umožňuje šířit zájem o open source kartografické nástroje. Právě tyto technologie mohou být pro řadu kartografických úloh dostatečné a mohou umožnit vznik řadě důležitých kartografických produktů. Mezi současně nejpoužívanější open source nástroje použitelné v oblasti webové kartografie patří například Leaflet, OpenLayers, MapServer, GeoServer, Mapnik nebo Tilemill.
1.1
Cíl práce Cílem bakalářské práce je analyzovat data z projektu OpenStreetMap, nejdříve se
zaměřuje na strukturu a obsah dat. Dále byla navržena možnost jejich získání a ukládání. V další části práce byla provedena rešerše možných způsobů kartografické vizualizace dat pro prostředí internetu. Rešerše je zaměřena na technologie umožňující kartografickou vizualizaci, které jsou poskytované jako open source. Konkrétně došlo ke srovnání kartografických vyjadřovacích prostředků v CartoCSS a SLD GeoServeru. Na základě zpracované rešerše byla ze zvolených technik navržena ukázková vizualizace těchto dat, která byla zaměřena na oblast městské hromadné dopravy. Došlo k návrhu mapy pro městskou autobusovou dopravu v Novém Městě na Moravě a noční hromadnou dopravu v Brně.
10
2 ZHODNOCENÍ DOSTUPNÉ LITERATURY Vzhledem k současným trendům v kartografii, kdy nejdůležitějším médiem pro kartografické produkty se stal internet, je nutné seznam dostupné literatury rozdělit do několika částí a to mezi publikace týkající se tvorby map, publikace o informačních technologiích a zdrojů zabývajících se projektem OpenStreetMap. Oblasti webové kartografie se věnuje řada autorů, mezi významné publikace patří Web Cartography: developlments and prospects [1], kde se autoři zabývají obecně webovou kartografií a jejími možnostmi. Další publikací je například Multimedia Cartography [2], která se webové kartografie věnuje spíše okrajově. Webové mapy jsou zde uváděny jako nadstavba map digitálních. Problémem těchto publikací je, že vzhledem k rychlosti vývoje a šíření technologií, internetu a nových kartografických možností tyto publikace ztrácejí na informační hodnotě. Samotné kartografii a vizualizaci geografických dat se věnuje řada autorů. V českém prostředí například publikace Vybrané kapitoly z kartografie [3], která i přes svoje stáří zůstává stále aktuální. Další významnou knihou jsou Metody tematické kartografie [4]. V zahraničí je významnou autorkou například Peterson s publikací GIS Cartography: A Guide to Effective Map Design [5]. Peterson v současné době vydává na svém blogu řadu zajímavých článků o webové kartografii. Informace k použitým technologiím byly čerpány zejména z oficiálních dokumentací jednotlivých projektů. Navíc pro PostGIS bylo čerpáno z knihy PostGIS in Action [6], která podrobně ukazuje možnosti využití tohoto prostorového rozšíření databáze. Pro GeoServer jako velmi užitečný zdroj byla využita publikace GeoServer Beginner’s Guide. Zmiňovaný blog autorky Peterson obsahuje i informace o Tilemillu, který byl taktéž využit. Problematika kartografických možností SLD (Styled Layer Decriptor) ve srovnání s MapServerem je probírána v článku Comparison of Styled Layer Descriptor Specification and MapFile Format in Light of Cartographic Visualization [7]. Specifikace Styled Layer Decriptor (SLD) [8] a Symbology Encoding (SE) [9] jsou specifikace, které popisují kartografickou symboliku rastrových i vektorových objektů. Specifikace SE vznikla rozdělením původní specifikace SLD 1.0.0 na SLD 1.1.0 a SE 1.1.0. Mnoho názorných ukázek a návodů pro vytvoření kartografických znaků prostřednictvím SLD stylů je popsáno na webových stránkách organizace Office of Geographic Information (MassGIS) [10]. Zmíněný MapServer s jeho konfiguračním souborem MapFile , který specifikuje nejenom
kartografickou
symboliku je
popsán
11
v článku Cartographical Symbol
Construction with MapServer [11]. Článek podrobně ukazuje konkrétní příklady a možnosti kartografických znaků v MapServeru. Dalším standardem podporujícím definici kartografické symboliky je KML (Keyhole Markup Language). Tento standard je podrobně popsán na webových stránkách OGC (Open Geospatial Consorcium) [12] a dalším zdrojem je výukový materiál od společnosti Google [13]. K projektu OpenStreetMap a jeho datům je nejucelenějším zdrojem jeho dokumentace, dostupná na wiki serveru projektu [14] a kniha OpenStreetMap: Using and Enhancing the Free Map of the World [15]. V této knize autoři postupně popisují smysl projektu OpenStreetMap, sběr dat a jejich strukturu. V závěru je velká část věnována možnostem kartografické vizualizace z těchto dat. Dále v posledních letech bylo napsáno několik studentských prací, kde tato data byla analyzována nebo využita pro nějakou konkrétní kartografickou vizualizaci. Diplomová práce Projekt OpenStreetMapping z pohledu geoinformatika [16] se věnuje zejména sběru dat pro tento projekt. Jsou zde také podrobně popisovány problémy zejména v prostorové složce dat. Další diplomová práce s názvem Prototyp turistického systému založeného na datech OpenStreetMap [17] a bakalářská práce Vykreslovací systém MTB map pro OpenStreetMap [18] se zabývají zejména technickými možnostmi vizualizace dat z OpenStreetMap pomocí konkrétních technologií, bohužel neobsahují mnoho informací o samotné kartografické vizualizaci.
12
3 DATA OPENSTREETMAP 3.1
Datový model OpenStreetMap Datový model OpenStreetMap můžeme vidět na Obr. 1. Všechna data projektu jsou
uložena prostřednictvím uzlů (nodes), cest (ways), vztahů (relations) a tagů. Všechny zmíněné objekty jsou navzájem provázané. [15, s. 51]
Obr. 1. Datový model projektu OpenStreetMap. Upraveno podle [15, s. 52]
Pro výměnu a práci s daty je používán OSM XML1 formát, který je složen z několika základních částí. Na Obr. 2 vidíme základní strukturu OSM souboru. Skládá se z definice verze OSM (osm version), stanovení omezujícího obdélníku (bounds) a samotného obsahu, který zahrnuje uzly, cesty a vztahy. Zmíněné elementy, které nesou obsahovou informaci, mohou být doplněny rozšiřujícími informacemi pomocí elementu tag, který bude zmíněn později.
1
XML - eXtensible Markup Language je obecný značkovací jazyk vyvinutý konsorciem W3C [44], který byl navržen pro snadné vytváření značkovacích jazyků pro různé účely.
13
<node> <way>
Obr. 2. Ukázka OSM XML schématu.
3.1.1 Základní typy objektů Uzel (node) Každý uzel (Obr. 3) je definován svojí zeměpisnou šířkou a délkou. Další informace, které má každý uzel je datum jeho uložení a údaje o uživateli, který ho uložil. Tyto doplňkové informace se také vyskytují u cest a vztahů. Jednotlivé uzly se používají k zaznamenání bodů zájmu nebo se mohou spojit a vytvořit cestu. <node id="29724004" visible="true" version="5" changeset="15483916" timestamp="2013-03-24T19:49:40Z" user="name" uid="1574" lat="49.595" lon="16.013">
Obr. 3. Uzel v OSM XML, který reprezentuje železniční zastávku.
Cesta (way) Cesta (Obr. 4) reprezentuje liniové prvky mapy. Je složena vždy z nejméně dvou referenčních uzlů. OSM XML schéma nedefinuje žádným speciálním způsobem polygony. Polygon je reprezentován speciálním druhem cesty, která má první a poslední referenční uzel shodný, tedy jedná se vlastně o uzavřenou cestu. <way id="51542182" visible="true" version="1" changeset="4014350" timestamp="2010-03-02T05:35:01Z" user="BiIbo" uid="3516">
Obr. 4. Uzavřená cesta v OSM XML, která reprezentuje budovu.
Vztahy (relations) Vztahy (Obr. 5) obsahují seřazený seznam referenčních uzlů nebo cest. Každý člen seznamu má atribut obsahující referenční bod nebo cestu a název role, která nemusí být vyplněna. Každý vztah může obsahovat i tagy s dalšími informacemi. Cílem vztahu je vytvořit propojení mezi několika objekty. Příkladem mohou být složité polygony, které vznikají kombinací několika cest.
14
<member type="node" ref="653700097" role="forward_stop"/> ... <member type="node" ref="643267618" role="backward_stop"/> <member type="way" ref="186633608" role=""/> ... <member type="way" ref="240747961" role=""/>
Obr. 5. Vztah v OSM XML reprezentující trasu a zastávky trolejbusové linky.
Tagy Tagy se mohou vyskytovat u všech zmíněných základních objektů. Každý tag se skládá ze dvou částí, první částí je klíč (key) a druhou část reprezentuje hodnota (value). Příklad tagů na Obr. 6 specifikuje druh cesty (higway=tertiary) a počet pruhů silnice (lanes=3). <way id="70691647" visible="true" version="2" changeset="5422407" timestamp="2010-08-07T07:29:33Z" user="hanoj" uid="4788">
Obr. 6. Tagy v OSM XML reprezentující silnici třetí třídy.
3.1.2 Seznam mapovaných objektů Projekt OpenStreetMap definuje jednotlivé fyzické objekty přidáním tagu k základním druhům objektů, které byly již zmíněny (uzly, cesty, vztahy). Přiřazení klíčové hodnoty tagu se řídí společným tagovacím schématem, které může každý uživatel doplnit podle svých potřeb. Základní seznam tagů, které jsou nejčastěji používány, tvoří více než 1000 různých tagů. Vzhledem k obsáhlosti tohoto schématu a jeho neustálému vývoji není možné v této práci uvést seznam mapovaných objektů. Celé schéma1 je uvedeno v dokumentaci projektu. [19]
3.2
Vlastnosti OpenStreetMap dat
3.2.1 Přesnost a kvalita dat Kvalita a přesnost dat se vždy odvíjí od metody získání dat. Vzhledem k tomu, že data OpenStreetMap jsou vytvářena uživateli, kteří mají rozdílné úrovně zkušeností a znalostí mapování, tak i data projektu jsou velmi rozdílné kvality. Prostorová složka dat je ovlivněna zejména podklady, které uživatelé používají k mapování. Mezi ty patří například 1
http://wiki.openstreetmap.org/wiki/Map_Features
15
podkladové mapy, měření amatérskými GPS přístroji nebo satelitní snímky různého data původu a rozlišení. Z tohoto důvodu je problematické určit polohovou přesnost dat. Obsahová složka dat je také velmi rozdílná. Různí uživatelé zaznamenávají různé vlastnosti a druhy objektů, problémem je i různý stupeň zmapovaného prostoru v rámci určité oblasti. Například v rámci určitého regionu se mohou nacházet obce, které mají zmapovány pouze hlavní cesty a naopak obce, které jsou zmapovány velmi podrobně. Příkladem mohou být obce Ždánice a Uhřice, které jsou od sebe vzdáleny pouze 6 kilometrů, přesto úroveň zmapování je velmi odlišná (Obr. 7). Problémem dat může být jejich aktuálnost, která je velmi různorodá.
Obr. 7. Rozdílná úroveň zmapování v obci Uhřice a Ždánice. (Zdroj: http://www.openstreetmap.org/ [20])
V rámci České republiky je většina oblastí zakreslena velmi podrobně. Oblasti hustěji osídlené bývají většinou i podrobněji zmapované. Důvodem, proč je většina oblastí podrobně zmapována, je určitě aktivní komunita uživatelů projektu OpenStreetMap. Díky této komunitě se podařilo bezplatně získat řadu zdrojů, které mohou být použity při odvozování map. Příkladem těchto zdrojů je WMS ortofotomapy od ÚHUL nebo WMS pro katastrální mapy od ČUZK. [14] Pokud se rozhodneme OpenStreetMap data použít, je určitě na místě kontrola kvality dat požadovaných oblastí s jinými kartografickými díly, například WMS ZABAGED od ČUZK [21].
16
3.2.2 Licenční podmínky užití dat Data projektu OpenStreetMap jsou od září roku 2012 poskytována pod licencí Open Data Commons Open Database License. [22] Na základě této licence je možné data kopírovat, distribuovat a upravovat, ale podmínkou je uvedení jako zdroj „OpenStreetMap a jeho přispěvatele“. Druhou důležitou podmínkou je použitá data zveřejnit pod stejnou licencí. V interaktivních elektronických mapách je nutné uvést zdroj ve formátu „© Přispěvatelé OpenStreetMap“ a přitom uvést licenci a odkaz na její plné znění. V situaci, kdy není možné přidat odkaz, se doporučuje jako zdroj uvést adresu webu openstreetmap.org a opendatacommons.org, kde se nacházejí licenční podmínky. [23]
3.3
Zdroje poskytující data OpenStreetMap Stažení dat OpenStreetMap je možné z několika zdrojů (Tab. 1). Jednotlivé zdroje se
liší zejména prostorovým vymezením a formátem dat. Data můžeme nejčastěji získat v originálním formátu OSM XML, respektive v jeho komprimované formě OSM.BZ2 nebo PBF, která je jeho alternativou v binární podobě [24]. Data můžeme stáhnout i v jiných než původních formátech, nejčastějším příkladem je Shapefile (SHP). Problémem formátů vzniklých konverzí původních dat může být to, že neobsahují kompletní data. Tyto upravené formáty se dají úspěšně použít, ale je výhodnější stáhnout data v původním formátu, která lze v případě potřeby konvertovat. [25]
17
Tab. 1. Seznam základních poskytovatelů dat OpenStreetMap. Název (URL)
Popis a možností stahování dat
Stáhnutí z oficiálních stránek projektu. Volba oblasti pomocí omezujícího obdélníku (maximální rozdíl zeměpisné šířky i zeměpisné délky je 0,25 °) a maximálně 50 000 uzlů. Planet.osm Kompletní data z projektu OpenStreetMap. wiki.openstreetmap.org/w Velikost komprimovaného je 29GB a iki/Planet.osm nekomprimovaného 400GB. Výřezy dat podle kontinentů, států, některé státy i podle regionů. Evropské země jsou kompletní, oblasti mimo Evropu obsahují pouze GEOFABRIK některé země. download.geofabrik.de/ OpenStreetMap.org www.openstreetmap.org
Metro Extracts metro.teczno.com/
Data ve formátu Shapefile nejsou kompletním obsahem OSM. Výřezy oblastí nejvýznamnějších měst a jejich okolí (obsahuje i Prahu a Brno).
osm.kyblsoft.cz/archiv/
Výřez České republiky.
ThinkGeo osmdata.thinkgeo.com/
Výřezy dat podle států. Data nejsou kompletním obsahem OSM.
Výřezy 200 měst a regionů světa. Bbbike.org Možnost získání dat zadáním omezujícího download.bbbike.org/osm polygonu s rozměrem až 6000 x 4000km a / objemem dat do velikosti 768MB. WeoGeo Market market.weogeo.com/
1
Výřezy měst a regionů světa, export do mnoha formátů. Data nejsou kompletním obsahem OSM.
GeoJSON je formát, který je určen pro výměnu různých geografických dat [46].
18
Formát dat
Aktualizace
OSM
Okamžitá
PBF, OSM.BZ2
Týdenní/ denní
PBF, OSM.BZ2, SHP
Denní
PBF, OSM.BZ2 PBF, OSM.BZ2
Měsíční Denní
SHP
Týdenní
PBF, OSM.BZ2
Týdenní
SHP, KML, GML, GeoJSON1
Měsíční
4 KARTOGRAFICKÁ VIZUALIZACE Z DAT OPENSTREETMAP Kartografická vizualizace postavená na datech projektu OpenStreetMap je velmi široký pojem, proto bude v následujících kapitolách popisována pouze v oblasti webové kartografie. Cílem je ukázat možné postupy a navrhnout technologie, díky kterým můžeme vytvořit mapu pro webové prohlížeče. Všechny následující postupy a ukázky pracují s open source softwarem. V dalších podkapitolách budou popsány jednotlivé kroky, díky kterým získáme mapu pro webové prohlížeče. První část se bude zabývat zpracováním stažených OSM dat do databázového systému, následně budou rozebrány mapové servery, nástroje a specifikace, které jsou určeny pro kartografickou vizualizaci. Z mapových serverů bude zmíněn GeoServer a MapServer s jejich kartografickými styly: SLD GeoServeru a MapFile MapServeru. Dalším nástrojem, který bude popisován je Mapnik a jeho stylový dokument Mapnik XML. V poslední řadě bude zmíněn kartografický styl CartoCSS, který umožňuje export do Mapnik XML. Samotný kartografický styl CartoCSS bude porovnán s SLD stylem pro GeoServer z hlediska možností kartografických vyjadřovacích prostředků. V poslední části této kapitoly budou zmíněny možnosti publikace mapových podkladů na internetu.
4.1
Databáze PostgreSQL PostgreSQL je objektově-relační databázový systém, který byl původně vytvořen na
Kalifornské univerzitě v Berkeley. V současnosti je vydáván pod vlastní open source licencí (http://opensource.org/licenses/postgresql). Pro práci a ukládání prostorových dat je možné systém upravit rozšířením PostGIS [26]. PostGIS přidává možnosti ukládání a zpracování prostorových dat. Rozšíření je postaveno na SQL specifikaci "Simple Features" od organizace OGC [27]. Instalací rozšíření přidáme do databáze základní geometrické typy (point, linestring, polygon, multipoint, multilinestring, multipolygon a geometrycollection), prostorový R-tree index a funkce pro analýzu a zpracování prostorových dat. [6, s. 17] Příprava databáze a postup importu stažených OpenStreetMap dat se nachází v příloze 1.
19
4.2
Vykreslování map nástrojem Mapnik Mapnik je nástroj pro vykreslování map napsaný v C++, ale je možné s ním pracovat
prostřednictvím jazyka Python. Je poskytován zdarma pod licencí LGPL [28]. Vzhled vykreslovaných map se nastavuje stylovým dokumentem XML. Mapnik dokáže zpracovat přímo zdrojové soubory (OSM), ale většinou se pracuje s daty z databáze PostGIS. Výstupem z nástroje Mapnik je mapa nebo mapové čtverce ve formátu PNG. [29] Podklady pro instalaci a práci s nástrojem Mapnik se nacházejí v příloze 2. K vytvoření samotné mapy je nutné stažená data OpenStreetMap nahrát do databáze PostGIS nástrojem Osm2pgsql. Dále budeme potřebovat vytvořit stylový XML dokument, podle kterého Mapnik vygeneruje naši mapu. 4.2.1 XML styl pro Mapnik Mapový styl pro Mapnik se skládá ze všech zdrojů a pravidel na základě kterých Mapnik
generuje
mapu.
Mapnik
v současné
době
podporuje
formáty
jako
Shapefile, PostGIS, TIFF nebo OSM soubory. Samotný XML soubor (Obr. 8) se skládá z několika částí a je omezen objektem <Map>, který má atributy specifikující barvu pozadí a mapovou projekci mapy. Dalšími objekty jsou styly vrstev a samotné vrstvy, obsahující informaci o přiřazeném stylu a specifikaci datového zdroje vrstvy. <Map bgcolor="..." srs="..."> <Style name="...">
... <StyleName>... <Parameter>
Obr. 8. Schéma Mapnik XML stylu.
V konkrétních vrstvách
(Obr. 9) jsou specifikovány styly tagem <Stylename>. Jedné vrstvě můžeme přiřadit více stylů a Mapnik je bude vykreslovat podle pořadí v XML. Každá vrstva má tagem specifikovány parametry, které definují přístup k datům. V našem příkladu se jedná o data uložená v PostGIS databázi. Přístupové informace k databázi jsou specifikovány v jednotlivých parametrech a konkrétní data z databáze jsou získána SQL selectem.
20
<StyleName>První_styl_Silnice_obal <StyleName>Druhý_styl_Silnice_výplň <Parameter name="table"> (SELECT way,highway FROM planet_osm_line where highway IS NOT NULL ORDER BY z_order) as Silnice < /Parameter> <Parameter name="type">postgis <Parameter name="port">Port <Parameter name="user">Uživatel_databáze <Parameter name="dbname">Název_databáze <Parameter name="extent">...
Obr. 9. Ukázka vrstvy silnic v Mapnik XML.
Každý styl (Obr. 10) se definuje tagem <Style>. Atributem stylu je jeho jméno a jeho obsahem jsou pravidla . Pravidla slouží pro definici symboliky vrstvy v mapě. Základní možností definice symbolů jsou elementy PointSymbolizer pro body, LineSymbolizer pro liniové prvky, PolygonSymbolizer pro polygony a TextSymbolizer, který specifikuje textové popisy. Prostřednictvím filtrace můžeme aplikovat pravidlo pouze na určitou skupinu dat vrstvy. Na ukázce (Obr. 10), je styl pro silnice, kde se jednotlivá pravidla aplikují na konkrétní třídy silnic, které jsou v tabulce databáze PostGIS zapsána ve sloupci s názvem „higway“. Pravidla jsou definována pro třídu silnic s názvem „primary“ a „secondary“. Vykreslování určitého pravidla můžeme omezit i podle měřítka mapy, které je specifikováno tagy <MaxScaleDenominator> a <MinScaleDenominator>. [30] <Style name="silnice"> <MaxScaleDenominator>12500 <MinScaleDenominator>5000 [highway] = 'primary' <MaxScaleDenominator>12500 <MinScaleDenominator>5000 [highway] = 'secondary' <MaxScaleDenominator>25000 <MinScaleDenominator>12500 [highway] = 'primary'
Obr. 10. Ukázka stylu silnic v Mapnik XML.
21
4.2.2 Generování XML Mapnik stylu prostřednictvím nástroje Tilemill Tilemill je open source nástroj vytvořený společností Mapbox. Umožňuje vytvářet kartografickou symboliku mapy jednoduchým a uživatelsky přívětivým způsobem. Pro vykreslení mapy používá Mapnik. Výstupem z Tilemillu může být finální mapa v PNG, PDF, SVG, MBTiles 1 nebo Mapnik XML [31]. Velkou výhodou použití Tilemillu je automatické obnovení náhledu mapy po každé změně kartografického stylu, díky tomu lze nejdříve vytvořit celý styl a nakonec vygenerovat mapu Mapnikem. Velkým problémem ovšem může být nemožnost volby kartografického zobrazení, protože Tilemill umožňuje pouze „WGS84 Web Mercator“ zobrazení s kódem EPSG:3857. [32]
4.2.3 CartoCSS Vlastní tvorba kartografického stylu pro Tilemill se provádí pomocí CartoCSS [33]. CartoCSS je kartografickou obdobou kaskádových stylů (CSS2), které jsou kolekcí metod pro grafickou úpravu internetových stránek. CartoCSS využívá abstraktních vrstev a umožňuje využít vlastnosti dědičnosti pravidel. Kartografické možnosti CartoCSS jsou rovnocenné s možnostmi kartografického stylu pro Mapnik. Ukázka na Obr. 11 reprezentuje stejnou symboliku jako zmíněná ukázka Mapnik XML (Obr. 10). Z ukázky je zřejmé, že kód v CartoCSS je výrazně přehlednější a kratší. #silnice { [zoom=16]{ [highway='secondary']{line-width:13; line-color:#909090;} [highway='primary']{line-width:16; line-color:#ae0000;} } [zoom=15]{ [highway='primary']{line-width:10; line-color:#ae0000; } } }
Obr. 11. Ukázka stylu vrstvy silnic v CartoCSS.
4.3
Mapové servery
4.3.1 GeoServer GeoServer je open source mapový server, napsaný v jazyce Java, který vznikl v roce 2001. Server umožňuje publikaci prostorových dat a pro práci s nimi využívá standardy OGC. GeoServer jako datové zdroje podporuje rastrové (ArcGrid, GeoTiff, Gtopo30, ImageMosaic, WorldImage) a vektorové (Shapefile, PostGIS, WFS) formáty dat [34]. Data OpenStreetMap je možné importovat z již zmíněné databáze PostGIS. [35]
1 2
MBTiles je formát pro ukládání mapových čtverců v databázi SQLite (https://sqlite.org/). http://www.w3.org/TR/CSS2/
22
Práce s GeoServerem probíhá prostřednictvím uživatelského rozhraní ve webovém prohlížeči. Pokud máme server nainstalovaný jako localhost, tak přístup do uživatelského rozhraní je na adrese http://localhost:8080/Geoserver/. GeoServer pracuje s daty, která jsou ukládána do vrstev. Pro import nové datové vrstvy je nutné nejdříve vytvořit pracovní prostor (workspace) a přidat nový datový zdroj (store). Pokud zvolíme jako datový zdroj databázi PostGIS, tak si následně můžeme zvolit jako vrstvu libovolnou tabulku z databáze nebo vytvořit vlastní SQL pohled do databáze. Při publikaci samotné vrstvy je nutné nastavit vhodnou mapovou projekci a zvolit
kartografickou
symboliku
vrstvy.
Data
je
možné
publikovat
pomocí
standardizovaných WMS, WFS nebo WCS služeb. [36] SLD styl pro GeoServer GeoServer používá pro definici symboliky mapových vrstev specifikace organizace OGC, konkrétně specifikaci SLD 1.0.0 a částečně implementoval i novou specifikaci SE 1.1.0 a doplnil ji některými vlastními funkcemi. V rámci specifikací je popsána kartografická symbolika vektorových a rastrových prostorových objektů včetně jejich textových popisů. V prostředí GeoServeru se kartografická symbolika zapisuje v XML SLD stylovém dokumentu (viz Obr. 12). Jednotlivé stylové dokumenty jsou propojeny s vrstvami, které jsou následně podle SLD stylů vykreslovány. Vzorový SLD styl reprezentuje stejnou symboliku jako zmíněný styl v Mapnik XML a CartoCSS. Na příkladu vidíme, že SLD je výrazně delší a komplikovanější než oba zmíněné způsoby. Každý SLD styl obsahuje jmennou vrstvu (NamedLayer), která může obsahovat několik uživatelských stylů (UserStyle). V uživatelském stylu se pravidlem (Rule) definuje kartografický styl pro celou vrstvu nebo pouze pro podskupinu objektů vybraných filtrem (Filter), popřípadě měřítkem (MinScaleDenominator a MaxScaleDenominator). Samotné vyjadřovací prostředky se definují pomocí symbolizérů. Symbolizéry pro vektorové objekty se dělí na PointSymbolizer, LineSymbolizer a PolygonSymbolizer, rastrové objekty popisuje RasterSymbolizer a poslední TextSymbolizer je určen pro textové popisy. [34, s. 129] Podle typu symbolizéru můžeme definovat tvar, velikost, orientaci, průhlednost, výplň, externí grafiku, ohraničení, písmo a další vlastnosti, které budou podrobněji rozepsány ve srovnání s CartoCSS (viz podkapitola 4.4).
23
<StyledLayerDescriptor version="1.0.0"> default_line <UserStyle> highway primary <MinScaleDenominator>5000 <MaxScaleDenominator>12500 <Stroke> #ae0000 16 highway secondary <MinScaleDenominator>5000 <MaxScaleDenominator>12500 <Stroke> #909090 13 highway primary <MinScaleDenominator>12500 <MaxScaleDenominator>25000 <Stroke> #909090 10
Obr. 12. Struktura SLD stylu pro GeoServer.
24
4.3.2 Mapserver MapServer je open source mapový server, který nabízí obdobné možnosti jako GeoServer. MapServer byl vyvinut na Univerzitě v Minnesotě ve spolupráci s NASA a MNDNR. MapServer nabízí velmi širokou podporu vstupních formátů dat (Shapefile, PostGIS, ESRI ArcSDE, Oracle Spatial, MySQL a mnoho dalších), výstupním formátem mohou být webové služby pod specifikacemi OGC (WMS, WFS) [37]. Konfiguračním souborem MapServeru je MapFile, který specifikuje i kompletní kartografickou symboliku pro výsledné výstupy dat. MapFile pracuje přímo s jednotlivými vrstvami a specifikuje i řadu dalších věcí než jenom symboliku a nastavení samostatných vrstev, například formáty výstupu, kartografické zobrazení a další volby. [38] Detailní srovnání možností MapServeru a GeoServeru po stránce kartografických vyjadřovacích prostředků je popsáno v článku „Comparison of Styled Layer Descriptor specification and MapFile format in light of cartographic visualization“ od autora Jiřího Kozla [7].
4.4 Porovnání kartografických vyjadřovacích prostředků v SLD a CartoCSS Pro porovnání formátu SLD pro GeoServer a CartoCSS je nutné si nejdříve stanovit kritéria a metodu hodnocení. Jako metoda byla zvolena jednoduchá binární metoda hodnocení, která je založena na ověřování, zda lze provést různé kartografické metody [39, s. 26]. Předmětem testování se staly možnosti tvorby kartografických znaků. V kartografii jsou kartografické znaky základním prostředkem jazyka mapy, který sděluje informace o vlastnostech jevu. [3, s. 31] Znaky lze rozdělit do základních kategorií – bodové, liniové a plošné. Jednotlivým znakům je možné přiřadit jejich optické vlastnosti. Znak má tyto základní optické vlastnosti – tvar, velikost, orientaci, barvu, strukturu a intenzitu. [3, s. 34] Informace použité ve srovnávání pocházejí z dokumentace CartoCSS [33], dokumentace pro GeoServer [35], specifikace OGC [9] a Wiki serveru „The Office of Geographic Information“ [40]. Je nutné ještě upřesnit, že se porovnávaly možnosti SLD stylu GeoServeru, tedy nejedná se o srovnání CartoCSS s obecnou specifikací SLD. 4.4.1 Metoda bodových znaků U bodových znaků uvažujeme několik základních parametrů – tvar, velikost, strukturu, výplň a orientaci [4, s. 43]. V rámci rozdílů mezi možnostmi SLD GeoServeru a 25
CartoCSS je nutné uvažovat i technická omezení, konkrétně je nutné se zaměřit na průhlednost, kombinaci více symbolů, použití vlastního symbolu z externího zdroje a umístění bodového symbolu do mapy. Obě metody jsou srovnány v Tab. 2. Na první pohled má CartoCSS velmi omezené bodové vyjadřovací prostředky, nelze například bodovým znakům nastavit jiný tvar než elipsu (kružnici). Taktéž neumožňuje kombinovat více bodových znaků, ani bodový znak nahradit znakem TrueType1 Fontu. Všechny zmíněné nedostatky se mohou vyřešit vhodným externím znakem, textový znak je navíc možné v mapě vyjádřit textovým popisem. Umístění bodového znaku do mapy v SLD i CartoCSS využívá vztažný bod, který je vždy uprostřed plátna znaku. Tento problém se dá vyřešit posunutím tohoto vztažného bodu ve vodorovné i svislé ose a tím i posunout bodový znak v mapě. Závěr: Všechny porovnávané vlastnosti bodových znaků jsou jak u CartoCSS, tak i SLD proveditelné, s výjimkou nastavení průhlednosti vektorového SVG znaku v SLD, která není podporována. Problémem může být, že CartoCSS neobsahuje žádný vzorník znaků (pouze elipsu) a spoléhá na uživatele, že použije vlastní znaky. Tab. 2. Možnosti bodových znaků v SLD a CartoCSS.
Testovaná vlastnost
SLD
Doplňkové informace podporované tvary
Tvar
ano
Průhlednost Velikost Barva Orientace Kombinace více bodových znaků
ano ano ano ano
Změna polohy vztažného bodu Externí grafický znak Externí grafický znak (raster) Externí grafický znak (vektor) Externí grafický znak (TrueType font)
1
0–1
Formát ano (PNG, JPEG, GIF)
ne (pouze kruh a elipsa) ano ano ano ano
RGB
ano ne
CartoCSS
Doplňkové informace podporované tvary
0–1 RGB, HSL
ne vždy uprostřed znaku, ale je možné udělat posun ve směru os Průhlednost symbolu 0–1
ne Formát ano (PNG, JPEG, GIF)
vždy uprostřed znaku, ale je možné udělat posun ve směru os Průhlednost symbolu 0–1
ano (SVG)
nelze
ano (SVG)
0–1
ano
0–1
ne
lze nahradit popisem z atributové tabulky
TrueType je standard pro popis vektorových písem (fontů).
26
4.4.2 Metoda liniových znaků Liniový kartografický znak má čtyři parametry – strukturu, tloušťku, barvu a orientaci [4, s. 47]. Kromě těchto parametrů byla testována ještě průhlednost, různé kombinace liniových znaků s bodovými, odsazení a tvar zakončení linie. Na základě vyhodnocení výsledků (viz Tab. 3) bylo zjištěno, že CartoCSS poskytuje výrazně širší nabídku vyjadřovacích prostředků pro liniové znaky. CartoCSS oproti SLD umožňuje nastavení odsazení znaku od geometrie linie, definování asymetrické linie nebo vytvoření liniového znaku z externího znaku. Tato funkce není vždy úplně úspěšná, ale většinou funguje dobře. Ukázka linie z externího zdroje v SLD a CartoCSS nalezneme na Obr. 13. Závěr: Liniové znaky jsou v SLD značně omezené a práce s nimi ve srovnání s CartoCSS je poměrně obtížná. Hlavním problémem SLD je nemožnost nastavení odsazení a vytvoření asymetrické linie. Tab. 3. Možnosti liniových znaků v SLD a CartoCSS.
Testovaná vlastnost
SLD
Doplňkové informace
CartoCSS
Doplňkové informace
Tloušťka Barva Průhlednost Druhy linií (plná barva, čárkovaná, tečkovaná)
ano ano ano
RGB
ano ano ano
RGB, HSL
ano
ano
Odsazení linie od geometrie
ne
ano
Jednoduchá linie Linie tvořená opakováním bodového znaku (omezení dle bodových znaků)
ano
ano
ano
ano
Kombinovaná symetrická
ano
ano
Kombinovaná asymetrická Kombinovaná linie s použitím bodového symbolu Linie definovaná externím symbolem Možnost volby tvaru zakončení linie
ne
ano
ano
ano
0–1
funkční pouze ano (PNG, u rovných linií SVG, JPEG)
ne ano
27
ano
0–1
Obr. 13. Porovnání linie vytvořená externím symbolem v CartoCSS (vlevo) a SLD (vpravo).
4.4.3 Metoda plošných znaků U plošných znaků rozlišujeme parametry výplně a obrysu [4, s. 49]. U výplně se testovaly tyto parametry – opakování bodového symbolu, externí textury, barva a průhlednost výplně. Výsledky porovnání se nacházejí v Tab. 4 a je z nich patrné, že SLD i CartoCSS podporuje většinu testovaných vlastností. Výhodou SLD je snadné nastavení šrafování nebo jiné struktury výplně polygonu opakováním bodového symbolu. Výplně opakováním bodového znaku naopak v CartoCSS není možné přímo nadefinovat, ale je nutné použít externí texturu. Tab. 4. Možnosti plošných znaků v SLD a CartoCSS.
Vlastnost
SLD
Doplňkové informace
CartoCSS
Doplňkové informace
Obrys
ano
omezení viz liniové znaky
ano
omezení viz liniové znaky
Průhlednost
ano
0–1
ano
0–1
ano
RGB
ano
RGB, HSL
ano
omezení viz bodové znaky
ne
ano
PNG, JPEG, SVG
ano
PNG, JPEG
ano
0–1
ano
0–1
Možnosti výplně Barva Výplň opakováním bodového znaku Vyplnění externí texturou Průhlednost externí textury
4.4.4 Popis bodových, liniových a plošných znaků v SLD a CartoCSS Přestože primárním úkolem map je lokalizovat a charakterizovat kartografickými vyjadřovacími prostředky prostorové jevy, přidání popisu je velmi důležitou součástí procesu tvorby mapy, protože popisem identifikujeme prostorové jevy [4, s. 164].
28
Z tohoto důvodu se porovnávaly i možnosti popisu v CartoCSS a SLD, konkrétně prostředky pro automatický popis. Většina obecných vlastností popisu – barva, průhlednost, velikost, druh písma, halo efekt a externí grafika na pozadí je podporována v obou formátech. Rozdíl se ukázal v nastavení proložení znaků a zalamování popisu po určitém znaku, které v SLD oproti CartoCSS není podporováno. Obsahová část popisu může vzniknout z informací v tabulce atributů a zároveň přidáním vlastního textu. Další zkoumané parametry popisu se týkaly jeho umístění v mapě a jsou rozděleny podle druhu kartografických znaků na bodové, liniové a plošné. Společný parametr odsazení popisu od ostatních popisů je podporován v obou formátech. SLD umožňuje umístit popis tak, aby nedošlo k překryvu s jinými geometriemi objektů, což je někdy výhodné pro zdůraznění určitých vrstev. Tab. 5. Parametry popisu v SLD a CartoCSS.
Testované vlastnosti
SLD
Barva textu Průhlednost textu Velikost textu Proložení znaků Halo efekt / průhlednost halo efektu
ano ano ano ne ano / ano
Externí grafika na pozadí popisu / průhlednost
ano / ano
Doplňkové informace
CartoCSS
Doplňkové informace
ano ano ano ano ano / ano
Transformace externí grafiky podle délky popisu Nastavení praporku popisu Nastavení odsazení popisu od jiných popisů Umisťování všech popisů (dovolení překryvu) Popis z více atributových sloupců nebo přidání vlastního textu
ano ne ano ano
omezení viz omezení viz ano / ano bodové znaky bodové znaky ano ne ano ano
ano
ano
Umístění popisu mimo znaky jiných vrstev
ano
Rozdělení popisu na více řádků: a) po určitém znaku b) po určité šířce
a) ne b) ano
bodové, liniové, plošné
ne a) ano, b) ano
Umisťování popisu bodových objektů v SLD a CartoCSS Oba formáty podporují nastavení preferovaného umístění popisu ve vztahu k bodovému znaku, ale CartoCSS navíc umí přednastavit i další pořadí umístění, pokud dojde ke konfliktu s jiným popisem. V SLD lze také povolit alternativní umístění, které už ale bohužel nelze ovlivnit, protože je založeno na automatickém výpočtu. Naopak výhodou SLD je možnost nastavení maximální hodnoty odsazení popisu od bodového znaku. Maximální odsazení se využije, pokud v preferovaném místě popisu je konflikt s jiným popisem. Potom dojde k vyhledávání nového umístění v okolí znaku až do maximální povolené vzdálenosti.
29
Tab. 6. Možnosti umisťování popisu bodových objektů v SLD a CartoCSS.
Testované vlastnosti
SLD
CartoCSS
Umístění od kartografického znaku (vpravo, vlevo, nahoře, dole)
ano
ano
Nastavení pořadí dalších umístění v případě konfliktu s jiným popisem
ne
ano
Nastavení úhlu otočení popisu
ano
ano
Nastavení odsazení popisu od bodového znaku
ano
ano
Nastavení max. odsazení popisu od vztažného bodu (hledá volná místa)
ano
ne
Umisťování popisu liniových znaků v SLD a CartoCSS Umístění popisu pro liniové znaky je na obdobné úrovni u obou formátů. CartoCSS i SLD standardně umisťuje popis do středu liniového objektu, pouze pokud dojde ke konfliktu s jiným popisem, tak se hledá další umístění. V obou je možné nastavit zakřivení popisu podle linie a nastavit hodnotu maximálního zakřivení. Umístění popisu je vždy ve středu liniového objektu. Tab. 7. Možnosti umisťování popisu liniových objektů v SLD a CartoCSS.
Testované vlastnosti
SLD
CartoCSS
Pouze horizontální umístění
ano
ano
Umístění (nad, pod, na) linii
ano
ano
ano / ano
ano / ano
Opakování popisu po určité vzdálenosti
ano
ano
Umístění mimo střed linie (např. na začátek nebo konec linie)
ne
ne
Zakřivení popisu dle linie / moznost max. hodnoty zakřivení
Umisťování popisu plošných znaků v SLD a CartoCSS U plošných znaků se popis umisťuje podobně jako u bodových znaků. Máme zde možnost horizontálního umístění nebo volbu úhlu otočení popisu. Vztažným bodem popisu bývá geometrický střed polygonu. Ze srovnání obou metod vyplynulo, že SLD má oproti CartoCSS navíc volbu umístění, která uvažuje tvar plochy. SLD dokáže umístit popis tak, aby tento tvar plochy respektoval. Srovnání výsledků této funkce pro umístění popisu v SLD s CartoCSS je na Obr. 14. Tato funkce pracuje na základě výpočtu minimálního ohraničujícího obdélníku, do kterého se popis umístí. CartoCSS tento způsob nenabízí, je možné zvolit pouze horizontální umístění nebo úhel otočení popisu.
30
Obr. 14. Porovnání volby umístění popisu plošných znaků v SLD (vlevo) a CartoCSS (vpravo).
4.4.5 Závěr z porovnávání kartografických vyjadřovacích prostředků Na základě porovnávání SLD GeoServeru a CartoCSS lze usuzovat, že oba formáty mají velmi dobré kartografické vyjadřovací prostředky. Největší rozdíl se ukázal na liniových objektech, kde CartoCSS má velkou výhodu v možnostech asymetrických liniových znaků. Druhým rozdílem je, že CartoCSS nemá žádný vzorník pro bodové znaky a spoléhá pouze na dodanou externí grafiku. Oproti tomu SLD nabízí několik základních tvarů, z kterých je navíc možné vytvářet další znaky. SLD i CartoCSS mají možnost popisovat bodové, liniové i plošné znaky. Prostřednictvím CartoCSS získáváme větší kontrolu v umisťování popisů, můžeme například využít nastavení priorit pro různá umístění popisu bodových znaků. GeoServer v SLD stylu nabízí pokročilejší možnosti v oblasti umísťování popisu plošných znaků, ale na druhou stranu tyto výpočty nemůžeme nijak předvídat ani příliš ovlivnit.
4.5
Publikace Map na webu Mapnik, Tilemill, mapové servery nebo jiný software produkuje zdrojová data pro
interaktivní webovou mapu, kterou potřebujeme publikovat koncovým uživatelům. Jednou z možností prezentace je využití jazyka JavaScript, který se používá pro zobrazení dynamického obsahu ve webovém prohlížeči. JavaScript se posílá v HTML souboru ze serveru klientovi do webového prohlížeče klienta, kde dochází k jeho zpracování (Obr. 15). Pro vytvoření mapové aplikace je možné využít například volně dostupnou JavaScriptovou knihovnu OpenLayers nebo knihovnu Leaflet.
31
Obr. 15. Princip klientského skriptu. (Zdroj: Jakpsatweb.cz [41])
4.5.1 OpenLayers OpenLayers je JavaScriptová knihovna, určená k zobrazování map ve webových prohlížečích. Tato knihovna byla vytvořena společností MetaCarta a od roku 2007 ji dále vyvíjí organizace Open Source Geospatial Foundation (OSGeo). OpenLayers je poskytována pod licencí BSD [42]. V současné době je k dispozici stabilní verze 2.13.1 a zároveň je připravována nová verze knihovny OpenLayers 3, která bude kompatibilní s HTML5 a CSS3. Mezi vstupní formáty dat patří GeoRSS, KML, GML, GeoJSON a webová služba WMS nebo WFS. Knihovna má dobře zpracovanou dokumentaci, která je navíc doplněna mnoha praktickými ukázkami. [43] 4.5.2 Leaflet Druhou open source knihovnou je Leaflet, která byla vytvořena Vladimirem Agafonkinem. Tato knihovna není tak obsáhlá jako OpenLayers a v základní podobě má výrazně méně možností. Knihovnu lze doplnit celou řadou rozšíření, které jsou na oficiálním webu1 a získat tak požadovanou funkcionalitu. Leaflet má stejně jako OpenLayers přehlednou dokumentaci, která obsahuje i řadu konkrétních příkladu použití. [44]
1
http://leafletjs.com/
32
5 UKÁZKA KARTOGRAFICKÉ VIZUALIZACE DAT Z OPENSTREETMAP Pro ukázku vizualizace jako téma byla zvolena městská hromadná doprava. První ukázkou je vizualizace schématu nově vzniknuté městské autobusové dopravy v Novém Městě na Moravě. V současné době v Novém Městě na Moravě probíhá zkušební provoz městské dopravy. Mapové podklady, které jsou publikovány, jako oficiální1 mají řadu nedostatků. Na mapě se překrývají trasy linek a zejména v menších měřítkách není vždy na první pohled zřejmá trasa linky, taktéž zde nejsou nijak rozlišeny zastávky jednotlivých linek. Další nevýhodou je, že zastávkám se zobrazuje popis až po kliknutí na znak zastávky. Z pohledu kartografie není správné, že trasy linek překrývají popisy s názvy ulic. Byla proto navržena alternativní ukázka, jak by mohla webová mapa městské dopravy vypadat. Druhou ukázkou je webová mapa noční hromadné dopravy v Brně. Pro obě mapy byly využity stejné postupy. Celá architektura systému pro vytvoření webových map dopravy je znázorněna na Obr. 16. Všechny používané technologie byly popsány v minulých kapitolách, proto jsou následující informace zaměřeny pouze na konkrétní úlohy, které byly provedeny. Navržený systém se dá rozdělit do několika částí, které budou postupně popsány. Náplní první části bylo samotné zpracovávání dat, v druhé proběhlo vytvoření mapových podkladů a ve třetí byly vytvořené mapové podklady nahrány na webový server a zpřístupněny na internetu.
Obr. 16. Architektura systému pro webovou mapu dopravy.
1
http://karta.nmnm.cz/doprava/schema-mestske-autobusove-dopravy/
33
5.1
Zpracování dat V první fázi proběhla analýza dat, kdy se ověřovala dostupnost požadovaných dat.
Přestože projekt OpenStreetMap obsahuje některá data týkající se hromadné dopravy, údaje o trasách autobusových linek neobsahoval. Nejdříve tedy bylo nutné doplnit stažená data vlastními podklady. Došlo k vytvoření tras autobusových linek v Novém Městě na Moravě, které byly zjištěny na základě terénního sběru dat. Autobusové trasy byly uloženy prostřednictvím softwaru JOSM1. Data byla uložena podle existujícího tagovacího schématu pro veřejnou dopravu dostupného na wiki serveru OpenStreetMap2. Všechny silnice, po kterých vede cesta autobusu určité linky, byly sdruženy do nového vztahu s tagem “route=bus“ a “ref=název linky” a zároveň byly do vztahu přidány nové uzly, reprezentující autobusové zastávky. Takto upravená data zatím nebyla nahrána do projektu OpenStreetMap, protože se v současnosti jedná pouze o testovací provoz MHD. Již v průběhu návrhu webové mapy byly některé trasy linek pozměněny. Data pro noční dopravu v Brně musela být taktéž vytvořena, ale došlo pouze k nahrání ukázkové oblasti, protože terénní sběr spolu se zpracováním dat by byl časově náročný a není přímo předmětem této práce. Zpracovaná data OSM byla následně nahrána do PostgreSQL databáze s prostorovým rozšířením PostGIS prostřednictvím nástroje osm2pgsql. Došlo k vytvoření dvou nezávislých databází, jedna pro MHD Nového Města na Moravě a druhá pro MHD Brna. Detailní popis importu a samotné přípravy databázového systému je popsán v příloze 1.
5.2
Vytvoření mapových podkladů V první řadě bylo nutné se zaměřit na účel mapy a zamyslet se, kdo jsou potenciální
uživatelé. Uživatele map hromadné dopravy nejde specifikovat a nemůžeme ani dopředu předpokládat jejich zkušenosti práce s mapami. Cílem tedy bylo navrhnout mapu, ve které se dokáže uživatel rychle zorientovat a získat požadované informace, tedy údaje o zastávce, času odjezdu a trase linky spoje. Mapový podklad byl vytvořen nástrojem Mapnik a údaje o jízdním řádu a zastávkách jsou publikovány prostřednictvím GeoServeru. Důvodem, proč byly podklady vytvořeny prostřednictvím dvou technologií, jsou zejména rozdílné požadavky na aktuálnost dat. GeoServer poskytuje data o aktuálních odjezdech nad mapovým podkladem z Mapniku,
1 2
Java OpenStreetMap Editor (JOSM) – software pro editaci dat projektu OpenStreetMap. http://wiki.openstreetmap.org/wiki/Public_transport
34
který je dopředu vytvořen, a nepředpokládají se jeho časté změny. Tímto postupem došlo ke značnému zrychlení načítání mapy ve webovém prohlížeči. 5.2.1 Vytvoření mapového podkladu Mapnikem Pro vytvoření mapového podkladu bylo nutné zvolit vrstvy, které se v mapě budou zobrazovat a zároveň pro ně připravit vhodnou symboliku v XML stylu. Tento stylový XML soubor byl vygenerován z Tilemillu, kde probíhal samotný návrh mapy. Jednotlivé vrstvy byly načítány v Tilemillu na základě SQL selectu (viz příloha 3) ze zmiňované databáze a definice mapového znaku byla specifikována jazykem CartoCSS. Vrstvy mapy můžeme rozdělit do dvou skupin – vrstvy tematického obsahu a vrstvy topografického podkladu. Na Obr. 17 se nachází návrh znakového klíče. Pro jeho vytvoření bylo nutné navrhnout některé znaky samostatně v grafickém editoru, konkrétně se jedná o znaky bodů zájmu (kostel, nemocnice, vlaková zastávka, autobusové nádraží a supermarket).
Obr. 17. Znakový klíč pro mapu městské autobusové dopravy v Novém Městě na Moravě.
Na ukázce mapového podkladu (Obr. 18) můžeme vidět aplikovaný znakový klíč. Vzhledem k tomu, že autobusy jezdí pouze po dvou linkách, bylo možné využít zmiňovaného odsazení liniového symbolu (viz podkapitola 4.4.2) od jeho geometrie právě u tras linek. Tímto získala každá linka vlastní kartografický znak, což bude přínosem pro uživatele. Samotný CartoCSS styl je přidán na CD-ROM.
35
Obr. 18. Ukázka mapových podkladů autobusové dopravy v Novém Městě na Moravě.
U druhé mapy pro noční dopravu v Brně nemohlo být odsazení využito, protože v některých místech je trasa všech autobusů stejná. Pokud by tedy každá linka autobusu měla vlastní znak, tak by mapa byla nepřehledná. Z toho důvodu v případě této mapy bylo rozlišení tras linek provedeno umístěním názvu linky podél celé trasy autobusu. Při realizaci se jako problematické ukázalo umístění popisu pro autobusové linky. Nejdříve byl popis generován pouze na základě atributů v tabulce planet_osm_line1, kde ovšem pro jednu silnici byla maximálně jedna autobusová linka. Tím docházelo k problémům, že v některých místech se zobrazovaly pouze některé linky a nebylo na první pohled možné určit trasu autobusu. Z tohoto důvodu byla nakonec propojena data z tabulky planet_osm_line s tabulkou planet_osm_rels2 obsahující všechny vztahy. Výsledkem tedy byl dotaz, který vrací pro každou silnici abecedně seřazené linky, které ji využívají. Všechny SQL selecty pro tuto mapu se nacházejí v příloze v 4. Znakový klíč byl navrhnut tak, aby navozoval uživateli mapy pocit, že se jedná o mapu noční dopravy, proto byl použit tmavý podklad. Znakový klíč spolu s ukázkou mapového podkladu je na (Obr. 19). Samotný CartoCSS styl je v příloze 5. Další problém s popisem se projevil na popisech větších rozměrů. Docházelo k umisťování nekompletních popisů, které byly ukončeny na hranici mapového čtverce, který je generován samostatně. Tento problém je v Tilemillu i Mapniku možné eliminovat dvěma způsoby. Prvním je nastavení velikosti bufferu okolo mapového čtverce. Při použití této možnosti je vygenerován mapový čtverec větší o velikost bufferu. Tím je možné zabránit kontaktu popisků s hranicí mapového čtverce a zároveň předejít duplikátním popiskům v sousedních čtvercích. Druhou metodou je nastavení počtu metatile3. 1
Tabulka planet_osm_line vznikla importem dat nástrojem osm2pgsql do databáze (viz Příloha 1). Tabulka planet_osm_rels vznikla stejně jako tabulka planet_osm_line importem dat (viz Příloha 1). 3 https://www.mapbox.com/tilemill/docs/guides/metatiles/ 2
36
Metatile funguje na principu nastavení počtu čtverců, které jsou generovány dohromady a v závěrečné fázi jsou rozděleny na samostatné mapové čtverce. Můžeme tedy například vygenerovat mapové čtverce o velikosti 512x512 pixelů a následně je rozdělit na obvyklé 256 x 256 pixelů velké čtverce. Tilemill používá kombinaci obou metod, bohužel se nepodařilo získat i pro Mapnik skript, který by umožňoval nastavení počtu metatile, proto byla nastavena pouze velikost bufferu okolo čtverce na 256 pixelů. Takto připravený styl byl exportován do XML stylu pro Mapnik, kterým byly vytvořeny mapové čtverce. Postup práce s Mapnikem je popsán v příloze 2.
Obr. 19. Znakový klíč a ukázka mapového podkladu pro noční MHD v Brně.
5.2.2 Data poskytovaná GeoServerem GeoServer zajišťuje pro výslednou mapu poskytování dat se zastávkami a aktuálními informacemi o odjezdech autobusů. Tato data poskytuje prostřednictvím služby WFS. Pro zprovoznění této služby bylo nutné vytvořit na GeoServeru nový datový sklad a přidat novou vrstvu. Výběr dat z databáze je proveden SQL selectem. Vzhledem k tomu, že data jsou publikována ve formátu GeoJSON, bylo nutné tento formát na serveru povolit. 5.2.3 Leaflet Leaflet je JavaScriptová knihovna, která byla použita pro zkombinování předpřipravených podkladů a publikování těchto dat ve webovém prohlížeči. Následující příklady jsou určeny pro mapu autobusové dopravy v Novém Městě na Moravě. Pro mapu MHD v Brně došlo pouze ke změnám nastavení datových zdrojů vrstev, hranic a středu mapy.
37
Pro zobrazení mapy v prohlížeči byl vytvořen HTML soubor obsahující prvek “<map>“, který reprezentuje mapovou část. Samotná mapa je naprogramována v JavaScriptu. Mapa byla přidána kódem s proměnnou „map“, které byl definován požadovaný střed mapy, nastavení přiblížení, přidání vrstev a nastavení maximálních hranic oblasti, v kterých se může uživatel v mapě pohybovat. var map = L.map('map', { center: [49.5631,16.0742], zoom: 15, layers: [nmnm2, WFS], maxBounds: hranice }); Obr. 20. JavaScriptový kód pro nastavení parametrů mapy.
Mapové čtverce z Mapniku byly přidány jako vrstva s názvem „nmnm“ (viz Obr. 21). Vrstvě byly nastaveny hranice přiblížení, cesta k samotným podkladům a odkaz na projekt OpenStreetMap. var nmnm = L.tileLayer( 'nmnm//{z}/{x}/{y}.png', { attribution: '© ' + mapLink + ' Přispěvatelé', maxZoom: 18, minZoom: 15, }); Obr. 21. Přidání vrstvy mapového podkladu z Mapniku.
Přístup k WFS službě z GeoServeru byl realizován AJAXem. Data jsou z GeoServeru požadovaná dotazem GetFeature, který má parametry s požadavkem na vrstvu, maximální počet prvků a formát požadovaných dat (Obr. 22). Návratová hodnota ze serveru se používá jako vstupní parametr funkci loadGeoJson, jejímž cílem je přidat do vrstvy s názvem WFS geografické souřadnice zastávek spolu s časy odjezdů. Časy odjezdů jsou v mapě zobrazovány vždy po kliknutí na znak zastávky. Na závěr byl do mapy přidán ovládací prvek, který umožňuje zobrazit legendu k mapě. $.ajax({ url : "https://geoserver4ludvikadamec.rhcloud.com/geoserver/cite/ows?service=WFS&version=1.0.0&request=GetFeature&type Name=cite:mhd&maxFeatures=200&outputFormat=text/javascript&format_options=callback:getJson", dataType : 'jsonp', jsonpCallback : 'getJson', success : loadGeoJson }); Obr. 22. Dotaz na GeoServer pro získání dat o zastávkách autobusů.
Výsledná
mapová
aplikace
OpenShift1 a je v současnosti 1
byla
dostupná
nahrána na
odkaze
https://www.openshift.com/
38
na
webový
server
projektu
www.ludvikadamec.cz/nmnm.html
a www.ludvikadamec.cz/brno.html, zároveň byla nahrána na přiložené CD-ROM. Ukázka webových map byla přidána také do příloh (příloha 6 a příloha 7).
39
6 ZÁVĚR V bakalářské práci byla provedena analýza dat z projektu OpenStreetMap. Byly navrženy možnosti získání, zpracování a ukládání těchto dat. Dále byla provedena rešerše možných způsobů kartografické vizualizace pro webové prostředí při využití open source technologií. V této rešerši bylo volně navázáno na článek zabývající se kartografickými možnostmi SLD (Styled Layer Decriptor) a MapServeru – Comparison of Styled Layer Descriptor Specification and MapFile Format in Light of Cartographic Visualization [7]. Tento článek porovnával kartografické možnosti SLD s MapFile stylem pro MapServer. Autor v článku zmínil rozdíly obou stylů pro bodové, liniové a plošné znaky. V této bakalářské práci došlo k porovnání stylu CartoCSS a SLD stylu GeoServeru. Stejně jako ve zmíněném článku byl důraz kladen na kartografické vyjadřovací prostředky, konkrétně na bodové, liniové a plošné znaky, ale navíc byly testovány i možnosti popisu pro všechny druhy znaků. Z tohoto srovnání vyplynulo, že oba formáty mají velmi dobré kartografické vyjadřovací prostředky. Nejvýznamnějším zjištěným rozdílem je možnost odsazení znaku od geometrie pro liniové znaky v CartoCSS, což v SLD GeoServeru není podporováno. Tato funkce umožňuje navržení asymetrických linií. Druhým významným rozdílem je, že CartoCSS oproti SLD GeoServeru nemá žádný vzorník pro bodové znaky a spoléhá pouze na dodanou externí grafiku.
Prostřednictvím CartoCSS získáváme větší kontrolu v
umisťování popisů, můžeme například využít nastavení priorit pro různá umístění popisu bodových znaků. GeoServer v SLD naopak nabízí pokročilejší možnosti v oblasti umísťování popisu plošných znaků. Významný rozdíl se také projevil v efektivitě ukládání dat, kterou můžeme poznat z ukázky identického kartografického stylu na Obr. 11 pro CartoCSS a Obr. 12 pro SLD GeoServeru. Z těchto srovnání je evidentní, že CartoCSS je mnohem praktičtější a efektivnější. V praktické části práce byly navrženy dvě kartografické vizualizace z dat OpenStreetMap. První je mapa pro městskou autobusovou dopravu v Novém Městě na Moravě a druhá je mapa noční hromadné dopravy v Brně. Pro vygenerování mapových podkladů byl použit GeoServer a kartografický nástroj Mapnik. Webová mapa byla z těchto podkladů vytvořena JavaScriptovou knihovnou Leaflet. Do budoucna by bylo vhodné se zaměřit v případě mapy noční dopravy v Brně na návrh dalších úrovní přiblížení mapy. Dále by bylo potřeba získat podkladová data a nahrát je do databáze projektu OpenStreetMap a tím rozšířit zájmovou oblast na 40
kompletní trasy autobusů. U obou map by bylo možné vylepšit umísťování popisu, zejména popis ulic není v současnosti vždy optimálně vykreslen. V mapě městské autobusové dopravy Nového Města na Moravě by bylo nutné aktualizovat trasy linek, protože v průběhu psaní práce byly změněny a jedna linka byla navíc přidána. Na základě provedených úloh je možné říct, že kartografická vizualizace z dat projektu OpenStreetMap ve spojení s open source technologiemi má široké možnosti využití a bude mít v budoucnu určitě důležitý význam.
41
SEZNAM POUŽITÉ LITERATURY 1.
BROWN, A. A KRAAK, M. J. Web Cartography : developments and prospects. London: Taylor & Francis, 2001, 213 s.. ISBN 0-7484-0869-X.
2.
CARTWRIGHT, W. PETERSON, M. P. GARTNER, G. Multimedia Cartography [Online]. 2nd ed. Berlin: Springer, 2007, 546 s.. ISBN 978-3-540-36651-5.
3.
DRÁPELA, M.V. Vybrané kapitoly z kartografie. Brno: Univerzita J.E. Purkyně v Brně, 1983, 128 s..
4.
VOŽENÍLEK, V. A KAŇOK, J. Metody tematické kartografie: vizualizace prostorových jevů. 2.vyd. Olomouc: Univerzita Palackého v Olomouci pro katedru geoinformatiky, 2011, 216 s.. ISBN 978-80-244-2790-4.
5.
PETERSON, G. GIS cartography: a guide to effective map design. CRC Press, 2009, 227 s.. ISBN 14-200-8213-2.
6.
OBE, R. HSU, L. PostGIS in Action. London: Manning Publications Co. 2011, 520 s.. ISBN 9781935182269.
7.
KOZEL JIŘÍ. Comparison of Styled Layer Descriptor Specification and MapFile Format in Light of Cartographic Visualization. Brno: Masaryk University, 2008. ISBN 978-80-210-4600-9.
8.
OPEN GEOSPATIAL CONSORTIUM. Styled Layer Descriptor Implementation Specification. 2002, 117 s.. OGC 02-070. Dostupné také z: http://www.opengeospatial.org/standards/sld
9.
OPEN GEOSPATIAL CONSORTIUM INC. In: Symbology Encoding Implementation Specification Version 1.1.0. revision 4. 2006, s. 64 [cit. 2014-03-13]. OGC 05-077r4. Dostupné z: http:// www.opengeospatial.org/standards/se
10. MASSGIS. GeoServer - WMS - Styled Layer Descriptor - SLD [online]. 2012 [cit. 2014-03-15]. Dostupné z: https://wiki.state.ma.us/confluence/display/massgis/GeoServer+-+WMS++Styled+Layer+Descriptor+-+SLD 11. CHRISTL, A. Cartographical Symbol Construction with MapServer. MapServer [online]. [cit. 2014-04-18+. Dostupné z: http://mapserver.org/mapfile/symbology/construction.html 12. OPEN GEOSPATIAL CONSORTIUM. OGC KML. 2008 [cit. 2015-03-22]. OGC 07-147r2. Dostupné z: http://www.opengeospatial.org/standards/kml 13. GOOGLE. KML Reference [online]. [cit. 2014-03-23+. Dostupné z: https:// developers.google.com/kml/documentation/kmlreference?hl=cs 14. OPENSTREETMAP. Wiki - WikiProject Czech Republic [online]. 2014 [cit. 2014-03-25]. Dostupné z: http://wiki.openstreetmap.org/wiki/WikiProject_Czech_Republic/freemap 15. RAMM, F. TOPF, J. CHILTON, S. OpenStreetMap: Using and Enhancing the Free Map of the World. Cambridge (England): UIT Cambridge, 2010, 352 s.. ISBN 978-1-906860-11-0. 16. BÁRTA, D. Projekt Open Street Mapping z pohledu Geoinformatika. 2014. Vysoká škola báňská - Technická univerzita Ostrava, Hornicko-geologická fakulta. Vedoucí práce Jan Stankovič *cit. 2014-02-10+. Dostupné z: http://theses.cz/id/m8nrfq/ 17. LANDA, M. Prototyp turistického systému založeného na datech OpenStreetMap. 2014. Diplomová práce. Fakulta stavební / Geodézie a kartografie *cit. 2014-03-15+. Dostupné z:
42
http://geo.fsv.cvut.cz/proj/dp/2014/chrudos-vorlicek-dp-2014.pdf 18. TESAŘ, M. Vykreslovací systém MTB map pro OpenStreetMap. 2010. Bakalářská práce. Masarykova univerzita, Fakulta informatiky. Vedoucí práce Petr Holub *cit. 2013-12-18]. Dostupné z: http://is.muni.cz/th/256369/fi_b/ 19. OPENSTREETMAP. Wiki [online]. 2014 [cit. 2014-03-25+. Dostupné z: http://en.wikipedia.org/ wiki/OpenStreetMap 20. OPENSTREETMAP [online]. 2014 [cit. 2013-11-15+. Dostupné z: http:// www.openstreetmap.org/ 21. ČÚZK. Geoportál [online]. [cit. 2014-03-25+. Dostupné z: http://geoportal.cuzk.cz/ 22. OPEN DATA COMMONS. Open Database License (ODbL) v1.0 [online]. 2014 [cit. 2014-03-25]. Dostupné z: http://opendatacommons.org/licenses/odbl/1.0/ 23. OPENSTREETMAP. Copyright and License *online+. 25. 3. 2014. Dostupné také z: http:// www.openstreetmap.org/copyright 24. OPENSTREETMAP. Wiki - PBF Format [online]. 12. 11. 2013 [cit. 2014-03-25+. Dostupné z: http://wiki.openstreetmap.org/wiki/PBF_Format 25. OPENSTREETMAP. Wiki - Planet.osm [online]. 25. 3. 2014 [cit. 2014-03-03+. Dostupné z: http:/ /wiki.openstreetmap.org/wiki/Planet.osm 26. POSTGIS. Documentation manual [online]. [cit. 2014-20-01+. Dostupné z: http:// postgis.refractions.net/documentation/manual-1.3SVN/ch04.html 27. OPEN GEOSPATIAL CONSORTIUM. Simple Feature Access [online]. 28. 5. 2011 [cit. 2014-0307+. Dostupné z: http://www.opengeospatial.org/standards/sfa 28. Český překlad licence GNU Lesser General Public License [online]. 3. 6. 2007 [cit. 2014-03-25]. Dostupné z: http://www.lgpl.cz/cesky--preklad-licence--gnu-lesser--general-public-license--v3-0.php 29. GITHUB. Mapnik Wiki [online]. 2014 [cit. 2014-02-10+. Dostupné z: https://github.com/ mapnik/mapnik/wiki 30. GITHUB. Mapnik Wiki. XMLConfigReference [online]. 2013. Dostupné také z: https:// github.com/mapnik/mapnik/wiki/XMLConfigReference 31. MAPBOX. Tilemill Exporting [online]. [cit. 2014-04-02+. Dostupné z: https:// www.mapbox.com/tilemill/docs/manual/exporting/ 32. MAPBOX. Tilemill Documentation [online]. [cit. 2014-02-15+. Dostupné z: https:// www.mapbox.com/tilemill/docs/manual/ 33. MAPBOX. CartoCSS Reference [online]. [cit. 2014-03-26+. Dostupné z: https:// www.mapbox.com/carto/api/2.3.0/ 34. IACOVELLA, S. YOUNGBLOOD, B. GeoServer beginner's guide: share and edit geospatial data with this open source software server. Birmingham: Packt Publishing Ltd. 2013, 326 s.. ISBN 978-1-84951-668-6. 35. GEOSERVER. Documentation SLD reference [online]. [cit. 2014-10-03+. Dostupné z: http:// docs.geoserver.org/stable/en/user/styling/sld-reference/index.html#sld-reference
43
36. GEOSERVER. GeoServer User Manual [online]. [cit. 2014-03-05+. Dostupné z: http:// docs.geoserver.org/stable/en/user/ 37. MAPSERVER. About [online]. [cit. 2014-04-01+. Dostupné z: http://mapserver.org/about.html 38. MAPSERVER. MapServer 6.4.1 Documentation [online]. 2014 [cit. 2014-03-17+. Dostupné z: http://mapserver.org/documentation.html 39. DOBEŠOVÁ, Z. Hodnocení kartografické funkcionality geografických informačních systémů: Evaluation of cartographic functionality in geographic information systems. Olomouc: Univerzita Palackého v Olomouci, 2009, 132 s.. ISBN 978-80-244-2353-1. 40. THE OFFICE OF GEOGRAPHIC INFORMATION (MASSGIS). Wiki - GeoServer - WMS - Styled Layer Descriptor - SLD [online]. 2012 [cit. 2014-02-26+. Dostupné z: https://wiki.state.ma.us/ confluence/display/massgis/GeoServer+-+WMS+-+Styled+Layer+Descriptor+-+SLD 41. JAKPSATWEB.CZ. JavaScript [online]. [cit. 2014-03-28]. Dostupné z: http:// www.jakpsatweb.cz/javascript/ 42. ROOT.CZ. BSD License [online]. [cit. 2014-03-27+. Dostupné z: http://www.root.cz/specialy/ licence/bsd-license/ 43. OPENLAYERS.ORG. OpenLayers Documentation [online]. [cit. 2014-03-27+. Dostupné z: http:// docs.openlayers.org/ 44. LEAFLETJS.COM. An Open-Source JavaScript Library for Mobile-Friendly Interactive Map [online]. [cit. 2014-03-28+. Dostupné z: http://leafletjs.com/ 45. WORLD WIDE WEB CONSOTIUM. Extensible Markup Language (XML) 1.1 (Second Edition) [online]. 2006 [cit. 2014-03-07+. Dostupné z: http://www.w3.org/TR/xml11/ 46. GeoJSON [online]. 2008 [cit. 2014-04-10+. Dostupné z: http://www.geojson.org
44
SEZNAM POUŽITÝCH ZKRATEK CSS
Cascading Style Sheets
ČUZK
Český úřad zeměměřický a katastrální
GeoJSON
Geo JavaScript Object Notation
GML
Geography Markup Language
GPS
Global Positioning System
HTML
HyperText Markup Language
HSL
Hue Saturation Lightness
JOSM
Java OpenStreetMap Editor
JPEG
Joint Photographic Experts Group
KML
Keyhole Markup Language
MTB
Mountain Bike
ODbL
Open Database License
OGC
Open Geospatial Consortium
OSGeo
Open Source Geospatial Foundation
OSM
OpenStreetMap
PBF
Protocolbuffer Binary Format
POI
Point Of Interest
PNG
Portable Network Graphic
RGB
Red, Green, Blue
SHP
Shapefile
SE
Symbology Encoding
SLD
Styled Layer Descriptor
SQL
Structured Query Language
SVG
Scalable Vector Graphics
TIFF
Tag Image File Format
ÚHUL
Ústav pro hospodářskou úpravu lesů
WFS
Web Feature Service
WMS
Web Map Service
XML
Extensible Markup Language
ZABAGED
Základní báze geografických dat
45
SEZNAM OBRÁZKŮ Obr. 1.
Datový model projektu OpenStreetMap. Upraveno podle *15, s. 52+
13
Obr. 2.
Ukázka OSM XML schématu.
14
Obr. 3.
Uzel v OSM XML, který reprezentuje železniční zastávku.
14
Obr. 4.
Uzavřená cesta v OSM XML, která reprezentuje budovu.
14
Obr. 5.
Vztah v OSM XML reprezentující trasu a zastávky trolejbusové linky.
15
Obr. 6.
Tagy v OSM XML reprezentující silnici třetí třídy.
15
Obr. 7.
Rozdílná úroveň zmapování v obci Uhřice a Ždánice.
16
Obr. 8.
Schéma Mapnik XML stylu.
20
Obr. 9.
Ukázka vrstvy silnic v Mapnik XML.
21
Obr. 10. Ukázka stylu silnic v Mapnik XML.
21
Obr. 11. Ukázka stylu vrstvy silnic v CartoCSS.
22
Obr. 12. Struktura SLD stylu pro GeoServer.
24
Obr. 13. Porovnání linie vytvořená externím symbolem v CartoCSS a SLD.
28
Obr. 14. Porovnání volby umístění popisu plošných znaků v SLD a CartoCSS.
31
Obr. 15. Princip klientského skriptu.
32
Obr. 16. Architektura systému pro webovou mapu dopravy.
33
Obr. 17. Znakový klíč pro mapu městské dopravy v Novém Městě na Moravě.
35
Obr. 18. Ukázka mapových podkladů autobusové dopravy v Novém Městě na Moravě. 36 Obr. 19. Znakový klíč a ukázka mapového podkladu pro noční MHD v Brně.
37
Obr. 20. JavaScriptový kód pro nastavení parametrů mapy.
38
Obr. 21. Přidání vrstvy mapového podkladu z Mapniku.
38
Obr. 22. Dotaz na GeoServer pro získání dat o zastávkách autobusů.
38
46
SEZNAM TABULEK Tab. 1.
Seznam základních poskytovatelů dat OpenStreetMap.
18
Tab. 2.
Možnosti bodových znaků v SLD a CartoCSS.
26
Tab. 3.
Možnosti liniových znaků v SLD a CartoCSS.
27
Tab. 4.
Možnosti plošných znaků v SLD a CartoCSS.
28
Tab. 5.
Parametry popisu v SLD a CartoCSS.
29
Tab. 6.
Možnosti umisťování popisu bodových objektů v SLD a CartoCSS.
30
Tab. 7.
Možnosti umisťování popisu liniových objektů v SLD a CartoCSS.
30
47
SEZNAM PŘÍLOH 1. Příprava a import dat do databáze PostgreSQL 2. Instalace a práce s nástrojem Mapnik 3. SQL dotazy pro vrstvy městské autobusové dopravy v Novém Městě na Moravě 4. SQL dotazy pro vrstvy noční MHD v Brně 5. CartoCSS styl pro mapu noční hromadné dopravy v Brně 6. Ukázka mapy městské autobusové dopravy v Novém Městě na Moravě 7. Ukázka mapy noční MHD v Brně 8. CD-ROM /CartoCSS_NMnM CartoCSS styl pro mapu městské autobusové dopravy v Novém Městě na Moravě /Mapa_NMnM
Webová aplikace mapy městské autobusové dopravy v Novém Městě na Moravě
/Mapa_Brno
Webová aplikace mapy noční hromadné dopravy v Brně
/Tištěné_přílohy
Přílohy 3 – 7
48
PŘÍLOHY
PŘÍLOHA 1 Příprava databáze PostgreSQL s rozšířením PostGIS Pro vytvoření databáze musíme mít nainstalovaný PostgreSQL s rozšířením PostGIS. Naši databázi vytvoříme prostřednictvím nástroje PgAdmin III, který jsme získali při instalaci PostgreSQL. Jako šablonu nové databáze zvolíme postgres. Po vytvoření databáze si nainstalujeme rozšíření postgis, postgis_topology a hstore. Rozšíření hstore nám zavede nový datový typ, který nám později umožní import dat jako složené hodnoty do sloupce relační tabulky *http://www.postgresql.org/docs/9.2/static/hstore.html]. Import dat do databáze PostgreSQL Pro importování dat do databáze
je
vhodný
nástroj
Osm2pgsql
[http://wiki.openstreetmap.org/wiki/Osm2pgsql+, existuje ještě Osmosis nebo Impoosm, který je ovšem určen pro operační systém Linux. Osm2pgsql není nutné instalovat, stačí jej stáhnout z wiki.openstreetmap.org/wiki/Osm2pgsql#Windows a rozbalit do požadované složky. V jedné z rozbalených složek se nachází soubor osm2pgsql.exe, k tomuto souboru nastavíme novou systémovou proměnnou se jménem Path. Dále si stáhneme standardní styl pro import dat s názvem default.style z https://github.com/openstreetmap/osm2pgsql a uložíme ho do stejné složky společně se souborem OSM XML, který budeme nahrávat do databáze. Osm2psql se ovládá v příkazovém řádku, kde je nutné se nejdříve přesunout na místo uložení souboru OSM XML. Příkaz obsahuje parametry umístění stylu (-S), volby databáze (d), jména uživatele databáze (-U) a volbu tzv. slim módu, který umožňuje spolehlivěji importovat data. Normální mód je omezen velikostí paměti RAM a nepodporuje některé důležité
funkce,
proto
je
doporučováno
použití
slim
módu1
[http://wiki.openstreetmap.org/wiki/Osm2pgsql]. osm2pgsql -S default.style -d názevDatabáze -U uživatelDatabáze -P 5432 -s názevImportovanéhoOSM.osm
Po úspěšném importu dat dojde v databázi k vytvoření sedmi tabulek. Tři z nich obsahují původní data (planet_osm_nodes, planet_osm_ways a planet_osm_rels) a čtyři tabulky jsou odvozené (planet_osm_line, planet_osm_point, planet_osm_polygon, planet_osm_roads).
1
Slim mód při importu používá pro přechodné skladování dat tabulky uložené na pevném disku. Normální mód používá paměť RAM, která nemusí mít dostatečnou kapacitu.
PŘÍLOHA 2 Instalace nástroje Mapnik Instalace Mapniku pro Windows je nejjednodušší stažením instalačního archivu z http://mapnik.org/download/. Stažený soubor rozbalíme do C:\mapnik-v2.2.0\ a přidáme systémovou proměnnou s umístěním C:\mapnik-v2.2.0\lib. K vygenerování mapových čtverců
z dat
OpenStreetMap
je
vhodné
si
stáhnout
python
skripty
z http://svn.openstreetmap.org/applications/rendering/mapnik/, které nám usnadní práci s Mapnikem. K samotnému vygenerování použijeme tyto skripty: generate_images.py (vykreslení jednoho obrázku) nebo generate_tiles.py (vykreslí hromadně mapové čtverce). Pro vykreslení mapy musíme jako vstupní informace přidat XML soubor s parametry definující styl mapy. *https://github.com/mapnik/mapnik/wiki+
Práce s nástrojem Mapnik S Mapnikem lze pracovat prostřednictvím pythonu. Konkrétně byly použity skripty, které byly zmíněny v části instalace Mapniku. Skriptem generate_image.py, který byl upraven pro lokální nastavení (změna hranic oblasti a nastavení stylu), byla vygenerována mapa. Tento skript je vhodné využít před vytvářením samotných mapových čtverců, protože si na něm můžeme ověřit funkčnost XML stylu a Mapniku. Pro vygenerování mapových čtverců bylo nutné nejdříve využít skriptu generate_xml.py. Skriptem generate_tiles.py, který byl stejně jako generate_image.py upraven pro lokální nastavení, byly získány samotné mapové čtverce. Kompletní informace o těchto použitých skriptech je možné získat na úložišti projektu OpenStreetMap 1.
1
http://svn.openstreetmap.org/applications/rendering/mapnik/README
PŘÍLOHA 3 SQL dotazy vrstev pro mapu městské autobusové dopravy v Novém Městě na Moravě --------------------------------------------------------------------------POI SELECT way, name, amenity,railway,shop FROM planet_osm_point WHERE amenity IS NOT NULL or railway in('station','halt') or shop='supermarket' --------------------------------------------------------------------------popis_lokalit SELECT way, place AS type, name FROM planet_osm_point WHERE place in ('city','town','village','locality') --------------------------------------------------------------------------silnice_popisky SELECT way,highway, name FROM planet_osm_line where highway IS NOT NULL --------------------------------------------------------------------------vodni_plochy SELECT way, name FROM planet_osm_polygon WHERE "natural" IN ('water', 'pond') OR waterway IN ('basin','canal','mill_pond','pond','riverbank','stream') --------------------------------------------------------------------------bus_linka_1 SELECT way FROM planet_osm_line WHERE route='bus' AND ref='1' --------------------------------------------------------------------------bus_linka_2 SELECT way FROM planet_osm_line WHERE route='bus' AND ref='2' --------------------------------------------------------------------------vodni_toky_popis SELECT way, waterway AS type, name FROM planet_osm_line WHERE waterway IN ('river', 'canal', 'stream', 'ditch', 'drain') --------------------------------------------------------------------------silnice_outline SELECT way,highway FROM planet_osm_line where highway IS NOT NULL --------------------------------------------------------------------------silnice_inline SELECT way,highway FROM planet_osm_line where highway IS NOT NULL --------------------------------------------------------------------------zeleznice SELECT way, railway FROM planet_osm_line where railway='rail' --------------------------------------------------------------------------budovy SELECT way ,building, amenity FROM planet_osm_polygon WHERE building NOT IN ('0','false', 'no') UNION ALL SELECT way, building, amenity FROM planet_osm_polygon WHERE amenity IS NOT NULL and amenity!='parking' --------------------------------------------------------------------------landuse SELECT way, COALESCE(landuse,leisure,"natural",amenity) AS type FROM planet_osm_polygon ORDER BY way_area DESC -------------------------------------------------------------------------
-------------------------------------------------------------------------- Zastávky a časy odjezdů autobusů (SQL view pro GeoServer) SELECT osm_id, z.name, string_agg(to_char(cas, 'HH24:MI'),', ' ORDER BY cas)AS cas, linka, way FROM (SELECT name,way, osm_id FROM planet_osm_point WHERE tags->'bus'='yes') AS z LEFT JOIN (SELECT DISTINCT x.zastavka_nazev, x.linka, cas FROM (SELECT zastavka_nazev, linka FROM rad) AS x LEFT OUTER JOIN (SELECT cas, zastavka_nazev,linka FROM rad WHERE cas > CURRENT_TIME) AS z ON x.zastavka_nazev=z.zastavka_nazev AND x.linka=z.linka ORDER BY cas) AS r ON z.name=r.zastavka_nazev GROUP BY z.name, r.linka,way, osm_id -------------------------------------------------------------------------
PŘÍLOHA 4 SQL dotazy pro vrstvy noční MHD v Brně -------------------------------------------------------------------------- zastavky SELECT way, name, highway,railway FROM planet_osm_point WHERE railway='tram_stop' ------------------------------------------------------------------------/*Vytvoření pohledu do databáze se seznamem cest, obsažených ve vztahu některé linky nočního spoje – relační schéma (osm_id, ref, way) */ CREATE OR REPLACE VIEW cestyMhd AS SELECT DISTINCT osm_id, string_agg(cislo, ' ' ORDER BY cislo) AS ref, way FROM planet_osm_line RIGHT OUTER JOIN (SELECT substr(cesta, 2,100), cislo FROM (SELECT DISTINCT cesta, unnest(tags) AS cislo FROM (SELECT DISTINCT unnest(members) AS cesta, tags FROM (SELECT * FROM planet_osm_rels WHERE id IN(SELECT id FROM (SELECT id, unnest(tags) AS a FROM planet_osm_rels) AS vztahy WHERE a ='ref')) AS spravneVztahy) AS IDclenuVztahuTagy) AS IDclenuTagySamostatne WHERE cislo in('n89','n90','n91','n92','n93','n94','n95','n96','n97','n98','n99')) As IDclenuCislaBusu ON osm_id::text=substr WHERE osm_id IS NOT NULL GROUP BY osm_id, substr, way ORDER BY osm_id -------------------------------------------------------------------------- silnice_popisky SELECT way,highway, name, osm_id, ref FROM planet_osm_line where highway IS NOT NULL and osm_id NOT IN(SELECT osm_id FROM cestyMhd) ORDER BY ref -------------------------------------------------------------------------- silnice_popisky_s_mhd SELECT way,highway, osm_id, name FROM planet_osm_line WHERE highway IS NOT NULL and osm_id IN (SELECT osm_id FROM cestyMhd) ORDER BY z_order -------------------------------------------------------------------------- trasy_autobusu SELECT * FROM cestyMhd -------------------------------------------------------------------------- trasy_autobusu_popis SELECT * FROM cestyMhd -------------------------------------------------------------------------- budovy SELECT way ,building AS type FROM planet_osm_polygon WHERE building NOT IN ('0','false', 'no') -------------------------------------------------------------------------- silnice SELECT way,highway FROM planet_osm_line where highway IS NOT NULL ORDER BY z_order -------------------------------------------------------------------------
--------------------------------------------------------------------------GeoServer - zastávky CREATE VIEW busZastav AS SELECT DISTINCT name,osm_id, string_agg(cislo, ' ' ORDER BY cislo) AS ref, way FROM planet_osm_point RIGHT OUTER JOIN (SELECT substr(cesta, 2,100), cislo FROM (SELECT DISTINCT cesta, unnest(tags) AS cislo FROM (SELECT DISTINCT unnest(members) AS cesta, tags FROM (SELECT * FROM planet_osm_rels WHERE id IN(SELECT id FROM (SELECT id, unnest(tags) AS a FROM planet_osm_rels) AS vztahy WHERE a ='ref')) AS spravneVztahy) AS IDclenuVztahuTagy) AS IDclenuTagySamostatne WHERE cislo in('n89','n90','n91','n92','n93','n94','n95','n96','n97','n98','n99')) As IDclenuCislaBusu ON osm_id::text=substr WHERE osm_id IS NOT NULL GROUP BY osm_id, name, substr, way ORDER BY osm_id -------------------------------------------------------------------------
PŘÍLOHA 5 CartoCSS styl pro mapu noční hromadné dopravy v Brně ------------------------------------------------------------------------Map { background-color: #272733; buffer-size: 512; } #trasy_autobusu { line-width:2; line-color: #ceb019; } #trasy_autobusu_popis { text-name:'[ref]'; text-face-name: "DejaVu Sans Book"; text-placement:line; text-fill: #ceb018; text-halo-fill: #080a1f; text-min-distance:100; text-size:11.5; text-halo-radius: 2; text-character-spacing: 1.2; text-avoid-edges: true; } #budovy { [zoom>15]{ ::outline { line-color: #1e1e22; line-width: 2; line-join: round; } } [zoom>15]{ polygon-fill: #3a3d4a; } } #silnice { line-color:#080a1f; line-join: round; line-cap: round; line-width: 1.5; [highway='footway'],[highway='path']{ line-dasharray: 1,2,0; line-width: 1.2; } [zoom=18]{ [highway='primary'], [highway='primary_link']{line-width:20;} [highway='secondary'],[highway='tertiary'],[highway='secondary_link'] {line-width:16;} [highway='residential'], [highway='pedestrian'] {line-width:14;} [highway='service']{line-width:12;} } [zoom=17]{ [highway='primary'], [highway='primary_link']{line-width:18;} [highway='secondary'],[highway='tertiary'],[highway='secondary_link'] {line-width:14;}
[highway='residential'], [highway='pedestrian']{line-width:12;} [highway='service']{line-width:2;} } [zoom=16]{ [highway='primary'], [highway='primary_link']{line-width:10;} [highway='secondary'],[highway='tertiary'],[highway='secondary_link'] {line-width:8;} [highway='residential'], [highway='pedestrian']{line-width:6;} [highway='service']{line-width:2;} } } #silnice_popisky, #silnice_popisky_s_mhd { text-name:'[name]'; text-face-name: "DejaVu Sans Book"; text-placement:line; text-fill: #c7cad2; text-halo-fill: #080a1f; text-min-distance:300; text-character-spacing: 1.2; text-avoid-edges: true; text-size:9; text-halo-radius:2; [highway='primary'], [highway='secondary'],[highway='tertiary']{ text-size:11; } [zoom>16]{ text-size:10; [highway='primary'], [highway='secondary'],[highway='tertiary']{ text-size:12; } } } #silnice_popisky_s_mhd { text-dy: -11; } #popis_lokalit::text{ text-name: "[name]"; text-face-name: "Arial Bold"; text-placement-type: simple; text-placements: "SW,SE"; text-size: 13; text-halo-radius: 3; text-character-spacing: 4; text-fill: #c2c8df; text-halo-fill: #24242e; [zoom>15]{text-size: 18;} [zoom>16]{text-size: 22;} [zoom>17]{text-size: 26;} }
PŘÍLOHA 6 Ukázka mapy městské autobusové dopravy v Novém Městě na Moravě
PŘÍLOHA 7 Ukázka mapy noční MHD v Brně