1 MASARYKOVA UNIVERZITA Přírodovědecká fakulta Geografický ústav Lukáš HERMAN NÁVRH DISTRIBUOVANÉHO SYSTÉMU ZNAČKOVÝCH KLÍČŮ PROSTŘEDNICTVÍM SVG A XML...
MASARYKOVA UNIVERZITA Přírodovědecká fakulta Geografický ústav
Lukáš HERMAN
NÁVRH DISTRIBUOVANÉHO SYSTÉMU ZNAČKOVÝCH KLÍČŮ PROSTŘEDNICTVÍM SVG A XML
Bakalářská práce
Vedoucí práce: Mgr. Karel Staněk, Ph.D.
Brno 2009
Jméno a příjmení autora:
Lukáš Herman
Název bakalářské práce:
Návrh distribuovaného systému značkových klíčů prostřednictvím SVG a XML
Název v angličtině:
Proposal of a Distributed System of Map Symbol Sets Based on XML dialects
Studijní obor :
Geografická kartografie a geoinformatika
Vedoucí bakalářské práce:
Mgr. Karel Staněk, PhD.
Rok obhajoby:
2009
Anotace v češtině: Hlavním tématem této práce je návrh distribuovaného systému značkových klíčů na zvolené geografické téma. Navrhovaný systém se skládá ze dvou částí – grafických znaků a dat uloţených v XML. Práce také obsahuje srovnání moţností jednotlivých XML dialektů (SVG, KML a WMS SLD) pro tvorbu mapových znaků. Důleţitou částí je implementace návrhu za pouţití zvoleného XML dialektu a jeho znázornění v mapě.
Anotace v angličtině: The main topic of this bachelor thesis is a proposal of a distributed system of map symbols on geographical theme. The system is composed of graphic symbols and data stored in XML document. This work contains comparation of possibilities some XML dialects (SVG, KML and WMS SLD) for making map symbols. An important part is using chosen dialect to implement the proposed map symbol set and showing this set in the map.
Klíčová slova v češtině: mapové znaky, webová kartografie, XML, SVG, KML, WMS SLD, JavaScript
Klíčová slova v angličtině: map symbols, web cartography, XML, SVG, KML, WMS SLD, JavaScript
Masarykova univerzita Přírodovědecká fakulta
ZADÁNÍ BAKALÁŘSKÉ PRÁCE Student: Studijní program: Studijní obor:
Lukáš Herman Geografie a kartografie Geografická kartografie a geoinformatika
Ředitel geografického ústavu Přírodovědecké fakulty MU Vám ve smyslu Studijního a zkušebního řádu MU určuje bakalářskou práci s tématem:
Návrh distribuovaného systému značkových klíčů prostřednictvím SVG a XML Proposal of a Distributed System of Map Symbol Sets Based on XML dialects
Zásady pro vypracování: Cílem práce je návrh distribuovaných značkových klíčů na bázi XML jazyků (SVG, KML a WMS SLD). Systém by měl slouţit pro generování tématického mapového obsahu na základě interpretace hodnot streamovaných v XML formátu. Značky v klíči by měly být parametrizovatelné a skladebné. Postup prací: 1. Poţadavky definice kartografických značek 2. Moţnosti vybraných XML dialektů pro definici značkových klíčů 3. Volba geografického tématu a návrh znaků 4. Návrh transformace mezi XML popisem a značkovým klíčem 5. Implementace návrhu
Rozsah grafických prací:
podle potřeby
Rozsah průvodní zprávy:
cca 30-40 stran
Seznam odborné literatury: Pravda, Ján. Základy koncepcie mapového jazyka. Bratislava: Geografický ústav SAV, 1990. 168 s. Vedoucí bakalářské práce:
Mgr. Karel Staněk, PhD.
Datum zadání bakalářské práce:
červenec 2008
Datum odevzdání bakalářské práce: do 15. května 2009
RNDr. Vladimír Herber, CSc. pedagogický zástupce ředitele ústavu
Prohlašuji tímto, ţe jsem zadanou bakalářskou práci vypracoval samostatně pod vedením Mgr. Karla Staňka, Ph.D. a uvedl v seznamu literatury veškerou pouţitou literaturu a další zdroje.
V Brně dne 15. 5. 2009
____________________________ Lukáš HERMAN
Na tomto místě bych rád poděkoval Mgr. Karlu Staňkovi, Ph.D za vedení mé bakalářské práce a všem, kteří mi podali pomocnou ruku vţdy, kdyţ jsem to potřeboval.
OBSAH 1. ÚVOD
8
2. CHARAKTERISTIKA XML A JEHO DIALEKTŮ
9
2.1 Formát XML 2.1.1 Pravidla syntaxe XML dokumentů
9 9
2.2 Formát SVG
13
2.3 Formát KML
14
2.4 Formát SLD
15
2.5 Další XML dialekty vyuţitelné v kartografii
17
3. DEFINICE MAPOVÉHO ZNAKU
18
4. MOŢNOSTI XML DIALEKTŮ PRO TVORBU MAPOVÝCH ZNAKŮ
19
4.1 Moţnosti SVG
19
4.2 Moţnosti KML
20
4.3 Moţnosti SLD
21
4.4 Shrnutí
22
5 VOLBA GEOGRAFICKÉHO TÉMATU A NÁVRH ZNAKŮ 5.1 Volba tématu
23 23
5.1.1 Zdroje vhodných dat
23
5.1.2 Upřesnění tématu
23
5.1.3 Pouţívané jednotky
24
5.2 Volba kartografické vyjadřovací metody
25
5.3 Volba vhodného XML dialektu
25
5.4 Problematika klasifikace dat a velikostních stupnic
25
5.5 Návrh mapových znaků
26
6. TRANSFORMACE MEZI XML DATY A MAPOVÝMI ZNAKY
33
6.1 XSL Ttransformace
33
6.2 JavaScript
33
6.3 Návrh transformace
35
7. IMPLEMENTACE A VIZUALIZACE NÁVRHU
37
7.1 Definice mapového znaku
37
7.2 Obecné zásady tvorby skriptu v jazyce JavaScript
37
7.3 Parsování XML dokumentu
38
7.4 Zjištění statistických charakteristik
39
7.5 Hledání konkrétních hodnot
40
7.6 Klasifikace
41
7.7 Parsování a parametrizování mapových znaků
42
7.8 Tvorba mapové aplikace
44
8. ZÁVĚR
46
SEZNAM POUŢITÝCH ZKRATEK A CHEMICKÝCH ZNAČEK
48
LITERATURA
50
SEZNAM PŘÍLOH
53
1. ÚVOD Cílem práce je návrh distribuovaného systému značkových klíčů, který bude zaloţen na některém z XML dialektů. Navrţený systém by měl generovat mapové značky s vyuţitím dat uloţených v XML formátu. Jednotlivé značky by měly být navrţeny tak, aby mohl uţivatel mapy modifikovat jejich vzhled. Zároveň by měly co nejlépe vystihovat zvolené geografické téma. Celá práce k dosaţení tohoto cíle se skládá z několika po sobě jdoucích kroků. Prvním dílčím úkolem je zhodnotit vlastnosti jednotlivých XML dialektů především s ohledem na jejich moţnosti pro definici mapových znaků. V další fázi je nutné zvolit tématiku mapového klíče a najít zdroj příslušných prostorových dat. Poté je nutné vzít v úvahu výsledky předchozích dvou kroků a pokusit se navrhnout vzhled jednotlivých značek, formát v jakém budou vytvořeny a nástroj, který upraví značky na základě geografických dat obsaţených v XML souborech. K demonstraci funkčnosti návrhu je také potřebné vytvoření mapové aplikace, která ukáţe navrţené a vytvořené značky jako regulérní mapové znaky. Cílem práce není pevně stanovit jednotlivé parsovací a zobrazovací funkce, ty jsou totiţ absolutně závislé na tom jaká data máme k dispozici, jako spíše shrnout moţnosti jednotlivých XML dialektů pro tvorbu mapových značek, vzít v úvahu tyto fakta při vlastním návrhu a pokusit se o realizaci transformace XML popisu do formy značkového klíče.
8
2. CHARAKTERISTIKA XML A JEHO DIALEKTŮ 2.1 Formát XML Formát XML definovalo konsorcium W3C (World Wide Web Consorcium) jako formát pro přenos dat a obecných dokumentů. XML je zkratka pro eXtensible Markup Language, tzn. rozšiřitelný značkovací jazyk. Návrh XML vychází ze staršího a obecnějšího standardu SGML (Standard Generalized Markup Language). Ze standardu SGML vychází i formát HTML (Hyper-Text Markup Language). Zatímco sada značek formátu HTML je pevná a slouţí především k vyjádření prezentační podoby dokumentu, v XML sada značek pevná není a můţe být definována pro různé sady dokumentů různě. Definice značek můţe být součástí definice XML dokumentu, můţe být specifikována odkazem, nebo můţe být dohodnuta předem. Jak jiţ bylo naznačeno, XML je formát pro přenos a prezentaci obecných dokumentů. Při návrhu se autoři z konsorcia W3C řídili následujícími principy: formát XML musí být kompatibilní s formátem SGML, formát XML musí být pouţitelný v rámci internetu, formát XML by měl podporovat širokou škálu aplikací, musí být snadné vytvářet programy, které manipulují s dokumenty v XML, mnoţství variant XML by mělo být minimální – nejlépe ţádné, XML dokumenty by měly být čitelné a pochopitelné i pro člověka. Na základě těchto principů byla navrţena definice XML, které zahrnuje dvě části: definici, co to je XML dokument, definici programů, které zpracovávají XML dokumenty – XML procesorů [8] 2.1.1 Pravidla syntaxe XML dokumentů XML dokument je určitým způsobem uspořádaná posloupnost znaků jisté abecedy. Implicitně se předpokládá Unicode. Informace o kódování dokumentu se spolu s deklarací XML uvádí na první řádek dokumentu. Tato část dokumentu se také označuje jako prolog.[8]
9
Na rozdíl od formátu HTML rozlišuje XML důsledně malá a velká písmena. Následující zápis tagů by tedy byl zobrazen v HTML, ale nikoliv v XML. Libovolný text
V HTML by se také pravděpodobně správně zobrazil zápis bez uzavření tzv. koncovým tagem: Libovolný text
V XML by nedošlo ke korektnímu zobrazení v případě, ţe by se elementy v dokumentu kříţily: Ukázka překřížení elementů
Tím, ţe se elementy nebudou kříţit, budou vţdy řádně ukončeny a v případě potřeby správně vnořeny, bude vytvořena stromová struktura, coţ je charakteristická vlastnost XML dokumentů. Element, který je v této struktuře na nejvyšší úrovní, tzn. ţe všechny ostatní elementy jsou vnořeny do něj, se nazývá kořenový element.[6] Nyní se zaměříme více na samotný zápis elementů. Elementy se v textu vyznačují pomocí tzv. tagů.[6] Většině elementů odpovídají dva tagy – počáteční a ukončovací: Toto je obsah elementu znacka.
Příklad obsahuje jeden element znacka. Jeho obsah je vyznačen pomocí tagů (počáteční tag, neboli start-tag) a (ukončovací tag, neboli end-tag). Názvy tagů se tedy zapisují mezi znaky < a >. Ukončovací tag má ještě navíc před svým názvem znak /, aby se dal lépe odlišit od počátečního tagu. Protoţe některé elementy nemusejí mít ţádný obsah, existuje ještě varianta, kdy se nepouţije ukončovací tag a znak / se vloţí za element počátečního tagu.[8] Prázdný element vypadá takto:
10
Kaţdý XML dokument musí obsahovat pro všechny počáteční tagy odpovídající ukončovací tag nebo musí byt počáteční tag zapsán jako prázdný element. Všechny elementy mohou mít libovolný počet atributů, kterými jsou blíţe charakterizovány. Atributy se vkládají do lomené závorky k počátečnímu tagu elementu ve formě parametrů zadaných pomocí klíčových slov. Kaţdá tato specifikace má jméno a hodnotu – zapisuje se jako dvojice jmeno=“hodnota“. Hodnota atributu musí být vţdy uvedena v uvozovkách nebo apostrofech.[8] Do XML dokumentů je také moţné vkládat komentáře. Ty se mohou vyskytovat v libovolné části dokumentu, ale nemohou být umístěny uvnitř mezi tagy. Nelze je vnořovat a nemůţe se v nich vyskytnout řetězec --. Mají své vlastní specifické závorky .
Je nutné ještě dodat, ţe formulace <priklad> nebude v tomto komentáři interpretována jako počáteční tag, ale jako součást komentáře.[8] Obr. 1. je příkladem XML dokumentu se všemi základními prvky XML syntaxe (XML deklarace a kódování dokumentu = prolog, kořenový element, elementy, tagy a atributy). Splňuje-li dokument všechna výše uvedena pravidla, je syntakticky v pořádku a říkáme o něm, ţe je správně strukturovaný (well-formed).[6] Pokud je potřeba do stromové struktury dokumentu vloţit navíc blok textu, který by mohl být (mylně) povaţován za značku, pouţijeme speciální sekci typu znaková data – CDATA.[8] Na začátku této kapitoly je uvedeno, ţe v XML není sada pouţívaných značek pevně stanovená a můţe být definována pro různé sady dokumentů různě. Tyto značky lze nadefinovat pomocí definice typu dokumentu (DTD). DTD říká, které elementy a atributy můţeme v dokumentu pouţit. Navíc je zde definováno, v jakých vzájemných vztazích mohou byt jednotlivé elementy pouţity. DTD je tedy uţitečný nastroj, který nám umoţňuje hlídat, zda mají naše dokumenty správnou strukturu. V některých případech můţe byt velice uţitečné v jednom dokumentu pouţívat několik sad značek definovaných v různých DTD. Nástroj, který nám umoţní kombinovat více sad značek v jednom dokumentu, se nazývá jmenný prostor (XML namespaces). [8]
11
Obr. 1. Základní komponenty XML souboru (převzato z KOSEK, J., 2000, 25)
Na závěr této kapitoly je nutné zdůraznit, ţe XML dokumenty nemusí nutně mít koncovku .xml. Formáty zmiňované v dalších odstavcích jsou zároveň formátem XML.[7] XML soubor lze jednoznačně poznat podle prologu (viz. XML deklarace na obr. 1). Pravidla syntaxe uvedená v této kapitole se proto vztahují i na následující XML dialekty.
2.2 Formát SVG (Scalable Vector Graphics) Je to značkovací jazyk vytvořený konsorciem W3C a zároveň je to i formát dokumentů určený pro popis dvourozměrné grafiky. Ačkoliv se jedná o vektorový grafický formát, umoţňuje popisovat také rastrové obrázky a texty. Pomocí něj je moţné zobrazovat a popisovat interaktivní a dynamické grafické objekty, pro které zavádí velké mnoţství různých elementů.[8]
12
Tento formát má dobré předpoklady stát se standardem pro vektorovou grafiku na Webu. Na jeho vývoji pracuje od roku 1998 konsorcium W3C a existuje jiţ řada implementací. Pro různé vektorové obrázky nebo mapy je SVG totiţ mnohem úspornější neţ rastrové formáty jako GIF nebo JPEG. Samotný jazyk není příliš sloţitý, přesto se příliš nepočítá s tím, ţe by někdo vytvářel grafiku ve svém textovém editoru.[6] Proto existují jak exportní filtry pro různé grafické editory, které umoţňují ukládání dokumentů do formátu SVG, tak i samostatné programy umoţňující tvorbu a editaci SVG.[22] Mezi jeho další přednosti patří nezávislost na operačním systému i konkrétním software, moţnost komunikace s dalšími technologiemi (XHTML, SMIL, DOM, ECMAScript, XSLT, CSS), zápis ve formě textového souboru umoţňuje také vyhledávání textu uvnitř obrázků (např. Google indexuje obsah tagu ), dále moţnost komprese souborů (do formátu .svgz), tyto archivy lze rozbalit přímo webovým prohlíţečem (resp. příslušným plug-inem) a v neposlední řadě také podpora znakového kódování Unicode.[15] Mezi charakteristické vlastnosti SVG patří vykreslování objektů v takovém pořadí, jak jdou za sebou jejich elementy v SVG dokumentu. To znamená, ţe grafické objekty, které jsou popsány dříve, mohou být překryty jinými grafickými objekty, které jsou popsány později. Jednotlivé elementy v dokumentu mohou být seskupovány do logických celků (mezi tagy a ). Vnořeným elementům pak můţe být hromadně nastaven jednotný styl nebo hodnota některého z atributů. SVG umoţňuje nadefinovat libovolný grafický symbol (pomocí značky <symbol>), a pak jej pouţívat v libovolném mnoţství kopií pouhým odkazováním na něj (pomocí značky <use> a atributu id).[7] SVG dovoluje vícenásobné vnořování elementů, např. , <symbol> nebo <svg>, coţ je element, který definuje nový výkres (canvas). SVG podporuje také
kaskádové styly CSS2 (Cascading Style Sheets, verze 2), známé z XHTML. Nepodporuje sice zdaleka všechny vlastnosti, zavádí však některé vlastní. SVG má dobře propracovanou lineární transformaci souřadnic, tj. posun, změnu měřítek, rotaci a zkosení.[15] Také podporuje SMIL (Synchronized Multimedia Integration Language), to je značkovací jazyk zaloţený na XML, který popisuje animace. Díky tomu, ţe jazyk SVG je zaloţen na XML, lze k jednotlivým uzlům SVG dokumentu přistupovat přes model DOM a za pomocí programovacího jazyka ECMAScript je libovolně upravovat, coţ umoţňuje vytvářet interaktivní dynamické aplikace. Mezi další podporované vlastnosti a funkce patří definice a pouţití průhledností, výplní (vzorů), filtrů, ořezávání nebo barevných přechodů. V rámci
13
SVG jsou definovány tyto základní geometrické útvary (grafická primitiva): obdélník (i se zaoblenými rohy), kruh, elipsa, jednoduchá (přímá) čára, lomená čára, mnohoúhelník (polygon) a obecná cesta (libovolná křivka nebo tvar).[7]
2.3 Formát KML (Keyhole Markup Language) Tento formát je určen k modelování a ukládání prostorových dat, jako jsou body, čáry, obrázky, mnohoúhelníky a 3D modely, které mohou být zobrazeny v aplikaci Google Earth, ve sluţbě Google Maps nebo v dalších aplikacích. KML byl původně vyvinut firmou Keyhole, Inc. jako API pro její virtuální glóbus Earth Viewer. V roce 2004 firmu koupila společnost Google, Inc. a produkt přejmenovala na Google Earth. Ke dni 16.4.2008 se stal KML ve verzi 2.2 standardem Open Geospatial Consortium (OGC).[17] Podobně jako u SVG existuje i komprimovaná verze (s příponou .kmz). Jazyk KML umoţňuje také zobrazování externích obrázků (JPG, GIF nebo PNG). Protoţe tento formát je určen přímo pro geografická data je jako souřadný systém pouţit WGS84 ve tvaru celých stupňů a jejich desetinných částí. KML umoţňuje pracovat i s třetím rozměrem (výškou). Implicitně je výška nula, pokud je však uvedena, je k jejímu zobrazení pouţit vztaţný systém EGM96.[17] KML ve verzi 2.1 podporuje šest základních geometrií: Point (bod), LineString (lomená čára), LinearRing (uzavřený řetězec čar), Polygon (oblast), Model (3D objekty s texturou, definované v souboru COLLADA) a MultiGeometry (kombinace předchozích geometrií).[18]
14
Obr. 2. Struktura KML souboru
2.4 Formát SLD (Style Layer Descriptor) Definuje moţnosti stylů datových vrstev poskytovaných sluţbou WMS (Web Map Service). Podpora SLD je nutná jak na straně serveru (schopnost číst SLD a pouţít jej v součinnosti s dotazem GetMap) tak i na straně klienta (posílání SLD dotazů na server a dynamické generování SLD souborů ze souborů na serveru). SLD je tedy rozšířením sluţby WMS v oblasti vizualizace prostorových dat.[12] Pomocí SLD je moţné pracovat jak se vzhledem jednotlivých typů vektorových geometrií (, a ), tak
15
se vzhledem a umístěním popisu (). V neposlední řadě také se vzhledem rastrových dat (). Dále lze nastavit například minimální a maximální měřítko mapy (<MinScaleDenominator> a <MaxScaleDenominator>). Nebo pomocí tagů a <Else
Obr. 4. Struktura SLD souboru. verze 1.0.0 (převzato z ASSEFA, Y., MCKENNA, J., 2008)
Obr 4. je ukázkou SLD ve verzi 1.0.0. Verze 1.1.0 se liší samotným způsobem zápisu stylu mapového znaku. Zápis barvy ohraničení (stroke) ve verzi 1.0.0: #0000ff
a ve verzi 1.1.0: [12] <se:SvgParameter name="stroke">#0000ff
Obrázek č. 4 demonstruje také pouţití jmenného prostoru ogc (viz kapitola 2.1.1).
16
2.5 Další XML dialekty využitelné v kartografii Uvedené tři formáty nejsou jediné jazyky vycházející z XML vyuţívané ve webové či digitální kartografii. Některé formáty jsou přímo navrţeny k ukládání a správě geografických dat., např. GML (Geography Markup Language), JML (Jump GML) nebo LandXML. Jiné formáty zaloţené na XML umoţňují ukládat třídimenzionální grafiku, např. X3D (eXtensible 3D). Další formáty pracují podobně jako jiţ zmiňované SVG s vektorovou grafikou - VML (Vector Markup Language), WebCGM (Web Computer Graphics Metafile) nebo DrawML (Drawing Meta Language). Pro prácí s multimediálními daty byl vytvořen formát SMIL (Synchronized Multimedia Integration Language).[13] Všechny tyto primárně grafické či multimediální formáty zaloţené na XML lze vyuţívat i v oblasti kartografie.
17
3. DEFINICE MAPOVÉHO ZNAKU Pojem kartografický znak chápeme jako libovolný grafický prostředek nebo souhrn grafických prostředků prvotního významu vztahu, jako grafický záznam, který je schopný být nositelem významu, tzn. něco na kartografickém produktu (mapě, plánu, atp.) vyjadřovat o základních prvcích obsahu. (cit. DRÁPELA, M. V., 1983, 34). Kaţdý kartografický znak má tři základní vlastnosti: formu, obsah a polohu. Kartografický znak tak nese dva typy informací – polohovou (prostorovou) a obsahovou (popisnou).[5]
Obr. 5. Vlastnosti a parametry grafického výrazu (upraveno podle DRÁPELA, M. V., 1983, 34)
Kartografický (mapový) znak je určen svými optickými vlastnostmi: velikostí, tvarem, orientací, intenzitou, vnitřní strukturou (dezénem), barvou a polohou.[2] Právě polohou se liší kartografické znaky od znaků grafických. Podle způsobu zavádění do map je můţeme rozdělit na znaky bodové (figurální), liniové a areálové (plošné).[5]
18
4. MOŽNOSTI
XML DIALEKTŮ PRO TVORBU MAPOVÝCH
ZNAKŮ 4.1 Možnosti SVG Pro definování mapových znaků bodových (figurálních) je ve formátu SVG k dispozici celá řada předdefinovaných grafických primitiv. Je to rovná čára
,
lomená čára <polyline>, kruţnice , obdélník , elipsa <elipse> a mnohoúhelník <polygon>. Kromě jiţ uvedených elementů existuje ještě grafický element <path>, pomocí něj můţeme definovat jakýkoliv tvar ohraničený rovnými i lomenými
čárami, části kruţnic, elips nebo některou z Beziérových křivek. Výše uvedené grafické primitiva je moţné libovolně vzájemně kombinovat a provádět s nimi operace jako průnik, sjednocení nebo rozdíl. Samozřejmostí je široká škála moţností v oblasti barevných výplní a ohraničení. Lze rovněţ definovat průhlednost jednotlivých elementů a jejich částí. Díky elementům a je moţné pracovat také s textem a vytvářet tak signaturové mapové znaky[2] nebo popis. Díky tomu, ţe do formátu SVG můţeme importovat i soubory rastrové grafiky (PNG, GIF a JPG) můţeme vytvářet a pouţívat i mapové znaky obrázkové.[3] Z hlediska umísťování znaků do mapy je důleţitou moţností úprava souřadnic mapového znaku, tak aby se jejich střed nacházel v referenčním (vztaţném) bodě.[11] Liniové znaky lze dále dělit z hlediska charakteru jevu, objektu či vlastnosti, kterou zobrazují. Z hlediska konstrukce v jazyce SVG jsou však podstatnější jejich optické vlastnosti, jako vlastnosti kartografického znaku. Ke znázornění linií pouţíváme v SVG elementy , <polyline> nebo <path>. Velikost (šířku) libovolného z uvedených metod vyjádření liniového znaku je moţné definovat pomocí atributu stroke-width. Je také moţné různými způsoby jednoduše definovat barvu a intenzitu. Poněkud obtíţnější je definování dvojitých čar nebo čar s dezénem. Tyto případy se řeší kombinací více jednoduchých čar nebo čar a jiných grafických primitiv. Naopak poměrně jednoduché je vytvoření přerušované linie (i s nestejnými délkami částí) nebo vytvoření šipek či jiných útvarů na konci a začátku linií. Je také moţné definovat styl zakončování linií (rovné, čtvercové, zaoblené) nebo způsob jakým se spojují konce čar (špičatý, zaoblený, useknutý).[7]
19
Areálové znaky jsou v mapovém poli definovány nejčastěji pomocí elementů <polygon> a <path>, v legendě pak často jako obdélník . Co se týká
definování stylu ohraničení platí ty samé pravidla jako u znaků liniových. Výplň areálů lze definovat díky atributu fill. K vyplnění lze pouţívat jak jednobarevné výplně, tak i barevné přechody. Nebo je k vyplňování moţné definovat a pouţít textury. K definici textury je moţné pouţít libovolné výše z uváděných grafických primitiv. Opět je moţné pracovat také s nastavením průhlednosti (opacity) výplně.[3]
4.2 Možnosti KML V jazyce KML je vizualizace bodových mapových znaků řešena odlišně neţ v případě SVG. K definování mapového znaku se pouţívá element do něj se importují rastrové obrázky (např. PNG, GIF, JPG). Nastavit lze velikost symbolu – ikony (element <scale>), jeho orientaci (element ) a pomocí elementu vztaţný bod. Barvu a průhlednost je moţné nadefinovat pomocí elementů a [18]
.
Jednotlivé ikony mohou reagovat na události, jako je přejetí kurzorem myši a
měnit svůj vzhled.[17] U liniových a areálových znaků jsou moţnosti nastavení ještě menší. U liniových znaků lze modifikovat jen barvu, průhlednost a šířku pouţité čáry. U areálových znaků se můţe nastavit barva, průhlednost a šířku čáry (pomocí ), barvu a průhlednost výplně (prostřednictvím ). Alternativou pro znázornění areálových znaků můţe být pouţití elementu <ScreenOverlay>, který umoţňuje umístit do zadané pozice přes jeden z předefinovaných mapových podkladů vlastní rastrový obrázek.[18] Oproti SVG má KML moţnost u všech mapových znaků pracovat ještě s třetím rozměrem – výškou. Tímto způsobem je moţné vytvářet poměrně efektní prostorové kartogramy[25]. Jsou popsána a realizována řešení jak řešení 2D, tak i 3D kartodiagramů v jazyce KML, které fungují na principu vygenerování elementu <polygon> podle vstupních hodnot (např. výška sloupce je funkcí HDP na osobu).[27] Nevýhodou vytvořených 3D kartogramů a kartodiagramů je, ţe jejich třetí rozměr není moţné zobrazit pomocí samotného GoogleMaps (je nutná instalace plug-inu nebo pouţití aplikace Google Earth). Celkově platí, ţe moţnosti pro práci s grafickými proměnnými jsou menší při zobrazení KML souboru v internetovém prohlíţeči v prostředí Google Maps.[17]
20
Obr. 6. Vyuţití jazyka KML ke konstrukci 3D diagramů (převzato ze SANDVIK B., 2009)
4.3 Možnosti SLD SLD je přímo určen k úpravě vzhledu kartografických značek. Jako takový pracuje jen s optickým vlastnostmi mapové značky a nebere v úvahu její polohu. Pro figurální znaky je zde moţné vyuţít některý z předdefinovaných tvarů (čtverec, trojúhelník, hvězda, kruh a kříţ) nebo importovat vlastní znak (pomocí <externalGraphic>) v rastrovém formátu (GIF, PNG). Dále je moţné definovat velikost <Size>, otočení nebo průhlednost . U přednastavených tvarů je moţné měnit jejich barvu. Lze také vytvářet signaturové mapové znaky nebo k ostatním mapovým znakům přidávat popis. Při úpravě alfanumerických znaků se dá nastavit velikost, síla, sklon i barvu písma, v případě popisu i umístění vzhledem k objektu. U písma je moţné nastavit tzv. halo (jeho poloměr a barvu).[26] U liniových znaků se dá změnit jejich barva, šířka, průhlednost a také dezén (přerušované čáry, linie sloţená z jednotlivých figurálních znaků nebo spojení více různých linií). Podobně jako u SVG lze nastavit také způsob napojování linií a jejich zakončení. V případě areálových znaků lze modifikovat výplň (barva, vyplnění základními geometrickými útvary, externími obrázky nebo popisem). Vzhled hranic 21
areálových znaků je moţně nastavit podobně jako vzhled znaků liniových. Navíc oproti předchozím dvěma technologiím je u SLD moţné měnit vlastnosti rastrových dat. Ty by se daly díky svému charakteru přiradit k areálovým mapovým znakům. Nastavit je moţné například průhlednost nebo kontrast a to i individuálně pro jednotlivé barevné kanály. Nejzajímavější je však moţnost nastavit barvu kaţdého jednotlivého pixelu v rastru podle hodnoty, kterou pixel nese.[12]
4.4 Shrnutí Formát SVG umoţňuje práci se všemi optickými vlastnostmi mapového znaku (originál obrázku č. 5 je vytvořen v SVG). Pouţívat SVG je vhodné pokud máme za úkol vytvářet tematické mapy, protoţe v tomto formátu jsou široké moţnosti pro konstrukci grafů, diagramů, kartogramů, schémat i kartodiagramů. KML má moţnosti pro práci s jednotlivými optickými vlastnostmi znatelně menší. Je vhodnější pro tvorbu jednodušších orientačních mapek a pro znázornění kvalitativních mapových znaků. Moţnosti pro tvorbu kartogramů nebo kartodiagramů sice existují, ale jejich tvorba vyţaduje netriviální znalosti KML i dalších technologií. (např. Google Charts API).[27] Pouţití SLD je nejvhodnější v případě, ţe máme k dispozici server WMS. Pokud nebudeme brát v úvahu polohu, která není součástí SLD souboru, jsou jeho moţnosti pro práci s jednotlivými optickými vlastnostmi mapového znaku na druhém místě za SVG. Z oblasti tematické kartografie umoţňuje vytváření kartogramů nebo proporcionálních mapových symbolů a navíc umoţňuje zajímavým způsobem měnit i vzhled rastrových dat.
22
5. VOLBA GEOGRAFICKÉHO TÉMATU A NÁVRH ZNAKŮ 5.1 Volba tématu Jako klíčová se při hledání tématu značkového klíče ukázala nutnost existence dostatečného mnoţství dat v XML formátu. Dále byla uváţena aktuálnost tématu a poţadavek, aby data zeširoka a přitom komplexně popisovala zvolenou problematiku. Po uváţení těchto poţadavků byla zvolena problematika znečištění ovzduší a produkce emisí. Jak jiţ bylo naznačeno výše, hlavní roli při volbě tématu hrála dostupnost vstupních dat, zároveň pak byly splněny i další podmínky, především právě zmíněná aktuálnost. Globální změny klimatu, s kterými téma produkce emisí velmi úzce souvisí, jsou totiţ v současnosti oţehavým tématem nejen pro odbornou veřejnost. 5.1.1 Zdroje vhodných dat Na internetu je v současnosti k dispozici nemalé mnoţství prostorových dat k různým tématům. Pro účel této práce je nutné, aby data byly v XML formátu, rovněţ je podstatné aby pocházely z důvěryhodného zdroje. Tyto poţadavky, obzvláště první z nich, značně zmenšují počet vyuţitelných zdrojů. Podrobněji se rešerši on-line zdrojů věnuje ČEPČÁROVÁ, H., 2009, 18-23. Hlavním zdrojem datových souborů v XML formátu se stal Eurostat[31] z jehoţ webu pochází valná většina datových souborů, konkrétně 23. Všechny, co byly ke znečištění ovzduší na webu Eurostatu k dispozici. Tento zdroj byl pak doplněn 3 datovými soubory z webu UNdata[32], zde bylo ke zvolenému tématu k dispozici celkem šest souborů, ale 3 z nich se vyskytovaly jiţ v prvním zdroji. 5.1.2 Upřesnění tématu Protoţe Eurostat sbírá data téměř výhradně z evropských států (členů Evropské unie) a v souborech z UNdata také početně dominují evropské státy, byl výsledný mapový výstup zaměřen právě na členy Evropské Unie a několik dalších evropské států. Data Eurostatu popisují aţ na několik málo výjimek období let 1995 aţ 2006.[31] Údaje z UNdata jsou z let 1990 aţ 2005.[32] Jednotlivé značky jsou však navrţeny tak, aby je bylo moţné pouţít i na odlišné území (státy jiného kontinentu), jiné měřítko (státy celého světa nebo naopak niţší územně správní celky) nebo data z jiného časového období. Hlavní podmínkou pouţití je však existence příslušný dat.
23
Vstupní data tvoří produkce jednotlivých látek (oxid uhličitý, oxid uhelnatý, oxid dusný, methan, oxidy síry, oxidy dusíku, nemethanové těkavé organické sloučeniny, fluorované uhlovodíky, perflouorované uhlovodíky, fluorid sírový), vážené součty látek podle jejich vlastností a vlivu na ţivotní prostředí (skleníkové plyny, prekurzory troposférického ozonu a kyselé látky), relativní veličiny (podíl produkce skleníkových plynů a průmyslové produkce a index produkce skleníkových plynů), produkce emisí z jednotlivých
sektorů
hospodářství
(emise
skleníkových
plynů,
prekurzorů
troposférického ozonu a polétavého prachu), produkce emisí z dopravy (emise skleníkových plynů, prekurzorů troposférického ozonu, kyselých látek a polétavého prachu) a další charakteristiky (emise oxidu uhličitého na osobu, emise oxidu uhličitého z nového osobního auta na ujetý kilometr, vystavení městského obyvatelstva znečištění ovzduší ozonem a vystavení městského obyvatelstva znečištění polétavým prachem). 5.1.3 Používané jednotky Většina zdrojových hodnot je v řádech tisíců tun. Výjimku tvoří emise CO2, které jsou v řádech milionů tun. U datových souborů z UNdata, jsou jako jednotky uváděny gigagramy, coţ je ovšem jednotka totoţná s tisícem tun (1 gigagram = 1000 tun). Ačkoliv se to po těchto řádcích můţe zdát, ve skutečnosti není zpracování zdrojových dat a jejich jednotek
tak
jednoduchá.
U
váţených
součtů
(skleníkové
plyny,
prekurzory
troposférického ozónu a kyselé látky), jsou totiţ při sčítání pouţívány váhy, které převádí data v primárních jednotkách na ekvivalenty (CO2 ekvivalent, NMVOC ekvivalent a kyselý ekvivalent). Jejich konkrétní pouţité hodnoty jsou uvedeny v příloze č. 1. Data z UNdata není nutné převádět, jsou uloţeny přímo v CO2 ekvivalentu. Jako primární jednotky jsou chápány jednotky pouţité přímo ve zdrojových XML souborech. Rovněţ emise podle zdrojového sektoru a druhu dopravy jsou zaznamenané v ekvivalentech. Také jsou zde uváděny i emise polétavého prachu (v ekvivalentu tvorby prachových částic). Mezi daty se vyskytují i relativní hodnoty, které srovnávající hodnotu z daného aktuálního roku s referenční hodnotou, která je rovna 100. Číselná hodnota tedy ukazuje odlišnost veličiny od této hladiny. Hodnoty jsou jak menší tak i větší neţ 100. U emisí oxidu uhličitého na osobu (obyvatele) za rok jsou jednotkou tuny. Průměrné emise CO2 z nového auta pouţívají jako jednotku gramy na ujetý kilometr. U datové souboru pro vystavení městských populací znečištění ovzduší polétavým prachem je jednotkou roční průměr denních koncentrací polétavého prachu. V případě vystavení městských populací 24
přízemnímu
ozónu
je
jednotkou
roční
součet
denních
koncentrací
(tvořený
3
osmihodinovými průměry) ozonu nad limitem (ten je 70 mikrogramů 03 na m ).
5.2 Volba kartografické vyjadřovací metody Vzhledem k charakteru dat, kdy jsou produkce jednotlivých látek i další proměnné, vztaţeny k jednotlivým státům, byla vybrána metoda plošně lokalizovaných diagramů. Šlo by namítnout, ţe pro znečištění ovzduší by bylo efektivnější i efektnější pouţití dasymetrické metody nebo izopletových map[5], ale pro tuto metody by byly potřeba data jiného charakteru (např. koncentrace látek ze stanic měřících znečištění ovzduší) a v jiném (větším) mnoţství. Takové data nebyly při zpracovávání této práce k dispozici.
5.3 Volba vhodného XML dialektu Protoţe zdrojová data jsou přímo ve formátu XML, zbývá jen zvolit vhodný dialekt ke konstrukci mapových značek. Kdyţ vezmeme v úvahu informace uvedené v kapitole 4.4 a to, ţe jako vhodná kartografická vyjadřovací metoda byly vybrány plošně lokalizované diagramy, docházíme k závěru, ţe nejvhodnějším dialektem pro tvorbu různých variant diagramů bude formát SVG. SVG dokáţe velmi efektivně pracovat se všemi grafickými proměnnými bodových mapových znaků a je vhodný pro tvorbu širokého spektra kartodiagramů.
5.4 Problematika klasifikace dat a velikostních stupnic Obor hodnot je, ve většině případů, charakteristický velkým rozsahem i rozptylem hodnot a také nesymetrickým rozloţením. Ve většině případů budou data klasifikována do čtyři nebo pěti intervalů. Tento relativně nízký počet není překáţkou, protoţe nedochází ke ztrátě informace. Neklasifikované hodnoty budou totiţ v navrţeném řešení k dispozici po přejetí znaku kurzorem myši nebo po kliknutí na něj. Hlavními důvody klasifikace je zde dostatečné rozlišení jednotlivých kategorií a značný rozsah většiny oborů hodnot. Při pouţití neklasifikovaných dat by u velikostních stupnic mohlo dojít k tomu, ţe hodnoty blízké minimu by byly tak malé, aţ by nebyly vidět, a naopak hodnoty blízké maximu by byly obrovské. Pro klasifikace byly zvaţovány postupy, které vyuţívají základních statistických charakteristik zjištěných po jednom, respektive dvou projití zdrojového souboru (viz kapitola 7.4), tj. minimum, maximum, průměr a směrodatná odchylka. Pouţití směrodatné 25
odchylky a jejich násobků mělo tak špatné výsledky, ţe bylo zamítnuto. Rovněţ pouţití intervalové, spojité, konstantní stupnice[4] (aritmetická stupnice; interval minimum – maximum rozdělený na určitý počet stejných tříd) nedávalo při vizualizaci dobré výsledky. Jako vhodnější se ukázalo použití intervalové spojité, pravidelně rostoucí stupnice[4] (geometrická stupnice; interval minimu – maximum byl rozdělen na třídy, kde šířka následující třídy je dvojnásobkem šířky třídy předchozí). Proto byla u většiny zpracovávaných charakteristik pouţita právě poslední uvedená klasifikace s čtyřmi nebo pěti třídami. Při vyšším počtu tříd docházelo často k tomu, ţe kategorie uvedená v legendě se nevyskytovala v mapovém poli. Výjimku zde tvoří dvě charakteristiky vyuţívající relativní veličiny, které byly pouţity neklasifikované – byly jen zaokrouhleny na celá čísla a byla pro ně pouţita funkční stupnice[4] vyuţívající mocninnou funkci. U produkcí emisí z dopravy a jednotlivých odvětví hospodářství byla pouţitá geometrická stupnice. U charakteristik označených výše jako další, nebyla buď klasifikace a pouţití velikostní stupnice nutné, vzhledem k typu pouţitého diagramu (viz následující kapitola), nebo byly pouţity aritmetická stupnice[5] nebo geometrická stupnice[5] se třemi intervaly.
5.5 Návrh mapových znaků Pro
vyjádření
produkce
jednotlivých
látek
(respektive
skupin
látek),
charakterizovaných jednou vstupní číselnou hodnotou byla navrţeny jednoduché diagramy[11] oválného tvaru. Aby bylo moţné jednoduše rozpoznat o jaké látku či látky se jedná byla ve všech oválech umístěna chemická značka. Navíc přitom byly odlišeny barvou (viz. obr. 7). Tento přístup umoţňuje v případě potřeby vytvořit značky pro celou řadu dalších znečišťujících látek.
26
Obr. 7. Jednoduché diagramy
Pro vyjádření váţených součtů látek byly pouţity polární diagramy[11], kombinované s kruhovými proporcionálními symboly v pozadí. Polární diagramy mají různý počet paprsků (vstupních hodnot) – 3, 4 respektive 6. Jednotlivé paprsky polárního diagramy značí jednotlivé látky z dané skupiny. Paprsky jsou od sebe rozlišeny jak orientací tak i barvou, která je pro jednotlivé látky stejná jako u jednoduchých diagramů. Tato metoda je výhodná, kdyţ dochází k absenci dat u jedné či více dílčích vstupních proměnných. Příslušný paprsek polárního grafu se nezobrazí a vynechá. V případě potřeby je pak moţné zobrazit jednotlivé paprsky (chemické látky) jen v případě splnění určité podmínky (např. příslušný váţený součet určitého státu je větší jak průměrný váţený součet), nebo se nemusí zobrazit vůbec a z multivarientního mapového symbolu[5] se stává jednoduchý diagram kruhového tvaru.[11]
Takto navrţené značky jsou pro tuto tématiku také výhodnější neţ strukturní diagramy[11], protoţe se v jejich případě můţe zdát, ţe dílčí proměnné dohromady dávají 100 procent, coţ není v případě emisí úplně pravda. Do jednotlivých skupin emisí, by se totiţ daly zařadit i další chemické látky, pro které ovšem nemáme data (bliţší informace: Informace o látkách ohlašovaných do IRZ, 2009). Aby nedošlo k omylům při prohlíţení symbolů, je nutné převádět všechny vstupní data na stejné jednotky (násobením jednotlivých látek jejich váhami). Specifické jsou značky pro skleníkové plyny, kde CO2 tvoří 70 aţ 90 procent z celkové produkce (záznamy pro CO2 jsou v milionech tun, zatímco u ostatních látek v tisících tun), proto je zde pouţit místo paprsku čtverec s proměnlivou délkou strany (viz obr. 8 vlevo nahoře) Ke znázornění poměru mezi spotřebou energií a produkcí skleníkových plynů a indexu produkce skleníkových plynů byly pouţity srovnávací diagramy[11]. V obou případech se jedná o relativní veličiny, srovnávající hodnotu z určitého roku (1996 a „aktuální základní rok“), která se rovná 100 a hodnotu z daného aktuálního roku. Diagramy mají stejnou barevnou kombinaci (100 – světlejší barva, aktuální hodnota tmavší barva). Vytvořené diagramy se liší pouţitými tvary. V prvním případě jsou pouţity 28
trojúhelníky ve druhém čtverce. U těchto diagramů byla pouţita funkční velikostní stupnice[4], vyuţívající mocninné funkce, tak aby se daly lépe odlišit hodnoty blízké 100.
Obr. 9. Příklady jednoduchých srovnávacích diagramů (vlevo – poměr mezi spotřebou energií a produkcí skleníkových plynů, vpravo – index produkce skleníkových plynů)
Pro vyjádření emisí z jednotlivých odvětví hospodářství a dopravy byly pouţity strukturní diagramy[11]. (Vnější) poloměr diagramů je dán mnoţstvím produkovaných emisí. Středový úhel jednotlivých kruhových výsečí je dán procentuelním zastoupením odvětví (či druhu dopravy) na celkové produkci. Je rovněţ moţné zobrazit i podíl jediné sloţky a vytvořit tím diagram s jednoduchým vydělením[4]. Celkový počet výsečí je maximálně dvě, ačkoliv by jejich počet mohl být vyšší. Je to způsobeno chybějícími daty v XML souborech. V případě podílu z jednotlivých sektorů hospodářství by teoreticky mohlo být zobrazeno aţ 8 sloţek, v drtivé většině je však zaznamenán jen podíl dopravy a celková produkce, jejich odečtením lze získat podíl ostatních sektorů. V případě podílu jednotlivých sloţek dopravy je zaznamenávána celková produkce z dopravy, podíl silniční dopravy a podíl ostatních druhů dopravy. Diagramy jsou od předchozího typu odlišeny svým tvarem. Mají charakter mezikruţí. V případě prekurzorů troposférického ozonu z dopravy je k dispozici jen hodnota celkové produkce, takţe ze strukturního diagramu se stal diagram jednoduchý.
Pro vyjádření produkce emisí CO2 na osobu a průměrných emisí CO2 z nového auta na ujetý kilometr byly pouţity segmentové diagramy[4]. Ty jsou definovány tak, ţe daná základní jednotka odpovídá jednomu geometrickému útvaru (zde kruh nebo čtverec). Číselná hodnota proměnné se pak beze zbytku podělí základní jednotkou a získané číslo, udává počet vykreslení základního tvaru. Jednotlivé základní tvary se pak skládají buď do řádku (v případě CO2 na osobu) nebo do obrazce tvořeného dvěma řádky nad sebou (CO2 z nového auta). Zbytek po celočíselném dělení základní jednotkou pak udává tvar doplňkového tvaru, který má charakter části tvaru základního (obr. 11).
30
Obr. 11. Segmentové diagramy (nahoře – emise CO2 na osobu, dole – průměrné emise CO2 z nového auta na ujetý kilometr)
Obdobného postupu bylo pouţito také při znázornění vlivů emisí na městské populace (jejich vystavené ozonu a polétavému prachu). Přitom byl princip segmentového diagramu[4] skombinován s jednoduchým obdélníkovým diagramem. Byla tak vlastně vytvořena jistá varianta složeného diagramu[11]. Obdélníkový jednoduchý diagram s proměnlivou šířkou znázorňuje vystavení populací měst ozonu, a segmentový diagram sloţený s kruhů a jeho části znázorňuje vystavení populací měst polétavému prachu. Tyto dvě části je moţné zobrazit kaţdou zvlášť nebo zároveň přes sebe. Jejich velikosti a poloha jsou uzpůsobeny, tak aby byly i přesto dobře čitelné.
Obr. 12. Segmentové diagramy kombinované s jednoduchými obdélníkovými diagramy
V případě, ţe jedna z odpovídajících číselných hodnot není ve zdrojovém souboru k dispozici, nedojde k zobrazení příslušného grafického prvku, respektive prvků (viz obr. 12). Podobně jako u segmentových diagramů je moţné nastavit velikost základní jednotky, která odpovídá jednomu základnímu tvaru (zde kruh).
31
Stejné číselné proměnné jako v předchozím případě byly pouţity i při tvorbě dalšího multivarientního mapového symbolu[5]. Při jeho tvorbě byla navíc také pouţita produkce CO2 na osobu (obyvatele). Tyto tři vstupní hodnoty poslouţily ke konstrukci tzv. Chernoff faces[5]. Tato metoda vychází z poznatku, ţe lidské vnímání dokáţe dobře rozlišit výrazy lidských obličejů. Proto jsou pouţity právě schematizované výrazy obličeje. CO2 na osobu udává barvu obličeje, výraz očí znázorňuje vystavení měst. populací polétavému prachu a výraz úst vystavění měst. populací vlivu ozonu.
Obr. 13. Chernoff faces (vpravo – jednotlivé prvky obličejů, vlevo – ukázka jejich kombinací)
Tato metoda je výhodná nejen kvůli tomu, ţe dokáţe efektivně komprimovat informace. Jeden „obličej“ dokáţe obsáhnou aţ 8 charakteristik. Navíc tyto charakteristiky nemusí nutně pouţívat stejné jednotky, coţ je výhodné právě v tomto případě. Naopak menší komplikací je to, ţe data musí být konzistentní (obsahovat číselné hodnoty ke všem znázorňovaným charakteristikám), nebo musí být vytvořena varianta znázornění chybějící hodnoty, protoţe vytvoření „obličeje“ bez očí nebo úst nemá příliš logiku. Tyto znázornění chybějících hodnot bylo v tomto případě také nutné navrhnout, a to tak aby byly měně výraznější neţ existujících charakteristik (obr. 13).
32
6. TRANSFORMACE MEZI XML DATY A MAPOVÝMI ZNAKY Pro transformaci dat z XML formátu na mapové značky byl zvolen JavaScript. Kromě JavaScriptu existuje i druhá varianta postupu. Tou je XSLT (eXtensible Stylesheet Language Transformations). Ta aby však mohla samostatně fungovat, musí pracovat na straně serveru a ne jako JavaScript na straně klienta. To ve výsledku znamená, ţe tvorba a editace je obtíţnější. Existuje i varianta, kde XSLT pracuje na straně klienta, k tomu je však nutné propojení s JavaScriptem. Technologie XSLT by se pravděpodobně dokázala vypořádat s řešenou problematikou jako samotný JavaScript, jenţe struktura skriptů by byla ještě sloţitější neţ stávající řešení. Dále je otázkou jestli by dokázala stejně dynamicky jako JavaScript pracovat s uţivatelem zadanými parametry mapových znaků. I přesto nelze popřít, ţe tato metoda má nejen v oblasti kartografie svůj význam.[30]
6.1 XSLT XSL vznikl jako univerzální stylový jazyk, který by měl nabízet funkčnost všech ostatních existujících stylových jazyků a dále ji rozšířit. Samotná syntaxe jazyka je samozřejmě zaloţena na jazyce XML, takţe pro zpracování stylu lze pouţit všechny nástroje, která umějí s XML pracovat. Samotný standard eXtensible Stylesheet Language (XSL) Version 1.0 W3C Working Draft rozděluje jazyk XSL na dvě části. První část jazyka obsahuje nástroje pro transformaci XML dokumentů. Této části se říká XSLT (XSL Transformations). Druhá část standardu pak definuje formátovací objekty. Ty slouţí jako abstraktní popis vzhledu stránky a jejich jednotlivých komponent. Formátovací objekty mají syntaxi XML. XSLT se dá pouţit pro transformaci XML dokumentu do XML dokumentu s jinou strukturou, případně do HTML nebo textového formátu. Samozřejmě, ţe lze XSLT pouţit i pro transformaci, jejímţ výstupem je dokument skládající se z formátovacích objektů. Takový dokument pak můţe byt pomoci speciálních programů zformátován a zobrazen či vytištěn.[6]
6.2 JavaScript JavaScript
spatřil
světlo
světa
díky
spolupráci
společností
Netscape
Communitations Corporation a Sun Microsystems, Inc. Oficiálně byl zveřejněn 4. prosince 1995, v době kdy internetový prohlíţeč Netscape Navigator existoval jen ve vývojových 33
verzích. JavaScript 1.0 byl pak vydán zároveň s novým prohlíţečem. (Neţ byl vydán jako JavaScript, byl nazýván LiveScript).[9] JavaScript je klientský skriptovací jazyk zaloţený na objektech, vhodný především k vytváření dynamických webových stránek. Smysl této definice je nutné vysvětlit po částech. Klientský znamená, ţe JavaScript běţí v klientském softwaru (internetovém prohlíţeči) a nikoliv na webovém serveru, který danou stránku se skriptem pouţívá. Skriptovací jazyk nevyţaduje aby byl program před spuštěním kompilován. Interpretace probíhá za chodu programu na klientském softwaru. Kód skriptovacího jazyka, je interpretován v době, kdy je nahráván do klientského softwaru. To umoţňuje dříve vyzkoušet výsledky programátorského snaţení. Před spuštěním skriptu však nemohou být odhaleny chyby, které mohou způsobovat v klientském systému problémy. V případě JavaScriptu se tedy chyby zpracovávají v prohlíţeči, který uţivatel pouţívá. Objekty jsou entity, které seskupují jednotlivé prvky modelované reality (data i související funkčnost). Objekty si pamatují svůj stav a navenek poskytují operace (přístupné jako metody pro volání). Jednotlivé objekty se vytvářejí podle tříd, coţ jsou předpisy, které říkají jaké vlastnosti mají objekty mít. JavaScript nám umoţňuje jak definovat vlastní objekty, tak i vyuţívat předdefinovaných. V obou případech můţeme pracovat s atributy (vlastnostmi) a metodami objektů.[9] Další důleţité termíny spojené s JavaScriptem jsou ECMAScript a DOM. ECMAScript je mezinárodním standardním názvem a specifikací jazyka JavaScript, takţe se nejedná o ţádný nový jazyk, nýbrţ o standard, který má sjednotit JavaScript a JScript (verze JavaScriptu vyvíjená společností Microsoft).[9] JavaScript (tedy i ECMAScript) sám o sobě nemá prostředky k tomu, aby mohl zpracovávat stromovou strukturou XML dokumentu. Za tímto účelem byl vytvořen DOM (Document Object Model). DOM je objektově orientovaný model XML nebo HTML dokumentu, který poskytuje tzv. API (Application Programming Interface) pro přístup ke stromové struktuře dokumentu. DOM byl standardizován konsorciem W3C v roce 1998. Jedním z důvodů jeho vzniku byla snaha o sjednocení rozhraní k manipulaci s HTML. V současnosti existují 3 úrovně DOM: Level 1, Level 2 a Level 3. Se stoupajícím úrovní, se zvyšují implementaci.[7]
34
i poţadavky kladené na
6.3 Návrh transformace Na obr. 14 je nastíněno schéma transformace XML dat na diagram ve formátu SVG. Skládá se ze tří základních komponent: vstupních dat, diagramu definovaného implicitními hodnotami a nástroje, který má na starosti nahrazení implicitních hodnot hodnotami z XML souboru a překreslení grafu. Tyto komponenty jsou zpravidla obsaţeny ve dvou aţ třech souborech (XML soubor a jeden SVG soubor s vloţeným nebo externím skriptem).
Obr. 14. Obecné schéma zapojení XML hodnot do SVG prostřednictvím JavaScriptu
Jak je naznačeno ve 3. kapitole klíčovou vlastností mapového znaku je jeho poloha. Proto je nutné modifikovat výše uvedené schéma a zapracovat do něj prostorové určení. Modifikované schéma transformace je zobrazeno na obr. 15. Oproti předešlému schématu obsahuje navíc čtvrtou komponentu definující prostorový kontext. Komponenta implicitně definovaného diagramu (mapového znaku) je pak obohacena o informace o poloze mapového znaku (jeho vztaţného bodu) v prostoru definovaném souřadnicemi. Samotný proces zavedení hodnot z XML do SVG atributů a vykreslení znaku je obdobou předchozího případu. 35
Obr. 15. Schéma tvorby mapového znaku z XML hodnot a SVG vzoru prostřednictvím JavaScriptu
Do schéma na obr. 15 je zapracován fakt, ţe existují různé moţnosti pro vytvoření prostorového kontextu (mapového podkladu). Jednou moţností je vyuţití Google Maps API a příslušných souřadnic. Druhou variantou je pouţití SVG a souřadnic nadefinovaných v tomto souboru. První varianta sice vyuţívá souřadnice z Google Maps, ale pro vykreslení mapové znaku je nutné pouţití SVG a to ve formě jmenného prostoru, který je svázán s mapovým podkladem tak, aby byl mapový znak vykreslen ve správné poloze i při provádění operací jako je PAN (posun) a ZOOM (změna měřítka). Pro generování mapových znaků, respektive celých map, pomocí XSLT by platilo jiné schéma řešení.[14] V tomto případě byla zvolena varianta pracující s Google Maps API. Důvodem bylo to, ţe poměrně jednoduchým způsobem lze do mapy přidat interaktivní prvky umoţňující zobrazení přesných číselných hodnot, změnu mapového podkladu nebo paning a zooming. Tento způsob řešení je také zajímavý díky tomu, ţe není příliš obvyklý. (podařilo se nalézt pouze jeden případ, kdy byly SVG značky zobrazeny nad podkladem Google Maps).[19]
36
7. IMPLEMENTACE A VIZUALIZACE NÁVRHU Vzhledem k příkladům, které poslouţili jako vzory při sestavování skriptu byl pouţit JavaScript, DOM a některé prvky definované v Google Maps API. Celý návrh lze rozdělit na několik fází. Nejprve dochází k nastavení vlastností mapového pole, vytvoření SVG jmenného prostoru a nastavení jeho vlastností, definování reakcí na události. Provedení samotné funkce zobrazující značky, pak lze opět rozdělit na několik postupných kroků: 1)
Parsování XML dokumentu nebo dokumentů,
2)
a)
Zjištění statistických charakteristik, jejich zobrazení,
b)
Zjištění přesných číselných hodnot států, její uloţení jako atributy znaků,
c)
V případě klasifikování dat: výpočet intervalů v legendě a klasifikace hodnot států,
3)
Úprava parametrů jednotlivých znaků podle (ne)klasifikovaných číselných hodnot.
7.1 Definice mapových značek Jak vyplývá z předchozí kapitoly společnou vlastností všech mapových značek je jejich poloha. Ta je mapovým značkám přiřazena tak, ţe elementu , který sdruţuje všechny grafická primitiva tvořící danou značku, jsou přiřazeny atributy lat a lng udávající zeměpisnou šířku a délku. Kaţdý znak je jednoznačně identifikován podle atributu id. Tento tag je později vyuţit při hledání odpovídajících číselných hodnot v XML souborech. Dále má kaţdý znak přiřazen název státu, ke kterému se vztahuje. <ellipse rx="150" ry="100" fill="rgb(105, 105, 125)" stroke="rgb(255, 255, 255)" stroke-width="1"/> CO2
7.2 Obecné zásady tvorby skriptu v jazyce JavaScript Základním stavebním prvkem kaţdého programovacího jazyka jsou příkazy. Pomocí příkazů můţeme činnost skriptů strukturovat a vytvářet podmíněné úseky kódu. Příkazy pouţité při implementaci návrhu jsou obsaţeny v tabulce 1. Další pouţité prvky,
37
jako jsou objekty, jejich metody nebo operátory jsou shrnuty v příloze č. 2. Při jejich uţití je nutné dodrţovat zásady syntaxe jako je pouţívání sloţených závorek pro deklaraci funkce nebo středníků za kaţdým příkazem pří této deklaraci a další. [9] Tab. 1. Příkazy jazyka JavaScript pouţité při implementaci transformace XML hodnot na mapové znaky[10] předčasné ukončení cyklu, příkazu switch nebo návěstí break for
vykonává příkazy dokud platí daná podmínka
function
deklarace funkce
if ... else
na základě vyhodnocení výrazu podmíněně vykoná kód
return
předání návratové hodnoty z funkce, návrat z funkce
switch
vyhodnotí proměnnou a na základě jejího obsahu vykoná kód
try ... catch ... finally
zachytávání a zpracování výjimky
var
deklarace a inicializace proměnných
7.3 Parsování XML dokumentu Funkce parseXML slouţí k vytvoření DOM objektu a načtení zdrojového souboru (zd_soub) do tohoto objektu.[28] Protoţe pro existují odlišné varianty pro Internet Explorer a pro ostatní prohlíţeče, je nutné nejprve zkusit jednu variantu a v případě, ţe neproběhne korektně, tak tu druhou. Obsah takto vytvořeného objektu pak vstupuje do dalších kroků. function parseXML(zd_soub) { var zd_soub; var vstup1; try //zkusit postup pro Firefox, Mozilla, Opera, atd. { vstup1=document.implementation.createDocument("","",null); } catch(e) { try // zkusit variantu pro Internet Explorer { vstup1=new ActiveXObject("Microsoft.XMLDOM"); } catch(e) {alert(e.message); return;} } vstup1.async=false; vstup1.load(zd_soub) return vstup1; }
38
7.4 Zjištění statistických charakteristik Vnitřní stavba funkce, která má za úkol hledat základní statistické charakteristiky, je závislá na struktuře zdrojového XML souboru. Na obr. 16 jsou zachyceny rozdíly ve struktuře XML dokumentů pocházející z Eurostatu[31] a z UNdata[32]. Všechny zdrojové soubory byly pouţívány s takovou stromovou strukturou, jakou mají při staţení z příslušných webů. Při prvním průchodu načteného DOM stromu bylo hledáno maximum, minimu, počet hodnot a suma hodnot, ze kterých byl posléze vypočten průměr. Mezní hodnoty jsou hledány tak, ţe do proměnné se uloţí první číselná hodnota a další číselné hodnoty jsou s touto porovnávány, v případě ţe jsou odlehlejší (menší v případě minima a větší u maxima) dojde k přepisu proměnné. Počet hodnot a suma se určují tak, ţe pro kaţdou číselnou hodnotu se k počtu přičte jednička a k sumě ona aktuální číselná hodnota. Při druhém průchodu je pak s pomocí vypočteného průměru zjišťován rozptyl a z rozptylu pak vypočítána směrodatná odchylka.
Obr. 16. Rozdílné struktury vstupních XML souborů (vlevo – Eurostat, vpravo – UNdata)
39
Takto zjištěné hodnoty neslouţí jen k vypsání na obrazovku, ale primárním důvodem jejich zjišťování je jejich pouţití při klasifikaci. Velmi důleţitým krokem při hledání těchto statistických charakteristik, je odfiltrování neţádoucích hodnot. V tomto případě jsou to hodnoty emisí za Evropskou Unii (viz obr. 16 vlevo) a za další státy světa (Japonsko, USA, Austrálie – obr 16. vpravo). Některé z těchto hodnot by mohly nepříznivě ovlivnit klasifikaci, a to především zvýšením maxima (před jejich odfiltrováním se tak skutečně stalo). Tab. 2. Klíčové metody, vlastnosti a ostatní prvky, pouţité pro hledání konkrétních hodnot pro dané státy a statistických charakteristik pro klasifikaci (výběr z přílohy č. 2) Metody getAttribute()
vrátí hodnotu zadaného atributu
getElementsByTagName()
vrátí kolekci objektů s danou značkou (tagem)
parseFloat()
získá z řetězce reálné číslo
Vlastnosti length
počet uzlů v kolekci
Další .
přístup k vlastnosti
[]
index pole (pořadí v kolekci)
()
volání funkce
Ještě jednou je nutné zdůraznit fakt, ţe některé veličiny se někdy zobrazují za pouţití jiných jednotek neţ v jakých jsou uloţeny. Tato skutečnost je ošetřena tak, ţe se násobí aktuální váhou (převádí se) a pak aţ je posuzováno, jestli se nejedná o mezní hodnoty a jsou počítány další statistické charakteristiky. V případě tzv. váţených součtů je nutné nejprve převádět číselné hodnoty na stejné jednotky (násobením váhou) a najít potřebné statistické veličiny nutné pro klasifikaci (minimum a maximum) z prvního zdrojového souboru, pak přejít k dalšímu, opět najít minimum a maximum a v případě, ţe je daná extrémní hodnota ještě extrémnější tak ji přepsat a pokračovat podobně s dalším zdrojovým souborem. Tímto způsobem se určí úplné maximum a úplně minimu (ze všech zdrojových souborů).
7.5 Hledání konkrétních hodnot Níţe je vyobrazen příklad funkce, která zjistí aktuální číselnou hodnotu. Funkce má tři vstupní parametry: kód státu a rok, které slouţí k samotnému nalezení hodnoty a parametr, který nabývá hodnoty podle toho, jestli dochází k převodu na jiné jednotky nebo 40
ne (v tom případě má hodnotu 1). Funkce funguje tak, ţe ve struktuře XML dokumentu nejprve najde aktuální stát (if (krok1.getAttribute("value")==stat)), pak postoupí ve stromové struktuře o úroveň dál k jeho potomkům a obdobným způsobem vyhledá uzel pro aktuální rok. V případě úspěšného nalezení hodnoty je do proměnné vystup vloţena tato hodnota. V případě, kdyţ číselná hodnota chybí nebo je v tabulce uveden symbol ‚:‘ (= nejsou data), je do proměnné uloţena -1. Funkce loadCislo vrací právě tuto proměnou vystup. U dat z UNdata probíhá, kvůli jejich odlišné struktuře, porovnávání hodnot s parametry stat a rok zároveň. function loadCislo(stat, rok, param) { var stat, rok, param; var vystup="-1"; var krok0=vstup1; for (var i=0;i<(krok0.getElementsByTagName("Position").length);i++) { var krok1=krok0.getElementsByTagName("Position")[i]; if (krok1.getAttribute("value")==stat) { for (var j=0;j<(krok1.getElementsByTagName("Position").length);j++) { var krok2=krok1.getElementsByTagName("Position")[j]; if (krok2.getAttribute("value")==rok) { var krok3 = krok2.getElementsByTagName("Cell")[0].getAttribute("value"); if (krok3==":") { krok3="-1"; } vystup=((parseFloat(krok3))*param); return vystup; } } } } }
V případě některých zdrojových souborů bylo potřeba funkci modifikovat a přidat jeden vstupní parametr (sektor) a jeden cyklus for navíc. Důvodem byla další úroveň pouţitá ve zdrojových XML souborech. Na podobném principu několika do sebe vnořených cyklů for a rozhodování if je zaloţeno i hledání statistických charakteristik.
7.6 Klasifikace Klasifikace hodnot spočívá v porovnání klasifikovaného čísla s hranicemi intervalů vypočtených ze statistických charakteristik (minima a maxima). Klasifikace můţe být
41
obsaţena v samostatné funkci nebo být součástí sloţitější funkce. Princip však zůstává stejný, mění se jen počty tříd a poměr jejich velikostí (viz. kapitola 5.4). Nejčastěji vyuţívá klasifikace pěti tříd, kde následující třída je dvojnásobkem třídy předchozí. Jednotlivým třídám přiřazuje podle pouţité velikostní stupnice hodnoty, které jsou posléze pouţity při tvorbě diagramů. Protoţe ne všechny data je nutné klasifikovat, ať uţ kvůli tomu, ţe se jedná o relativní data s poměrně malým rozptylem nebo proto, ţe zvolená kartografická vyjadřovací metoda klasifikaci dat přímo nevyţaduje (segmentové diagramy). V těchto případech je tato část skriptu nahrazena jednoduchým aritmetickým zaokrouhlením (pomocí metody Math.round(x)) a výpočtem funkční velikostní stupnice. Abychom mohli vytvořit smysluplnou legendu, která koresponduje s aktuálními znázorňovanými hodnotami, aby platilo časové určení v podtitulu a vypsané základní statistické charakteristiky, je vţdy nutné tyto prvky dynamicky měnit podle právě načítaných hodnot. Tyto hodnoty většinou prochází skriptem ve formě číselných proměnných nebo je lze jednoduše vypočítat. Nyní jde jen o to je zobrazit ve správné části dokumentu. Toho jde jednoduše docílit pomocí DOM objektu document, jeho metody getElementById() a vlastnosti innerHTML. Id je atribut, který slouţí k jednoznačnému určení prvku v dokumentu. InnerHTML zajistí, aby byly data zapsány mezi odpovídající tagy (v tomto případě je počet hodnot zapsán:
sem
). Takto můţeme vypisovat i spojení více proměnných nebo řetězců. … document.getElementById("s_poc").innerHTML=pocet; … document.getElementById("leg_4").innerHTML=" " + (Math.round(minimum+(((maximum-minimum)/15)*7))) + " - " + (Math.ceil(maximum)); …
Počet hodnot:
…
7.7 Parsování a parametrizování mapových znaků Z výsledků výpočtů velikostních stupnic a klasifikace v předchozím kroku se určují parametry kaţdého jednotlivého mapového znaku. Tento proces se odehrává v součinnosti
42
s parsováním SVG značek funkcí GXml. Naparsované značky jsou procházeny cyklem for a podle hodnot v atributech lng a lat jsou umísťovány na příslušné místo.[19] GDownloadUrl("znaky/z_co2.svg", function(data, responseCode) { var svg_znacky = GXml.parse(data); znacky = svg_znacky.documentElement.getElementsByTagName("g"); for (var i = 0; i < znacky.length; i++) { var kod_statu=znacky[i].getAttribute("id"); var prom = loadData(kod_statu, letopocet, parametr); var elipsa= znacky[i].getElementsByTagName("ellipse")[0]; var text= znacky[i].getElementsByTagName("text")[0]; var tspan= znacky[i].getElementsByTagName("tspan")[0]; elipsa.setAttribute("ry", prom); elipsa.setAttribute("rx", Math.round((prom/2)*3)); text.setAttribute("font-size", Math.round((prom/5)*4)); text.setAttribute("dy", Math.round((prom/10)*3)); tspan.setAttribute("font-size", Math.round((prom/5)*2)); znacky[i].setAttribute("val_1", loadCislo(kod_statu, letopocet, parametr)); replaceSvgNode(svgNode, znacky[i].cloneNode(true), parseFloat(znacky[i].getAttribute("lat")), parseFloat(znacky[i].getAttribute("lng")), mapa.getZoom()); } } );
Hodnota vrácená klasifikací (funkce loadData) slouţí k parametrizování znaku. Protoţe zvolené znaky se skládají z jednotlivých částí, které se různým způsobem mění, je nutné definovat všechny potřebné parametry. Pro jeden z těchto parametrů je pouţita přímo hodnota definovaná přímo funkcí (např. proměnná prom udává velikost vedlejší poloosy elipsy). Další parametry jsou pak odvozeny od tohoto základního (hlavní poloosa, velikost písma, horizontální posun a velikost dolního indexu). Dále je do atributu val_1 uloţena neklasifikovaná číselná hodnota (funkce loadCislo), tak aby ji bylo moţné později zobrazit. Podobnou funkcí se parametrizují všechny jednoduché diagramy, vyjadřující emise jednotlivých látek. Další typy diagramů vznikají na stejném principu, jen se liší počtem zdrojových XML souborů a sloţitostí skriptu uvnitř cyklu for, která zajišťuje parametrizování značek. Vyskytují se tu různě sloţité rozhodování pomocí více příkazu else if nebo switch.
43
7.8 Tvorba mapové aplikace JavaScript neslouţí v této implementaci značkového klíče jen k parametrizování a vizualizaci samotných značek. Ve spojení s funkcemi, třídami, jejich metodami a vlastnostmi předdefinovanými v Google Maps API zajišťuje také provázanost značek s mapovým podkladem Google Maps. Díky tomu je moţné měnit měřítko (ZOOM) a posunovat viditelný výřez (PAN) aniţ by znaky změnily svou polohu vůči hranicím státních celků a svou velikost, které se musí shodovat s legendou. Díky pouţití JavaScriptu je také moţné zobrazovat data z různých období (roků) a nastavovat různé parametry, které ovlivňují charakter znázornění mapových znaků (např. u strukturních diagramů je moţné zobrazit nejen celý podíl, ale i zvlášť jednotlivé sloţky). Podle potřeby se rovněţ mění aktuální rok v podtitulu, intervaly v legendě a statistické údaje o pouţitém datovém souboru v tabulce pod mapovým polem. Přesné aktuální hodnoty pro daný stát je moţné buď zobrazit po najetí kurzoru myši pod mapovým polem nebo kliknutím na znak v samostatném informačním okně. Zpracování jednotlivých map se v detailech, podle konkrétního tématu, liší. Základní rozvrţení jednotlivých kompozičních prvků mapy[11] však zůstává stejné.
Obr. 17. Vzhled mapové aplikace pro zobrazení navrţených značek s umístěním jednotlivých kompozičních prvků
44
Zvláštní kapitolou je pak moţnost pouţití různých mapových podkladů. Lze pouţít jednoduchý mapový podklad (Nastavení; tlačítko „S podkladem“) nebo jeden ze čtyř podkladů z aplikace Google Maps (Nastavení; tlačítko „Bez“). Vlastní podklad je realizován pomocí externího SVG souboru a vlastní funkce (některé její prvky se shodují s funkcí parsující a zobrazující mapové znaky). Do SVG jsou hranice státních celků vloţeny jako formát PNG. Ten byl vytvořen z dat dostupných volně na internetu[33], přetransformován v programu ArcMap 9.2 do Mercatorova válcového zobrazení a po nastavení barev exportován do PNG. Drobnou úpravou vypracovaných skriptů by bylo také moţné importovat a pouţít jako podklad KML soubory.
45
8. ZÁVĚR Je nasnadě, ţe celý návrh a realizace systému značkových klíčů neprobíhala bez dílčích problémů a v přesně v pořadí jak bylo předem stanoveno. Spíše se určité úkoly spojovali dohromady. Typický příkladem je hned první krok a to volba tématu, ta probíhala zároveň s hledáním zdrojových dat. Téma, vzhled, charakter i strukturu transformace do výsledného systému mapových klíčů ovlivnily především zdrojová data – jejich dostupnost, lokalizace, logické vztahy a struktura jednotlivých datových souborů. Navrţené a vypracované značky i jejich transformaci můţeme hodnotit z několika hledisek. Můţeme se zaměřit na srovnání navrţených mapových značek s dalšími zpracováními podobné tématiky. Na webu Eurostatu[31] existuje moţnost zobrazit zvolenou datovou tabulku jako mapu (např. obr. 18). Tento mapový výstup není z kartografického úhlu pohledu bohuţel ideální.
Obr. 18. Implicitní mapový výstup z databáze Eurostatu Je zde moţné pouţít několik různých klasifikací, které lze ale aplikovat jen na kartogramy, takţe kartodiagramy se zobrazují podle přednastavené škály, coţ jak je vidět na obrázku 18, nemusí být úplně ideální. Samotné kartogramy zase nemají nejlépe zvolené barevné
46
škály. Tyto nedostatky jsou dané univerzálností mapového znázornění, které je stejné pro všechny data z webu Eurostatu. V této práci navrţené mapové značky jsou zčásti multivarientní a tak zobrazují více souvisejících charakteristik. Téměř u všech navrţených značek můţe uţivatel ovlivnit jejich vizualizaci. To jsou hlavní předností návrhu oproti mapám a značkám z webu Eurostatu. Pokud se podíváme na navrţené řešení z hlediska pouţité transformace a metody vizualizace, zjistíme, ţe se jedná málo časté aţ ojedinělé řešení. Při hledání podobných aplikací se podařilo najít pouze jeden jediný praktický příklad[19], který ovšem není vyjádřením ţádného konkrétního tématu, ale poslouţil jako demonstrace moţnosti spojit SVG a Google Maps.
Další výhody návrhu je moţnost zobrazení dané
charakteristiky s pouţitím různých jednotek a zobrazování konkrétních číselných hodnot, doplněných procentuelním zastoupením tam, kde to má smysl. Samostatnou kapitolu tvoří otázka funkčnosti zpracovaného návrhu v jednotlivých internetových prohlíţečích. V programu Internet Explorer selhává pouţitá metoda transformace, konkrétně pouţití SVG jmenného prostoru. Samotný soubor SVG lze v prohlíţeči zobrazit aţ po instalaci appletu Adobe SVG Viewer. Tato extenze však neumoţňuje zobrazovat přímo SVG ve formě jmenného prostoru. Tato část návrhu pracuje v prohlíţečích, které mají zabudovánu nativní podporu SVG. Díky tomu, ţe návrh počítá s parsováním XML dokumentů, je podmínkou aby prohlíţeč dokázal zobrazovat a zpracovávat XML dokumenty i s jejich tagy. Návrh byl vytvářen v prohlíţeči Mozzilla Firefox, ve kterém také dochází ke korektním zobrazování všech částí mapové aplikace. Zobrazení mapových znaků funguje správně i v prohlíţeči Opera. Návrh je dobrou ukázkou toho, ţe jednotlivé jazyky a formáty pouţívané v současnosti v oblasti webové kartografie a vůbec celého internetu je moţné vzájemně kombinovat. Jeho slabinou jsou omezené moţnosti správného fungování v některých internetových prohlíţečích.
47
SEZNAM POUŽITÝCH ZKRATEK API
Application Programming Interface
CSS
Cascading Style Sheets
DOM
Document Object Model
DrawML
Drawing Meta Language
DTD
Document Type Definition
EGM96
Earth Gravitational Model 1996
GIF
Graphics Interchange Format
GML
GeographicMarkup Language
HTML
Hypertext Markp Language
JML
Jump GML
JPG
Joint Photographic Experts Group
KML
Keyhole Markup Language
LandXML
Land eXtensible Markup Language
OGC
Open GIS Consorcium
PNG
Portable Network Graphic
PDF
Portable Document Format
SGML
Standard Generalized Markup Language
SLD
Styled Layer Descriptor
SMIL
Synchronized Multimedia Integration Language
SVG
Scalable Vector Graphics
X3D
Extensible 3D
XHTML
eXtensible HyperText Markup Language
XML
eXtensible Markup Language
XSLT
eXtensible Stylesheet Language
XSLT
eXtensible Stylesheet Language Transformations
VML
Vector Markup Language
W3C
World Wide Web Consorcium
WebCGM
Web Computer Graphics Metafile
WGS84
World Geodetic System 84
WMS
Web Map Service
48
Seznam použitých chemických značek CO
oxid uhelnatý
CO2
oxid uhličitý
CH4
methan
HFC
fluorované uhlovodíky
N2O
oxid dusný
NH3
amoniak
NMVOC
nemethanové těkavé organické sloučeniny
NOx
oxidy dusíku (NO a NO2)
NO
oxid dusnatý
NO2
oxid dusičitý
O3
ozon
PFC
perfluorované uhlovodíky
PM10
polétavý prach
SF6
fluorid sírový
SOx
oxidy síry (SO2 a SO3)
SO2
oxid siřičitý
SO3
oxid sírový
49
LITERATURA Knihy a tištěné materiály: [1]
ČEPČÁROVÁ, H.: On-line vizualizace prostorově vázaných www zdrojů. Diplomová práce, Masarykova univerzita, Přírodovědecká fakulta, Brno, 2009. 55 s. + CD-ROM. Vedoucí diplomové práce Karel Staněk.
[2]
DRÁPELA, M. V.: Vybrané kapitoly z kartografie. 1. vyd., SPN, Praha, 1983. 128 s.
[3]
DVOŘÁK, M.: Návrh komponentních mapových klíčů pro webovou kartografii. Bakalářská práce, Masarykova univerzita, Přírodovědecká fakulta, Brno, 2006. 41 s. + CD-ROM. Vedoucí bakalářské práce Karel Staněk.
[4]
KAŇOK, J.: Tematická kartografie. 1. vyd., Ostravská univerzita, Ostrava, 1999. 318 s. ISBN 80-7042-781-7.
[5]
KEPRTOVÁ, K.: Tvorba tematických map - Přednáškové texty. 2007. 41 s.
[6]
KOSEK, J.: XML pro každého: Podrobný průvodce. 1. vyd., Grada Publishing a.s., Praha, 2000. 164 s. ISBN 80-7169-860-1.
[7]
KOZEL, Jiří. Využití formátu SVG pro webovou kartografii. Bakalářská práce, Masarykova univerzita, Fakulta informatiky, Brno, 2006. 42 s. + CD-ROM. Vedoucí bakalárské práce Petr Glos.
[8]
POKORNÝ, J. a kol.: XML technologie principy a aplikace v praxi. 1. vyd., Grada Publishing a.s., Praha, 2008. 272 s. ISBN 978-80-247-2725-7.
[9]
POLLOCK, J.: JavaScript: Příručka programátora. SoftPress s.r.o., Praha, 2003. 560 s. ISBN 80-86497-44-5.
[10]
ŠKULTÉTY, R.: JavaScript: Kapesní přehled. 1. vyd., Computer Press, a.s., Brno, 2005. 120 s. ISBN 80-251-0884-8.
[11]
VOŢENÍLEK, V.: Aplikovaná kartografie I - tematické mapy. 1. vyd., Univerzita Palackého, 1999. 168 s. ISBN 80-7067-971-9
XML DOM Tutorial [on-line]. 2009, [leden - únor 2009]. Dostupné z WWW:
[30]
XSLT Tutorial [on-line]. 2009, [duben 2009]. Dostupné z WWW:
Data: [31]
Eurostat - Main Tables [on-line]. 2009, [únor 2009]. Dostupné z WWW:
[32]
UNdata – Greenhouse Gas Inventory Data [on-line]. 2009, [únor 2009]. Dostupné z WWW:
[33]
SCHUYLER E., GIBSON R., WALSH J.: Mapping Hacks [on-line]. 2009, [květen 2009]. Dostupné z WWW:
Software: Adobe Photoshop 7.0 CE Apple Safari 3.2.2 ArcMap 9.2, ESRI Google Earth 4.2.0205.5730 Google Chrome 1.0.154.64 InkScape 0.45 Microsoft Internet Explorer 8.0 Microsoft Word 2003 Microsoft Excel 2003 Mozzilla Firefox 3.0.10 PSPad 4.5.3 STATISTICA 8, StatSoft
52
SEZNAM PŘÍLOH Příl. 1. Tabulka jednotek a vah pro jejich přepočet Příl. 2. Seznam a vysvětlení pouţitých prvků jazyka JavaScript, DOM a Google Maps API Příl. 3. CD-ROM, volná
Obsah CD-ROM mapy/
mapy vyuţívající navrţené mapové znaky a data nutná k jejich zobrazení
mapy/data/
zdrojová data ve formátu XML
mapy/znaky/ neparametrizované znaky obrazky/
originály vloţených obrázků a další doplňující obrázky
Text/
text práce ve formátu PDF
Obsah CD je také možné procházet po otevření souboru _index.html
53
Příl. 1.
Souhrn převodních vztahů mezi jednotlivými látkami a váţenými součty skupin látek (zdroje: Eurostat[31] a UNdata[32]) Eurostat Vážené součty:
Jednotlivé látky:
Primární jednotky:
kyselé látky
skleníkové plyny
prekurzory troposférického ozonu
tis. tun kyselého ekvivalentu
mil. tun CO2 ekvivalentu
tis. tun NMVOC ekvivalentu
váhy CO2
mil. tun
váhy 1 0,11
N2O
21 . 10
tis. tun
0,02174
SOx (SO2, SO3) tis. tun SO2 ekvivalentu
0,03125
-
NH3
PFC
0,014 3
1
NOx (NO, NO2) tis. tun NO2 ekvivalentu HFC
3
310 . 10
NMVOC
UNdata
Eurostat
CO CH4
váhy
1,22 1
tis. tun CO2 ekvivalentu
1 1
SF6 .
0,05882
Poznámka: data za NH3 nejsou k dispozici, pro potřeby mapových znaků jsou počítány odečtením převedených hodnot (NOx a SOx) od celku (kyselých látek); HFC, PFC a SF6 jsou uloţeny přímo v příslušném ekvivalentu (jinak by se SF6 převádělo pomocí váhy 23900 . 103 a u HFC a PFC by se váhy různě lišili podle jednotlivých látek z těchto skupin)
GÚ PřF MU Brno 2009
Příl. 2.
JAVA SCRIPT a DOM Příkazy break for function if ... else return switch try ... catch ... finally var
předčasné ukončení cyklu, příkazu switch nebo návěstí vykonává příkazy dokud platí daná podmínka (má hodnotu true) deklarace funkce na základě vyhodnocení výrazu podmíněně vykoná kód předání návratové hodnoty z funkce, návrat z funkce vyhodnotí proměnnou a na základě jejího obsahu vykoná kód zachytávání a zpracování výjimky deklarace a inicializace proměnných
Objekty Globální objekt Metody isNaN() parseFloat()
zkontroluje zda je argument číslo nebo ne získá z řetězce reálné číslo
Objekt Math Metody abs() ceil() cos() floor() pow() round() sin() sqrt() Vlastnosti PI Objekt Window Metody alert() Objekt document (DOM) Metody appendChild() cloneNode() getElementById() getElementsByTagName() Vlastnosti documentElement imlementation innerHTML nodeValue Kolekce childNodes Objekt Select (DOM) Vlastnosti length
vypočítá absolutní hodnotu argumentu zaokrouhlí číslo (argument) směrem nahoru vypočítá kosinus argumentu zaokrouhlí číslo (argument) směrem dolů vypočítá mocninu xy zaokrouhlí číslo (argument) aritmeticky vypočítá sinus argumentu vypočítá druhou odmocninu argumentu konstanta π, poměr obvodu kruhu k jeho průměru
zobrazí správu ve výstraţném dialogovém okně
vloţí uzel jako poslední potomek udělá kopii uzlu a volitelně i s jeho následovníky vrátí odkaz na objekt s daným atributem ID vrátí kolekci objektů s danou značkou (tagem) odkaz na kořenový uzel dokumentu odkaz na objekt implementation pro daný dokument obsah HTML elementu hodnota uzlu pole HTML a textových elementů, které jsou potomky objektu
počet uzlů v kolekci
Objekt Element (DOM)
GÚ PřF MU Brno 2009
Příl. 2.
Metody getAttribute() hasAttribute() setAttribute() setAttributeNS()
vrátí hodnotu daného atributu identifikuje, zda má uzel atributy přidá zadaný atribut nebo změní hodnotu daného atributu přidá zadaný atribut nebo změní hodnotu daného atributu (jako součást jmenného prostoru)
Objekt DocumentImplementation (DOM) Metody createDocument() vytvoří nová objekt document (DOM) Události onclick onload onmousemove onmouseout onmouseover onunload
při klepnutím levým tlačítkem myši 1x při nahrávání webové stránky a všech jejich součástí při pohybu kurzorem myši při vzdálení se od určitého objektu kurzorem myši při přiblíţení se na určitý objektu kurzorem myši těsně před uzavřením okna
Operátory Aritmetické + * / % ++
sčítání odčítání násobení dělení modulo inkrement
Logické && ||
logické AND logické OR
Relační < > <= >=
menší neţ větší neţ menší nebo rovno větší nebo rovno
Rovnosti == !=
rovnost nerovnost
Ostatní . [] () new ,
přístup k vlastnosti index pole volání funkce vytvoření nového objektu vícenásobné vyhodnocení
(sestaveno podle: Škultéty, 2005, JavaScript Tutorial, 2009 a XML DOM Tutorial, 2009)
GÚ PřF MU Brno 2009
Příl. 2.
GOOGLE MAPS API třída GMap2 Kostruktor GMap2 () Metody addControl () addMapType () enableDoubleClickZoom() enableContinuousZoom() enableScrollWheelZoom() setCenter () getCurrentMapType() getZoom() getBounds() getPane() openInfoWindowHtml ()
vytváří novou mapou uvnitř zadaného elementu a se zadanými vlastnostmi přidává ovládací prvek zvoleného typu a na určené místo přidává nový typ mapového podkladu povoluje přibliţování dvojklikem myši povoluje kontinuální přibliţování povoluje přibliţování kolečkem myši nastaví střed mapového pole do zadané pozice (zem. souřadnice), při dané úrovni přiblíţení a typu map. podkladu vrací aktuální typ mapového podkladu vrací aktuální úroveň přiblíţení vrací zeměpisné souřadnice viditelného čtyrúhelníku vrací element DIV, ve které jsou objekty zadané úrovně (vrstvy) otevře informační okno na zadaných souřadnicích
Funkce GBrowserIsCompatible () vrací true, jestliţe prohlíţeč podporuje knihovnu GoogleMaps API třída GLatLng Konstruktor GLatLng () Metody lat () lng () třída GLatLngBounds Konstruktor GLatLngBounds Metody getNorthEast () getSouthWest () enum GMapPane G_MAP_MAP_PANE třída GPoint Konstruktor GPoint () Vlastnosti x y třída GSize Konstruktor GSize () Vlastnosti width height funkce Gunload
vytváří bod v zeměpisných souřadnicích vrací zeměpisnou šířku vrací zeměpisnou délku
vytvoří obdélník ze zeměpisných souřadnic JZ a SV rohu vrací zeměpisné souřadnice SV rohu vrací zeměpisné souřadnice JZ rohu
nejniţší úroveň (vrstva), těsně nad samotnou mapou
vytváří objekt GPoint, v pravoúhlých souřadnicích x-ová souřadnice y-ová souřadnice
vytváří objekt GSize šířka v pravoúhlých souřadnicích výška v pravoúhlých souřadnicích ruší probíhající události
GÚ PřF MU Brno 2009
Příl. 2.
Jmenný prostor GEvent Statické metody GEvent.addListener () GEvent.addDomListener () interface Gcontrol GScaleControl()
vytvoří metodu, která při určité události nad daným prvkem vyvolá zadanou funkci vytvoří metodu, která při určité události nad uzlem z DOM stromu vyvolá zadanou funkci
GMenuMapTypeControl() GOverviewMapControl()
vytváří grafické měřítko vytváří ovládací prvek umoţňující PAN (posun ve čtyřech směrech a ZOOM (přiblíţení a oddálení) vytváří přepínač mezi jednotlivými typy mapového podkladu vytváří přehledovou mapku
třída GControlPosition Konstruktor GControlPosition ()
definuje umístění a rozměry ovládacích prvků
GLargeMapControl()
třída GMapType Metody getProjection() getMaximumResolution() getMinimumResolution() Konstanty G_NORMAL_MAP G_SATELLITE_MAP
vrací do mapy zobrazení zvoleného typu mapového podkladu vrací do mapy maximální úroveň přiblíţení vrací do mapy minimální úroveň přiblíţení implicitní typ mapového podkladu mapa sloţená z druţicových snímků
G_HYBRID_MAP
hybridní mapa (kombinace druţicových snímků a implicitní mapy)
G_PHYSICAL_MAP
terénní mapa (stínovaný reliéf a vrstevnice)
třída GMercatorProjection Konstruktor GMercatorProjection () fromLatLngToPixel ()
vytváří Mercatorovo zobrazení pro danou úroveň přiblíţení vrací pravoúhlé souřadnice pro dané zeměpisné souřadnice a úroveň přiblíţení
jmenný prostor GXml Statické metody GXml.parse ()
parsuje daný řetězec jako XML a vrací ho prostřednictvím DOM