Webové rozhrani pro on-line GIS

Podobné dokumenty
GeoHosting. Martin Vlk. (vypusťte svoje data do světa) Help forest s.r.o. člen skupiny WirelessInfo 2008

1 Webový server, instalace PHP a MySQL 13

IS pro podporu BOZP na FIT ČVUT

INFORMAČNÍ SYSTÉMY NA WEBU

Publikování map na webu - WMS

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

Alena Malovaná, MAL305

Jádrem systému je modul GSFrameWork, který je poskytovatelem zejména těchto služeb:

DELTA - STŘEDNÍ ŠKOLA INFORMATIKY A EKONOMIE, s.r.o. Obor informační technologie AJAX ESHOP. Maturitní projekt. Třída:

1. Webový server, instalace PHP a MySQL 13

Mapové služby podle OGC

PHP framework Nette. Kapitola Úvod. 1.2 Architektura Nette

Současný svět Projekt č. CZ.2.17/3.1.00/32038, podpořený Evropským sociálním fondem v rámci Operačního programu Praha adaptabilita

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

1 Administrace systému Moduly Skupiny atributů Atributy Hodnoty atributů... 4

MBI - technologická realizace modelu

GIS a nemapové služby

Otevřený katastr (OK)

Maturitní projekt do IVT Pavel Doleček

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320 M A T U R I T N Í T É M A T A P Ř E D M Ě T U

ArcGIS Server 10. Řešení pro sdílení geodat

ArcGIS Server 10.1/10.2

E-learningovýsystém Moodle

TECHNOLOGIE ELASTICKÉ KONFORMNÍ TRANSFORMACE RASTROVÝCH OBRAZŮ

Formy komunikace s knihovnami

MATLABLINK - VZDÁLENÉ OVLÁDÁNÍ A MONITOROVÁNÍ TECHNOLOGICKÝCH PROCESŮ

Webové služby pro prostorová data

internetu v rámci výuky

Olga Rudikova 2. ročník APIN

SRSW4IT Inventarizační SW. Prezentace aplikace. Vedoucí DP: ing. Lukáš Macura Autor: Bc. Petr Mrůzek

8.2 Používání a tvorba databází

Střední průmyslová škola elektrotechnická Praha 10, V Úžlabině 320

RESTful API TAMZ 1. Cvičení 11

SA Služby IS DMVS LK

Databázové aplikace pro internetové prostředí PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Mapový server Marushka. Technický profil

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

Systém JSR představuje kompletní řešení pro webové stránky malého a středního rozsahu.

PostGIS. Luboš Hejduk, Petr Sedlář 2007

3 MOŽNÉ PŘÍSTUPY K TVORBĚ APLIKACÍ NAD SVG DOKUMENTY

Jakub Šesták. ESEJ DO PŘEDMĚTU DIGITÁLNÍ KNIHOVNY

Mapové servery. Novák Petr Katedra informatiky a geoinformatiky Fakulta životního prostředí Univerzita J. E. Purkyně v Ústí nad Labem.

Systém elektronického rádce v životních situacích portálu

rychlý vývoj webových aplikací nezávislých na platformě Jiří Kosek

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

ArcGIS for Server. V oblasti správy, vizualizace a zpracování prostorových dat nabízí ArcGIS for Server tyto možnosti:

Část IV - Bezpečnost 21. Kapitola 19 Bezpečnostní model ASP.NET 23

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

ArcGIS Online Subscription

Strategie ochrany před negativními dopady povodní a erozními jevy přírodě blízkými opatřeními v České republice

ANOTACE vytvořených/inovovaných materiálů

Elektronická podpora výuky předmětu Komprese dat

Instalace a konfigurace web serveru. WA1 Martin Klíma

Vektorové dlaždice. a jejich využití pro vizualizaci dat katastru nemovitostí. Filip Zavadil, Cleerio s.r.o

Úvod do tvorby internetových aplikací

Vzdělávací obsah vyučovacího předmětu

STŘEDNÍ ŠKOLA INFORMAČNÍCH TECHNOLOGIÍ A SOCIÁLNÍ PÉČE

Individuální projekt z předmětu webových stránek 2012/ Anketa

Po prvním spuštění Chrome Vás prohlížeč vyzve, aby jste zadali své přihlašovací údaje do účtu Google. Proč to udělat? Máte několik výhod:

Georeferencované mapové podklady z WMS služeb

Webové rozhraní pro datové úložiště. Obhajoba bakalářské práce Radek Šipka, jaro 2009

Možnosti využití dat RÚIAN poskytovaných VDP pomocí webových služeb

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Klíčová slova: dynamické internetové stránky, HTML, CSS, PHP, SQL, MySQL,

Mapa Česka:

Hardware Různé počítačové platformy (personální počítače, pracovní stanice, víceuživatelské systémy) Požadavek na konkrétní vstupní a výstupní zařízen

Novinky verze systému Spisové služby (SpS) e-spis LITE

ROZHRANÍ PRO ZPŘÍSTUPNĚNÍ A PREZENTACI ZNALOSTNÍ DATABÁZE INTERPI UŽIVATELSKÁ PŘÍRUČKA

Internetové služby isenzor

Uživatelská dokumentace

FOSS4G úspěšné projekty

Už ivatelska dokumentace

Vzdálená správa v cloudu až pro 250 počítačů

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

Novinky. Autodesk Vault helpdesk.graitec.cz,

Počítačová Podpora Studia. Přednáška 5 Úvod do html a některých souvisejících IT. Web jako platforma pro vývoj aplikací.

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ SPOLEČNOST DECADIC PROJEKT FRAMETRIX

Význam a způsoby sdílení geodat. Ing. Petr Seidl, CSc. ARCDATA PRAHA, s.r.o.

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

Nastavení provozního prostředí webového prohlížeče pro aplikaci

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

DOKUMENTACE REDAKČNÍHO SYSTÉMU PINYA

Podpořeno grantem FRVŠ číslo 2308G1/2012. Mapové služby ArcGIS Server 10.1

Šifrování Autentizace Bezpečnostní slabiny. Bezpečnost. Lenka Kosková Třísková, NTI TUL. 22. března 2013

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

WWW dotazovací služby pro prostorová data URM. Jiří Čtyroký Útvar rozvoje hl. m. Prahy

1. Technická specifikace části B:

Evidence a správa kanalizace v GIS Kompas 3.2

Digitální mapa veřejné správy Plzeňského kraje - část II.

Integrujte. Sdílejte. Publikujte... Upoutejte...

Evidence městského mobiliáře v GIS Kompas 3.2

Databázové a informační systémy

Geoportál DMVS využití a další rozvoj

Platforma ArcGIS. Platforma ArcGIS se skládá ze čtyř komponent: dat, zdrojů, portálu a aplikací.

Transkript:

Mendelova univerzita v Brně Provozně ekonomická fakulta Webové rozhrani pro on-line GIS Bakalářská práce Vedoucí práce: Ing. Jiří Fejfar, Ph.D. Filip Balák Brno 2014

Na tomto místě bych chtěl poděkovat především vedoucímu bakalářské práce Ing. Jiřímu Fejfarovi, Ph.D. za odborné rady a poskytnuté konzultace.

Čestné prohlášení Prohlašuji, že jsem tuto práci: Webové rozhrani pro on-line GIS vypracoval samostatně a veškeré použité prameny a informace jsou uvedeny v seznamu použité literatury. Souhlasím, aby moje práce byla zveřejněna v souladu s 47b zákona č. 111/1998 Sb., o vysokých školách ve znění pozdějších předpisů, a v souladu s platnou Směrnicí o zveřejňování vysokoškolských závěrečných prací. Jsem si vědom, že se na moji práci vztahuje zákon č. 121/2000 Sb., autorský zákon, a že Mendelova univerzita v Brně má právo na uzavření licenční smlouvy a užití této práce jako školního díla podle 60 odst. 1 Autorského zákona. Dále se zavazuji, že před sepsáním licenční smlouvy o využití díla jinou osobou (subjektem) si vyžádám písemné stanovisko univerzity o tom, že předmětná licenční smlouva není v rozporu s oprávněnými zájmy univerzity, a zavazuji se uhradit případný příspěvek na úhradu nákladů spojených se vznikem díla, a to až do jejich skutečné výše. V Brně dne 21. května 2014...

5 Abstract BALÁK, Filip. Web interface for on-line GIS. Brno, 2014. Bachelor thesis. Mendelova univerzita v Brně. This work concerns creating a web interface for displaying maps with standards: WMS, WFS, and WPS. The basic standards for working with maps are discussed in first part. In next part are introduced technologies for building Web applications, and on the basis of those technologies is designed and implemented a web application. This application is subsequently tested and evaluated for use in the business. Abstrakt BALÁK, Filip. Webové rozhraní pro on-line GIS. Brno, 2014. Bakalářská práce. Mendelova univerzita v Brně. Tato práce se zabývá vytvořením webového rozhraní pro zobrazení map s podporou standardů: WMS, WFS a WPS. Nejprve rozebírá základní standardy pro práci s mapami, dále jsou představený technologie pro tvorbu webových aplikací a na jejich základě navrhnuta a implementována webová aplikace. Tato aplikace je následně otestována a zhodnocena pro použití v podniku.

OBSAH 6 Obsah 1 Úvod a cíl práce 9 1.1 Úvod.................................... 9 1.2 Cíl práce.................................. 9 2 Standardy a komunikace v oblasti GIS 10 2.1 OGC.................................... 10 2.1.1 Web Map Service......................... 10 2.1.2 Web Feature Service....................... 11 2.1.3 Web Processing Service..................... 11 2.2 ArcGIS for Server služby......................... 12 3 Technologie pro tvorbu GIS aplikací v prostředí internetu 13 3.1 Databáze................................. 13 3.1.1 SQL................................ 13 3.1.2 PostgreSQL............................ 13 3.1.3 PostGIS.............................. 14 3.2 Python................................... 14 3.2.1 Django.............................. 14 3.2.2 GeoDjango............................ 14 3.3 Javascript................................. 15 3.3.1 AJAX............................... 15 3.3.2 jquery............................... 15 3.3.3 Dojo Toolkit........................... 16 3.4 PHP.................................... 17 3.4.1 Nette Framework......................... 17 3.4.2 Mapito.............................. 18 3.5 Nástroje pro práci s mapou....................... 18 3.5.1 ArcGIS API for JavaScript................... 18 3.5.2 OpenLayers............................ 18 3.5.3 Mapnik.............................. 19 3.5.4 Google Maps API........................ 19 3.6 Nástroje pro distribuci mapových vrstev................ 19 3.6.1 MapServer............................ 19 3.6.2 Geoserver............................. 20 3.6.3 GeoNode............................. 20 3.7 Kritéria porovnání............................ 20 3.8 Výběr nejvhodnější varianty....................... 21 4 Návrh webové aplikace pracující s mapovými standarty 23 4.1 Návrh řešení............................... 23 4.2 Způsob užití aplikace........................... 24

OBSAH 7 5 Implementace řešení 25 5.1 Serverová část............................... 25 5.2 Nastavení serveru a databáze...................... 25 5.3 Nastavení Nette.............................. 25 5.4 Datová vrstva............................... 26 5.4.1 users................................ 26 5.4.2 projects.............................. 27 5.4.3 files................................ 27 5.4.4 layers............................... 27 5.4.5 services.............................. 28 5.4.6 Tabulky s geometrií pro mapové služby............. 28 5.5 Aplikační vrstva............................. 29 5.5.1 Zabezpečení............................ 29 5.5.2 Registrace uživatelů....................... 30 5.6 Správa mapových projektů........................ 31 5.6.1 Zakládání mapových projektů.................. 31 5.6.2 Generování MapFile....................... 31 5.7 Prezentační vrstva (Pohled)....................... 32 5.7.1 Mapová aplikace......................... 32 5.8 Mapové panely.............................. 32 5.8.1 Panel Mapové vrstvy....................... 32 5.8.2 Panel pro práci s WPS...................... 33 5.8.3 Implementace ukládání mapových projektů.......... 33 5.8.4 Strom vrstev........................... 34 5.9 Testování................................. 35 5.9.1 Publikování WMS a WPS.................... 35 5.9.2 Založení nového mapového projektu.............. 36 5.9.3 Vložení vrstvy do projektu a její zobrazení........... 36 5.9.4 Měření pomocí WPS....................... 37 6 Zhodnocení nasazení aplikace v podniku 39 6.1 Uplatnění aplikace............................ 39 6.2 Cena realizace............................... 39 7 Závěr 40 8 Reference 41 Přílohy 46 A DVD 47

SEZNAM OBRÁZKŮ 8 Seznam obrázků Obrázek 1: Databázové schéma použité v aplikaci. 23 Obrázek 2: Use Case diagram implementované aplikace. 24 Obrázek 3: Seznam vytvořených mapových služeb. 35 Obrázek 4: Ukázka z výpisu GetCapabilities u publikované WMS. 36 Obrázek 5: Ukázka z výpisu GetCapabilities u publikované WFS. 36 Obrázek 6: Vytvořená mapová aplikace. 37 Obrázek 7: Ukázka z měření. 37

1 ÚVOD A CÍL PRÁCE 9 1 Úvod a cíl práce 1.1 Úvod V současné době je možné řešit mnoho problémů pomocí informačních technologií (IT). V mnoha podnicích jsou dnes klíčovým nástrojem pro práci počítačové systémy, které zajišťují uchovávání a manipulaci s informacemi. Tyto informační systémy jsou pak často dostupné přes internet. Díky tomu mohou uživatelé snadno využívat výhod informačních systémů, jak v práci, tak z pohodlí vlastního domova. Je jim umožněno zakládat si uživatelské účty a komunikovat se serverem, ze kterého mohou získávat informace. Speciálním druhem informačních systémů jsou potom systémy pracující s geoprostorovými daty geografické informační systémy (GIS) (GIS, 2014). Geografické informační systémy jsou dnes oblíbeným nástrojem, který je hojně využíván jak v podnikové tak nepodnikové sféře. S rozvojem v oblasti informačních technologií a internetu jsou stále dostupnější a využitelnější v praxi. Díky tomu bylo vytvořeno velké množství nástrojů, které implementují danou problematiku a umožnují vytvářet uživatelsky přívětivá rozhraní. Vznikají uživatelská rozhraní, která mohou být tvořena jednou vrstvou aplikace, ale obecně jsou využívány vícevrstvé architektury. Jako vícevrstvé se označují proto, že funkčnost aplikace je rozdělena mezi několik vzájemně spolupracujících vrstev, které spolu komunikují přes definované rozhraní. Nejběžnějším příkladem vícevrstvé architektury je architektura třívrstvá. V takovém případě rozlišujeme vrstvu, která se stará o uživatelské rozhraní, vlastní logiku aplikace a databázi se serverem (CleverAndSmart, 2008). V případě webových GIS aplikací jsou vícevrstvé architektury takřka pravidlem, protože všechny mapové vrstvy využívající standardy WMS nebo WFS jsou uloženy v nějaké databázi. Tvorba takové aplikace od začátku by byla časově velmi náročná, proto se většinou využívá různých pomocných nástrojů, případně i hotových řešení. 1.2 Cíl práce Hlavním cílem této bakalářské práce je tvorba grafického uživatelského rozhraní pro zobrazení a sdílení mapových vrstev ve formátech WMS a WFS a zpracovaní mapových dat přes WPS. Aplikace by měla běžet ve webovém prohlížeči. Budou popsány a zhodnoceny jednotlivé technologie, které je možné využít pro implementaci. Na hotové aplikaci se potom otestuje navrhnuté zadání.

2 STANDARDY A KOMUNIKACE V OBLASTI GIS 10 2 Standardy a komunikace v oblasti GIS 2.1 OGC Open Geospatial Consortium (OGC) je mezinárodní průmyslové konsorcium skládající se ze 481 firem, vládních agentur a vysokých škol, které se snaží vytvářet a poskytovat veřejně dostupné normy. OGC Standardy podporují interoperabilní řešení, která umožňují pracovat s geoprostorovými informacemi v prostředí internetu (OGC, 2013). Tyto standardy podporují vývojáře k tvorbě komplexních geoprostorových dat a služeb, které budou dostupné z velkého množství aplikací. OGC a OpenGIS jsou zaregistrované ochranné známky Open Geospatial Consortium (OGC). OGC je značka spojená s normami a dokumenty předloženými OGC. Mezi nejdůležitější OGC standardy patří WMS (Web Map Service) a WFS (Web Feature Service). V této práci však bude využit i standard WPS (Web Processing Service). Všechny tyto standardy budou podrobněji popsány v dalších kapitolách. 2.1.1 Web Map Service OpenGIS Web Map Service Interface Standard (WMS) poskytuje jednoduché http rozhraní, pracující na principu klient-server, pro zasílání georeferencovaných mapových obrázků z jedné nebo více geoprostorových databází, které tato data poskytují. Georeferencováním v tomto případě můžeme chápat jako jednoznačně daný referenční souřadnicový systém a souřadnicový obdélník (box), který obsahuje požadovaný obrázek, v tomto systému. Nejčastěji se pro označení souřadnicového referenčního systému využívá dataset EPSG. WMS je standard vyvinutý a dále rozšiřovaný Open Geospatial Consortium (OGC). WMS požadavek (WMS request) definuje geografickou vrstvu a oblast zájmu určenou ke zpracování. Odpovědí na požadavek (WMS response) je jeden nebo více georeferencovaných obrázků, které mohou být zobrazeny ve webové aplikaci (Web Map Service, 2013). Rozhraní také umožňuje specifikovat, jestli vrácený obrázek bude průhledný a bude tak možné kombinovat vrstvy z několika serverů. Pomocí této služby můžeme získávat rastrová data v několika formátech (např. PNG, GIF nebo JPEG). Jako zdroj dat pro WMS může sloužit soubor s geoprostorovými daty nebo geoprostorová databáze. Operace (OpenGIS Web Map Server Implementation Specification, 2006): GetCapabilities Vrátí metadata služby. GetMap Vrátí mapu zadaného formátu. GetFeatureInfo Poskytne informace o vlastnostech map, které byly požadovány před voláním této operace. Lze použít jen u vrstev, které mají staven parametr queryable= 1.

2.1 OGC 11 2.1.2 Web Feature Service The Open Geospatial Consortium Web Feature Service Interface Standard (WFS) poskytuje rozhraní umožňující dotazovat se na geografické vlastnosti (features) umístěné na webu. Geografické vlastnosti jsou psané v GML formátu, což je značkovací jazyk založený na XML, který se používá pro zachycení prostorových informací. GML je také součástí OGC standardu (Web Feature Service Implementation Specification, 2005). V uložišti WFS služby se nachází georeferencovaná vektorová data (SHP, geoprostorové databáze). Pomocí této služby můžeme nejenom získávat data, ale zároveň je i měnit (je-li to povoleno). Ke komunikaci mezi serverem a klientem se využívá zasílání metod GET a POST přes Hyper Text Transfer Protocol (HTTP). Operace: GetCapabilities WFS musí být schopna vrátit své vlastnosti. Musí vrátit typy vlastností, které služba obsahuje a jaké operace s nimi lze provádět. DescribeFeatureType Popíše strukturu všech typů vlastností, které služba poskytuje. GetFeature Vrátí instanci konkrétní vlastnosti. GetGmlObject Vrátí instanci vlastnosti ve formátu GML. Transaction Obsahuje operace, které modifikují vlastnosti. Jsou to create, update a delete. LockFeature Uzamkne jednu nebo více instancí daného typu vlastnosti po dobu trvání transakce. 2.1.3 Web Processing Service OpenGIS Web Processing Service Interface Standard (WPS) určuje pravidla pro standardizaci vstupů a výstupů, které využívají služby zpracovávající geoprostorová data. Může zpracovávat rastrová i vektorová data a zvládá nad daty i složité analýzy. Komunikace se službou probíhá přes HTTP pomocí zasílání XML dokumentů přes metody POST a GET. Standard také definuje způsob, kterým si klient může nastavit běh procesu a jak budou výstupy z procesu ošetřeny. Údaje požadované WPS mohou být nahrány ze sítě nebo ze serveru, kde WPS běží. (Web Processing Service, 2013). Operace: GetCapabilities Vrátí metadata, která popisují implementaci. DescribeProcess Operace vrátí detailní popis služby obsahující popis vstupů, výstupů a formátů, které využívají.

2.2 ArcGIS for Server služby 12 Execute Spustí proces definovaný ve službě, který převede zadané vstupy na výstupy. 2.2 ArcGIS for Server služby ArcGIS for Server (AGS) je komplexní nástroj umožňující pořizování, správu, analýzu a vizualizaci prostorových dat v prostředí internetu. ArcGIS for Server je obvykle nasazován v rámci organizační architektury orientované na služby (SOA) nebo v prostředí cloud computingu (ESRI, 2010). Jednou z hlavních funkcí AGS je poskytování mapových služeb. AGS dokáže poskytovat jak rastrová, tak vektorová data. Data dokáže ukládat do paměti a vektorovým vrstvám přidat tabulky hodnot (ESRI, 2013). Tyto služby používají normy firmy ESRI, které se liší od těch, co používá OGC, ale i tak je kromě ESRI produktů mohou využívat a zobrazovat další GIS aplikace a nástroje (např. OpenLayers).

3 TECHNOLOGIE PRO TVORBU GIS APLIKACÍ V PROSTŘEDÍ INTERNETU 13 3 Technologie pro tvorbu GIS aplikací v prostředí internetu Tato část je zaměřena na představení úplného seznamu programového vybavení, které jsem v této práci zvažoval využít. Jsou zde také popsány programovací jazyky, mezi kterými jsem se rozhodoval. 3.1 Databáze Pod pojmem databáze si lze představit soubor dat, který slouží pro popis reálného světa. Entita je pak prvek reálného světa, který je popsán svými charakteristikami (vlastnostmi). Ty se většinou považují za atributy. Dalším důležitým pojmem je relační databáze. Relaci si lze představit jako tabulku, která se skládá ze sloupců a řádků. Sloupce odpovídají jednotlivým vlastnostem (atributům) entity. Údaje v jednom řádku tabulky reprezentuje konkrétní záznam. Tabulka je základním stavebním kamenem pro budování celé databáze. Relace tedy odpovídá celé tabulce a prvku relace odpovídá jeden konkrétní řádek. Jeden řádek bývá často nazýván databázovým záznamem. Soubor tabulek (relací) pak tvoří celou databázi (relační schéma) (Skřivan, 2000). Databáze se tedy používají pro přímý přístup k datům, která se pomocí tzv. SQL dotazů dají snadno extrahovat podle zadaných kritérií. 3.1.1 SQL SQL je standardizovaný dotazovací jazyk používaný pro práci s daty v relačních databázích. SQL je zkratka anglických slov Structured Query Language (strukturovaný dotazovací jazyk). Jazyk v sobě zahrnuje nástroje pro tvorbu databází (tabulek) a dále nástroje na manipulaci s daty (vkládání dat, aktualizace, mazání a vyhledávání informací). SQL patří mezi tzv. deklarativní programovací jazyky, což v praxi znamená, že kód jazyka SQL se nepíše v žádném samostatném programu, ale vkládá se do jiného programovacího jazyka, který je již procedurální (Koch, 2006). Jazyk SQL se skládá z několika částí. Některé části jsou určeny pro administrátory a návrháře databázových systémů, jiné pak pro koncové uživatele a programátory. Jednou z těchto částí je jazyk DML - Data Manipulation Language, který obsahuje základní příkazy INSERT, UPDATE, DELETE a nejpoužívanější příkaz SELECT (Skřivan, 2000). S jazykem DML pracují nejvíce koncoví uživatelé a programátoři databázových aplikací. 3.1.2 PostgreSQL PostgreSQL je plnohodnotným relačním databázovým systémem s otevřeným zdrojovým kódem. Má za sebou více než patnáct let aktivního vývoje a má vynikající

3.2 Python 14 pověst pro svou spolehlivost a bezpečnost. Běží na všech rozšířených operačních systémech včetně Linuxu, UNIX (AIX, BSD, HP-UX, SGI-IRIX, Mac OS X, Solaris, Tru64) a Windows (PostgreSQL, 2012). 3.1.3 PostGIS PostGIS je rozšíření pro PostgreSQL databázi přidávající podporu pro prostorové informace, nad kterými tak mohou být prováděny SQL dotazy. PostGIS implementuje specifikaci Simple Features for SQL konsorcia Open Geospatial Consortium (Postgis, 2013). 3.2 Python Python je dynamický jazyk, který podporuje procedurální i objektově orientované programování. Nabízí významnou podporu k integraci s ostatními jazyky a nástroji a přichází s mnoha standardními knihovnami (Lutz, 2010). Je vyvíjen jako open source projekt, který zdarma nabízí instalační balíky pro většinu běžných platforem a ve většině distribucí systému Linux je Python součástí základní instalace. 3.2.1 Django Django je vysoko-úrovňový open-source webový framework, který podporuje rychlý vývoj a čistý, pragmatický design. Drží se architektury Model-viewer-controller. Umožňuje dynamické generování administrací projektů (Django documentation, 2012). Jádro se skládá z objektově-relačního mapperu, který je prostředníkem mezi datovými modely (definované jako třídy Pythonu), relační databází ( Model ) a systémem pro zpracování žádostí s webovým systémem šablon ( View ) Zároveň obsahuje na regulárních výrazech založené zpracovávání URL (program Controller ). Součástí distribuce je také jednoduchý webový server používaný pro vývoj, podpora pro práci s JSON a XML, rozšiřitelná autentizace a další součásti. Framework zároveň řeší bezpečnost. Jsou zde aplikovány nástroje pro zmírnění útoků, jako jsou skriptování napříč sítěmi, SQL injection a hádání hesel (Security in Django, 2013). 3.2.2 GeoDjango GeoDjango je součástí instalace Django frameworku. Hlavním účelem této sady nástrojů je usnadnění tvorby webových aplikací, které pracují s geoprostorovými daty. Součástí GeoDjanga jsou dnes již nezbytné open source nástroje pro konverzi, manipulaci a ukládání geoprostorových informací: GDAL, GEOS, and PostGIS (Springmeyer, 2009). Django Model API, které umožňuje definovat relační databázové schéma, jako jednoduché třídy Pythonu, jsou rozšířeny o podporu GeoDjanga. Podporují všechny

3.3 Javascript 15 datové typy popsané OpenGIS Simple Features Specification a přidávají vlastní metody, které zpracovávají prostorová data automaticky, když je záznam vytvořen nebo aktualizován. Tyto metody umožňují snadný import dat do databáze z libovolného podporovaného OGR vektorovém formátu, stejně jako automatické generování Django modelů prostřednictvím introspekce všech datových vrstev, typů polí a funkcí. Šablonovací systém Djanga, použitý k vybudování obsahu HTML je rozšířen o vestavěné generování šablon KML a jazyka JavaScript, které umožňuje snadno vložit dynamickou Google mapu nebo OpenLayers mapu v rámci webové stránky (The syndication feed framework, 2013). Automatické rozhraní pro administraci v Djangu, které vytváří okamžitý a bezpečný webový panel pro vytváření a editaci dat je obohaceno o přizpůsobitelné rozhraní OpenLayers pro editaci vektorových map. Toto rozhraní podporuje úpravy pro každý typ prostorových dat s funkcí automatické reprojekce, validací geometrie a podkladové vrstvy OpenStreetMap. Django Fixtures systém pracuje s prostorovými daty umožňujícími serializaci, zálohování a synchronizaci všech databázových tabulek mezi servery a weby pomocí XML, JSON nebo YAML formátů (Springmeyer, 2009). Další výhodou je přidání syndication feed modulu, který usnadňuje publikování dat ve formátech RSS a Atom. 3.3 Javascript JavaScript je objektový skriptovací jazyk vyvinutý firmou Netscape, který se používá v internetových stránkách. Může pracovat jak procedurálně, tak objektově (About JavaScript, 2013). Je závislý na prohlížeči (uživatel si ho může vypnout). V různých verzích prohlížečů nemusí skript vždy korektně fungovat. Tento problém částečně řeší frameworky postavené na JavaScriptu. 3.3.1 AJAX AJAX (zkratka pro Asynchronous Javascript and XML) je skupina technologií využívaných na straně klienta pro tvorbu asynchronních webových aplikací. Pomocí AJAXu je možné z webové stránky zasílat a získávat data bez nutnosti znovu načíst stránku. Komunikace mezi serverem a klientem probíhá pomocí metod GET a POST přes HTTP. Podporovány jsou různé typy řetězců. Přestože je podle názvu možné posílat data ve formátu XML, tak je doporučováno spíše používat JSON (AJAX wikipedia, 2014). 3.3.2 jquery JavaScript má záměrně jednoduché základní API. Jeho API na straně klienta je však složité a mezi jednotlivými prohlížeči jsou napsané skripty často nekompati-

3.3 Javascript 16 bilní. Aplikace se v různých prohlížečích díky tomu chovají rozdílně. Příchod IE9 odstraňuje nejhorší z těchto problémů, ale mnoha programátorům přijde snazší napsat webovou aplikaci pomocí JavaScriptového frameworku nebo knihovny, která zjednodušuje běžné operace a odstraňuje rozdíly mezi prohlížeči. Jedním z nejoblíbenějších frameworků s touto funkcionalitou je jquery. jquery usnadňuje hledání prvků v dokumentu. U nich pak umožnuje přidání obsahu, editovaní HTML atributů a CSS vlastností, definování obslužných rutin událostí (event. handlers) a provádět animace. Má také Ajaxové nástroje pro vytváření dynamických HTTP požadavků a obecně jakýchkoliv užitečných funkcí pro práci s objekty a pole (Flanagan, 2011). Jak už název napovídá, jquery je knihovna zaměřená na dotazy. Typický dotaz používá CSS selektor k identifikaci množiny prvků dokumentu a vrátí objekt, který takové prvky představuje. Tento objekt pak poskytuje užitečné metody pro práci s odpovídajícími prvky jako se skupinou. Kdykoli je to možné, tyto metody vrátí objekt, na kterém jsou vykonané, což umožňuje stručný způsob řetězení idiomů, které mají být použity. Knihovna JQuery definuje jednu globální funkci s názvem jquery(). Jedná se o nejdůležitější funkci. Používá se tak často, že knihovna definuje globální symbol $ jako jejího zástupce (Flanagan, 2011). Přes tuto funkci probíhají všechny operace související s jquery v klientské části. 3.3.3 Dojo Toolkit Dojo Toolkit je open-source modulární JavaScriptová knihovna navržena tak, aby urychlila vývoj webových aplikací a snížila problémy způsobené se zobrazováním JavaScriptu v různých prohlížečích. Za tímto účelem byl vytvořen framework pro definování modulů a řízení jejich vzájemných závislostí Tento framework poskytuje nástroje pro optimalizaci JavaScriptu a CSS, generování dokumentace a testování jednotlivých částí, zlepšuje internalizaci a dostupnost. Zároveň také poskytuje bohatou sadu pomocných tříd pro běžnou potřebu a pomůcky (widgets) komunikující s uživatelským rozhraním. Pomůcky jsou komponenty, které obsahují JavaScriptový kód, HTML značky a definice CSS stylů. Obvykle mají podobu viditelnou na obrazovce a obsahují logické návaznosti na HTML, CSS, JavaScript a statické zdroje. Jsou reprezentovány jedním subjektem, se kterým se může manipulovat, udržovat ho a přenášet jako jakýkoliv soubor. (Russel, 2008) Dojo se skládá z několika částí: Base Vysoce kompaktní a optimalizovaná knihovna, která je základem pro všechno ostatní v Doju. Mimo jiné poskytuje pohodlný jazyk podporující dědičnost, AJAXové nástroje a balíčkovací systém, který vám umožní dostat se ke zdrojům za chodu místo toho, aby je získával při načtení stránky (Russel, 2008).

3.4 PHP 17 Core Tato knihovna je postavena na Base a obsahuje další nástroje pro práci s pomůcky, pokročilé animace a efekty, drag-and-drop zařízení, internacionalizaci (i18n), správu cookies, a další (Russel, 2008). Dijit Název Dijit vznikl jako zkratka z Dojo widget. Tato knihovna obsahuje již hotové pomůcky, které je možné konfigurovat nebo přímo použít. Velkou výhodou Doja je podpora AMD (Asynchronous Module Definition), která je součástí frameworku od verze 1.7. Jak už název napovídá, jedná se o nahrávání modulů asynchronně, což vede k výraznému zrychlení aplikací. 3.4 PHP PHP (rekurzivní zkratka PHP: Hypertext Preprocessor) je široce využívaný open source skriptovací jazyk, který je obzvláště vhodný pro vývoj webových aplikací a lze jej vložit do HTML. Kód je spouštěn na serveru, kde generuje HTML stránky, které jsou odeslány klientovi (PHP, 2013). Klient obdrží výsledky takového skriptu, ale nebude vědět, jak vypadal zdrojový kód. Jednou z největších výhod PHP je práce s databázemi. Princip práce s databází v PHP skriptech je velice jednoduchý. Skládá se z několika kroků (Kosek, 2001): Připojení k databázi vybere se, ke kterému serveru se chceme připojit. Dále se určí jméno a heslo, pro databázi. Zaslání SQL příkazu serveru se zašle libovolný SQL příkaz. Zpracování výsledku server vrátí výsledek předchozího SQL příkazu. Pokud byl zaslán příkaz SELECT, tak se postupně vrátí jednotlivé řádky výsledku, nad kterými je možné provádět další operace například je vytisknout jako součást webové stránky. 3.4.1 Nette Framework Tento Framework je velmi účinný nástroj pro tvorbu složitějších webových aplikací postavených na PHP. Využívá Model-View-Controller (MVC) architekturu, která vznikla z potřeby oddělit u aplikací s grafickým rozhraním kód obsluhy (controller) od kódu aplikační logiky (model) a od kódu zobrazujícího data (view). Tím aplikaci zpřehledňuje, usnadňuje budoucí vývoj a umožňuje testování jednotlivých části zvlášť. (MVC aplikace presentery, 2013) Nette už obsahuje uživatelský systém, ladící nástroje a nástroje pro zabezpečení. Řeší také komunikaci s databázemi a umožňuje snadný přechod z jednoho databázového systému do druhého.

3.5 Nástroje pro práci s mapou 18 3.4.2 Mapito Projekt Mapito je funkční rozhraní pro geografické informační systémy napsané v PHP. Je vyvíjen Masarykovou univerzitou v Brně a jeho původním autorem Mgr. Jakubem Dubrovským. Hlavním cílem Mapita je usnadnění práce s geoprostorovými daty a jejich správy v prostorové databázi PostGIS. Mapito je pořád ve vývoji, ale již nyní umožňuje efektivní práci s vektorovými i rastrovými daty v PostGIS databázi (Dubrovský, 2012). Do budoucna se plánuje i podpora pro práci s WPS. 3.5 Nástroje pro práci s mapou 3.5.1 ArcGIS API for JavaScript Firma ESRI poskytuje vývojářům zdarma pro nekomerční, nebo výukové využití sadu nástrojů pro vývoj mapových aplikací v prostředí internetu. Tyto nástroje jsou vysoce výkonnou alternativou k jiným open source nástrojům. ArcGIS API podporuje většinu základních formátů postavených na OGC, kromě Web Processing Service (WPS). Tuto službu nahrazuje svou vlastní geoprocessingovou službou. Je zde zároveň rozšířená podpora pro AGS, pro kterou je zde napsáno několik speciálních metod (Dojo and AMD, 2013). Velkou výhodou ArcGIS API je možnost svázat aplikace s projektem vytvořeným na https://www.arcgis.com/. Na této stránce si zaregistrovaný uživatel může v Cloudu zdarma vytvořit GIS projekt, který má v základní verzi některá omezení (např. vektorové vrstvy jsou omezeny na 50 objektů). Při zakoupení placené verze účtu může uživatel publikovat vrstvy jako AGS služby a používat své projekty pro komerční využití (Public Account, 2013). Celé API pro JavaScript je postaveno na JavaScriptovém frameworku Dojo Toolkit. Díky tomu je vývoj aplikací efektivní a oproti jiným nástrojům pro tvorbu mapových aplikací už v základu ruší rozdílné zobrazování v různých prohlížečích. API si z Doja bere syntaxi a celý systém pomůcek (Dojo and AMD, 2013). 3.5.2 OpenLayers OpenLayer je open source knihovna napsaná v JavaScriptu, která umožňuje tvorbu mapových aplikací. Tyto nástroje řeší klientskou část aplikace (OpenLayers, 2013), takže k jejich užití není třeba žádné nastavování serveru a samotnou knihovnu není třeba stahovat, ale dá se k ní jednoduše připojit přes adresu: http://openlayers.org/dev/openlayers.js. Mezi největší výhody tohoto API patří, že podporuje většinu OGS formátů jako jsou WMS a WFS. OpenLayers patří také mezi jedny z mála webových API, které podporuje formát WPS, pro který má několik užitečných funkcí (např. parsování metody GetCapabilities do formuláře). Dále podporuje formáty z jiných internetových stránek jako je Google, ArcGIS nebo OpenStreetMaps (Hazzard, 2011).

3.6 Nástroje pro distribuci mapových vrstev 19 3.5.3 Mapnik Mapnik je volně šiřitelná sada nástrojů napsaná v C++ s Pythonovými vazbami, které usnadňují a urychlují vývoj. Jeho hlavním cílem je poskytnout nástroje pro tvorbu co nejlépe vypadajícího mapového výstupu. Mapnik může být použit jak pro vývoj webových tak i desktopových aplikací. Velkou výhodou Mapniku je jeho výkon, kdy ke svému běhu používá již odladěné knihovny pro správu paměti, parsování regulární výrazy, přístup k filesystému a k další. Mapnik přímo podporuje Windows, Mac a Linux. (Pavlenko, 2011) Menší nevýhodou je, že nepodporuje geoprocessing a nabízí menší počet podporovaných formátů než třeba OpenLayers. Obsahuje však hardwarovou akceleraci, takže má mnohem rychlejší vykreslování. 3.5.4 Google Maps API Firma Google poskytuje vývojářům nástroje k tvorbě mapových aplikací pro několik platforem. Jsou zde dostupné nástroje jak pro ios a Android, tak pro psaní webových aplikací s použitím JavaScriptu (Google, 2013). Dostupné jsou mapy města, plánovače cesty pro cestování pěšky, autem, na kole, nebo s veřejnou dopravou. Dále je zde dostupný lokátor veřejných podniků v mnoha zemích po celém světě (Google Maps, 2013). K tvorbě map pomocí Google Maps je třeba obstarat si API key. Ten lze zdarma získat na stránce: https://code.google.com/apis/console/. Díky němu se dá mapový projekt spravovat i mimo mapovou aplikaci a zároveň kontrolovat chod takové aplikace. Použití Google Maps API je umožněno i pro komerční použití, ale mají omezení. Takové stránky musí být veřejně dostupné a počet přístupů k Google Maps za den po dobu 90 dní v kuse musí být menší než 25 000 (Google Maps, 2013). 3.6 Nástroje pro distribuci mapových vrstev Tato část popisuje možnosti publikování mapových vrstev podle standardů OGC. Zároveň je zde představeno kompletní řešení informačního systému pro publikování geodat - GeoNode. 3.6.1 MapServer MapServer je open source vývojové prostředí pro tvorbu prostorově orientovaných internetových aplikací. Ve své nejzákladnější podobě je MapServer CGI program, který běží na webovém serveru (MapServer, 2013). Pokud je MapServeru zaslaná žádost, tak se z informací předaných v URL požadavku vytvoří obraz požadované mapy. Žádost může také vrátit obrázky pro legendu, měřítka, referenční mapy a hodnoty uložené jako CGI proměnné (MapServer, 2013).

3.7 Kritéria porovnání 20 Jádrem MapServeru je takzvaný Mapfile (Mitchell, 2005). Jedná se o konfigurační soubor, který vymezuje vztahy mezi objekty a specifikuje, kde jsou uložena data pro mapovou aplikaci a jak se budou vykreslovat. Každý soubor má hierarchickou strukturu a skládá z několika objektů (MapServer, 2013). Každý objekt začíná klíčovým slovem a končí řetězcem END. Hlavním objektem je objekt MAP. V něm jsou obsaženy všechny ostatní, které určují vlastnosti mapové aplikace nebo služby. V tomto objektu se dají specifikovat parametry jako je název mapy, typ odesílání dat a dají se sem přidat další objekty, které můžou obsahovat seznam vrstev nebo vzhled zpracovávaných dat. 3.6.2 Geoserver GeoServer je open source server napsaný v Javě, který umožňuje uživatelům sdílet a upravovat geoprostorová data. Navrženo pro interoperabilitu, zveřejňuje údaje od všech hlavních prostorových zdrojů dat pomocí otevřených standardů. GeoServer vychází z implementace Open Geospatial Consortium (OGC), a je vysoce kompatibilní s Web Map Service (WMS). GeoServer tvoří základní prvek geoprostorově orientovaných webů (GeoServer, 2013). Geoserver umí načítat a produkovat velké množství formátů, u kterých umí také měnit a přepočítávat souřadné systémy. Součástí GeoServeru je přehledné GUI, které obsahuje většinu důležitých položek pro nastavení výstupu a poskytuje náhledy map v OpenLayers. 3.6.3 GeoNode Ve své podstatě je GeoNode založen na open source komponentech GeoServer, Geo- Network, Django a GeoExt, které poskytují platformu pro sofistikované zobrazení v prostředí webu, prostorovou vizualizaci a analýzu. Na skupině těchto produktů byl vybudován projekt, který poskytuje nástroje pro kompozici a prohlížení map, pro komplikovanější analýzy a pro správu účtů (Benthall, 2010). GeoNode podporuje také rozhraní pro distribuci mezi uživateli jako je hodnocení, komentáře a značkování dat, map a stylů. GeoNode je postaven na čtyřech základních principech: spolupráce, distribuce, kartografie a sběr dat (Benthall, 2010). Spoluprácí se myslí snadné sdílení dat a pokročilý systém hodnocení. Distribuce je usnadněna zjednodušeným instalátorem a automatickou tvorbou metadat k mapám. Kartografií je myšleno, že se GeoNode skládá z už existujících řešení GISových problémů, které začleňuje do jednoho systému. 3.7 Kritéria porovnání Tato práce se zaměřuje na zpracování standardů WMS, WFS a WPS. Díky tomu je třeba nalézt takový mapový framework, který zvládá pracovat se všemi třemi. Toto bude hlavní kritérium pro výběr nástrojů pro práci s mapami.

3.8 Výběr nejvhodnější varianty 21 Při tvorbě mapové aplikace se mezi klientem a serverem přenáší velký objem dat, takže je třeba, aby nástroje, ve kterých jsou tyto dvě části naprogramované, byly, co nejlépe odladěny. Přitom klademe kromě nároků na výpočetní výkon, také nároky na podporu co nejvíce webových prohlížečů a pokud je to možné, tak ještě na multiplatformost. Toto jsou nejdůležitější kritéria výběru pro tuto práci. Přihlíželo se však i k dalším, jako je cenová dostupnost, podpora ze strany tvůrců a uživatelská komunita. 3.8 Výběr nejvhodnější varianty Jako databázový systém byl zvolen PostgreSQL. Jeho velkou výhodou je, že má velkou podporu pro GIS aplikace a umožňuje uchovávat geoprostorová data v Post- GISové nástavbě. Dalším problémem bylo určit, ve kterém programovacím jazyce by měla být hlavní aplikace napsána. Pro tento jazyk je důležité, aby podporoval komunikaci se serverem a databází. V této části jsem volil mezi Pythonem a PHP. Pro oba jazyky jsou napsány skvělé frameworky. Pro Python je to Django a pro PHP je to Nette Framework. Tyto dva nástroje mají velmi podobnou funkčnost, oba řeší zabezpečení aplikací, komunikaci s databází i správu uživatelských účtů. Oba také mají tříúrovňovou architekturu. Django má výhodu ve své knihovně GeoDjango. Ta je velmi užitečná hlavně díky usnadnění vkládání dat do PostGISové databáze. Pro potřeby navržené aplikace však není potřeba úroveň komplexnosti, kterou GeoDjango poskytuje a k vývoji je potřeba akorát základní Django. Jelikož je využití obou programovacích jazyků při tvorbě aplikace srovnatelná, tak jsem zvolil podle osobních preferencí a podle toho, který lépe ovládám a vybral jsem Nette Framework. Při výběru jsem byl ovlivněn také početnou českou komunitou a skvělým šablonovacím systémem, které bude mít při tvorbě aplikace velkou roli. Nakonec bylo třeba zvolit nástroje implementující zobrazování map a práci s nimi. Chvíli jsem zvažoval použití ArcGIS Online, protože poskytuje vysoce výkonné prostředí pro zpracovávání map, které díky propojení s frameworkem Dojo nabízí kvalitní modulární strukturu. Obsahuje také spoustu implementovaných řešení včetně podpory pro mobilní telefony. Součástí toho tohoto mapového frameworku je i možnost tvořit projekty mimo hlavní aplikaci na svých stránkách a následně je nahrávat do aplikací nebo za příplatek takto implementované vrstvy sdílet jako samostatné služby. Hlavní problém u tohoto frameworku však je, že nepodporuje některé standardy OGC, v tomto případě potřebné WFS a WPS. ArcGIS má své vlastní standardy pro zpracování vektorových dat a geoprocessing, které ale pro toto zadání nelze využít. Díky tomu byl zvolen mapový framework OpenLayers. Tento framework je vhodný hlavně kvůli široké nabídce mapových formátů, se kterými je schopen praco-

3.8 Výběr nejvhodnější varianty 22 vat. Nenabízí však takovou podporu tvůrců nebo rychlost vykreslování jako ArcGIS Online. Svou komplexností a možnostmi pro zobrazování map se ArcGISu vyrovná.

4 NÁVRH WEBOVÉ APLIKACE PRACUJÍCÍ S MAPOVÝMI STANDARTY 23 4 Návrh webové aplikace pracující s mapovými standarty 4.1 Návrh řešení Součástí této bakalářské práce má být grafické uživatelské rozhraní pro práci s formáty WMS, WFS a WPS. Aplikací, které umožňují mapové vrstvy zobrazit, existuje celá řada, protože to díky existujícím mapovým frameworkům není vůbec složité. Proto jsem se rozhodl, že aplikace bude umět mapové služby nejenom zobrazovat, ale i vytvářet. Pro potřeby ukázky postačí, když půjde nahrát geoprostorová data do PostGISové databáze a následně je bude možné přes MapServer publikovat dál. Tyto dvě části budou v grafickém rozhraní jednoznačně rozlišeny pomocí menu. Součástí rozhraní pro zobrazování bude panel pro správu vrstev s možností jejich vypínání, zapínání a nastavení vlastností jako je průhlednost. Vrstvy také bude možné řadit do skupin. Takto vytvořené projekty se budou ukládat do databáze. K těm pak bude mít přístup jen uživatel, který projekt vytvoří. Během zobrazení vrstev bude mít uživatel možnost nad zobrazenými daty provést základní výpočetní operace pomocí WPS. Publikování mapových služeb bude odděleno od části se zobrazováním projektů. Uživatel bude moct nahrát zazipovaný soubor formátu shapefile, který bude obsahovat všechny potřebné informace pro mapový výstup jako je geometrie a souřadnicový systém. Tyto informace budou uloženy do databáze. Aplikace se bude ve své funkčnosti podobat GeoNode, ale díky využití rozdílných technologií nebude tolik náročná na výkon serveru. Obrázek 1: Databázové schéma použité v aplikaci.

4.2 Způsob užití aplikace 24 4.2 Způsob užití aplikace Obrázek 2: Use Case diagram implementované aplikace.

5 IMPLEMENTACE ŘEŠENÍ 25 5 Implementace řešení 5.1 Serverová část V řešení bude zahrnuta tvorba vlastních mapových služeb. Díky vybraným technologiím je potřeba nainstalovat a nastavit Mapserver a PostgreSQL s nástavbou PostGIS. Nejprve musí být nastaven server, na kterém bude aplikace umístěna. Následně se vytvoří databáze pro uživatele. Server musí být nastaven tak, aby na něm fungovalo PHP, MapServer a PostGISová databáze. 5.2 Nastavení serveru a databáze Server běží na operačním systému Ubuntu 12.04, proto se pro instalaci webového serveru Apache 2, PHP5, PostgreSQL a MapServeru dá využít balíčkovací systém apt-get. Pro jejich nainstalování lze použít příkazy: sudo apt get i n s t a l l apache2 sudo apt get i n s t a l l php5 sudo apt get i n s t a l l php5 gd sudo apt get i n s t a l l p o s t g r e s q l 9.2 Pro nainstalování PostGISové nástavby pro PostgreSQL a MapServeru je potřeba do apt-get přidat repositář ppa:ubuntugis/ppa. Pro práci s mapovými daty v PHP je vhodné nainstalovat MapScript (MapScript, 2014). sudo apt add r e p o s i t o r y ppa : ubuntugis /ppa sudo apt g e t update sudo apt get i n s t a l l p o s t g i s sudo apt get i n s t a l l cgi mapserver sudo apt get i n s t a l l php5 mapscript Nakonec je ještě potřeba nainstalovat do PHP podporu pro PostgreSQL (aby se dalo k databázi přistupovat přímo z kódu): sudo apt get i n s t a l l php5 p g s q l 5.3 Nastavení Nette Před samotným psaním kódu je třeba vytvořit si základní adresářovou strukturu a nastavit konfigurační soubory. Adresářová struktura je v této práci převzatá ze základního sandboxu, který je distribuován s balíčkem Nette 2.0 (Stažení a instalace, 2013).

5.4 Datová vrstva 26 Nastavení souborů probíhá hlavně v souboru config.neon. Zde jsou definovány Sessions, připojení k databázi, služby, továrničky na komponenty (viz. http://doc.nette.org/cs/components), komunikace s maily a mnoho dalších nastavení. Všechna nastavení probíhají ve formátu NEON, takže je třeba, aby veškerá nastavení byla rovnoměrně odsazena (Konfigurace, 2013). Pro potřeby aplikace je třeba specifikovat parametry databáze. Je nutné k ní nastavit přihlašovací jméno, heslo, typ databáze, její adresu a tabulku, se kterou bude pracovat. Session je pro potřeby této aplikace nastaveno na 14 dní. Tento parametr je zejména využit při přihlašování, kdy uživatel může zaškrtnout, že nechce být odhlášen, když je nečinný 20 minut, a tak je u něj na počítači uložena informace o přihlášení. Ta vyprší nejpozději za 14 dní (Přihlašování oprávnění uživatelů, 2013). V tomto souboru je dále důležité specifikovat adresu jednotlivých služeb, které jsou volány během chodu aplikace. Hlavní služby jsou: Authenticator Stará se o přihlašování a odhlašování Router Obsahuje funkce pro routování Repositáře Pro jednotlivé databázové tabulky (viz. Datový model) 5.4 Datová vrstva V rámci datové vrstvy je nutné vytvořit databázi a napsat pro ni funkce, které s ní budou komunikovat. Ve vybraném databázovém systému byla vytvořena databáze bakal podle navrhnutého schématu. Databáze obsahuje tabulky: 5.4.1 users Tabulka uchovává informace o uživatelských účtech a přihlašovacích údajích. id Primární klíč tabulky, typ integer, automatické navýšení při tvorbě nové položky tabulky. login Přihlašovací jméno uživatele, typ character varying(200). password Hash uživatelského hesla, typ character varying(400). mail Uživatelův email, musí mít podobu emailu, typ character varying (200). validation Kontrolní řetězec odeslaný na email při vytvoření účtu. Je potřeba aby byl nastaven na prázdnou hodnotu, aby se mohl uživatel přihlásit, typ character varying(300).

5.4 Datová vrstva 27 5.4.2 projects Obsahuje informace o jednotlivých uživatelských projektech jako je datum tvorby projektu, název, místo uložení a popis projektu. Obsahuje také informaci o tom, kdo daný projekt vlastní. id Primární klíč tabulky, typ integer. id_user Cizí klíč odkazující na tabulku users, typ integer. name Název projektu, typ character varying(150). description Popis projektu, typ text. created Datum vytvoření projektu, typ date. edited Datum poslední editace projektu, typ timestamp. 5.4.3 files Tabulka, která uchovává informace o všech souborech, které se vytvoří na serveru nebo se na něj nahrají. id Primární klíč, typ integer. filename Název nahraného souboru, typ character varying(150). directory Relativní cesta k souboru, typ character varying uploaded Datum a čas vytvoření souboru na serveru, typ timestamp. size Velikost souboru v bajtech, typ real. 5.4.4 layers Tabulka obsahující informace o vrstvách vztahujících se k určitému projektu. id Primární klíč, typ integer. visible Informace o nastavení vrstvy k zobrazení, typ boolean. lft Popisuje strukturu stromu. Určuje kolik má nalevo od sebe sousedů, typ integer. rgt Popisuje strukturu stromu. Spolu se sloupcem lft udávají množství vrstev, které podstrom začínající tímto záznamem v tabulce (uzlem) obsahuje, typ integer. parent Id uzlu, který je předkem daného záznamu v tabulce (uzlu), typ integer. opacity Úroveň průhlednosti vrstvy. Nabývá hodnot od 0 do 1, typ real.

5.4 Datová vrstva 28 5.4.5 services Tabulka obsahující informace o službě, která je publikována pomocí MapServeru. id Primární klíč, typ integer. data_table Název tabulky, ze které si služba bere geometrii, typ character varying(300). name Název služby, typ character varying(150). type Typ služby. 1 reprezentuje službu WMS; 2 reprezentuje WFS, typ smallint. mapfile Cizí klíč odkazující na tabulku files, typ integer. id_user Cizí klíč odkazující na tabulku users. Poskytuje informaci o tvůrci služby, typ integer created Datum a čas vytvoření služby, typ timestamp url URL adresa, přes kterou jde komunikovat se službou, typ character varying(600). 5.4.6 Tabulky s geometrií pro mapové služby Tyto tabulky obsahují informace potřebné pro publikování mapových služeb (WMS, WFS) a reprezentují shapefile, nahraná do databáze. Jejich název se tvoří z kombinace loginu uživatele, který službu publikuje a názvu publikované služby (např. filip_wmstest). Jsou generovány automaticky pomocí PostGISu při importovaní shapefilu. Tato tabulka se vytvoří pro každou službu publikovanou přes MapServer, protože kdyby se veškerá geometrie pro všechny služby měla ukládat do jedné tabulky, tak by brzy došlo k přehlcení této tabulky a to by velmi zpomalovalo chod všech mapových služeb. Takto vytvořené tabulky musí být zaregistrovány v PostGISové tabulce geometry_columns, kde jim je přidělen souřadnicový systém. Hlavní sloupce: gid Primární klíč pro geometrické objekty, typ integer. geom Textová reprezentace jednoho polygonového objektu, typ geometry. Pro komunikaci s databází byla pro tento projekt vybrána knihovna Nette/Database, která je součástí základního balení Nette. Ošetřuje SQL injection a podporuje opakovanou použitelnost částí kódu (Procházka, 2013). Pro každou tabulku byl napsán repozitář. V nich jsou definované všechny metody, které jsou použity ke komunikaci s databází. Všechny dědí od společného abstraktního repozitáře Repository.

5.5 Aplikační vrstva 29 5.5 Aplikační vrstva Tato vrstva je v Nette popsána pomocí takzvaných presenterů. Jsou to soubory metod, které spojují model a view (pohled) dohromady. Nejprve na základě požadavku od uživatele vyvolá příslušnou aplikační logiku a pak požádá view o vykreslení výsledku (Presentery a šablony, 2013). Každý požadavek na aplikaci se dostane přes soubory index.php a bootstap.php do objektu $application. Ten zavolá metody routeru, aby předaný http požadavek přeložil a určil, pro který presenter je požadavek určen a kterou akci s ním chce vykonat. S touto informací objekt $application, přistoupí k vyplnění požadavku a vytvoří instanci třídy daného presenteru. Presenter je objekt, který vezme požadavek přeložený routerem a zašle odpověď. Odpovědí může být HTML stránka, obrázek, XML dokument, soubor na disku, JSON, přesměrování nebo cokoliv je třeba. Tohle se zpravidla odehraje v metodě rendershow, kde slovo Show odpovídá názvu akce a parametr požadavku id bude předán jako parametr této metodě rendershow() (MVC aplikace presentery, 2013). Jako základ v této aplikaci slouží BasePresenter. V něm jsou popsány metody, které definují základní rozhraní a umožňují vytvářet formuláře, které se vykreslí na každé stránce. Všechny ostatní presentery dědí z BasePresenteru. V této třídě je metoda beforerender(), která naplní uživatelské menu odkazy a zjistí, zda je uživatel přihlášen. Ošetřuje také odhlašování a přihlašování uživatelů. Další důležitou částí presenterů jsou komponenty. V této aplikaci se tvorba komponent používá hlavně na tvorbu formulářů. V každé stránce je umístěn minimálně jeden formulář. Ty jsou generovány vždy z jedné šablony, takže je možné využít již dříve napsaný formulář pro přihlašování a odhlašování a umístit ho na každou stránku. 5.5.1 Zabezpečení Jedním z největších nebezpečí pro webové stránky je Cross-Site Scripting (XSS). Metoda spočívá v narušení webových stránek zneužitím neošetřených výstupů. Útočník pak dokáže do stránky podstrčit svůj vlastní kód a tím může stránku pozměnit nebo dokonce získat citlivé údaje o návštěvnících. Proti XSS se lze bránit jen důsledným a korektním ošetřením všech řetězců. Přitom stačí, aby to kodér jen jednou opomenul, a celý web může být kompromitován. Tento problém Nette řeší pomocí technologie Context-Aware Escaping. Všechny výstupy ošetřuje automaticky a tak se nemůže stát, že by kodér na něco zapomněl (Zabezpečení před zranitelnostmi, 2013). Dalším typem zásahu je Cross-Site Request Forgery. Tento útok spočívá v tom, že přiměje uživatele navštívit stránku, která skrytě vykoná útok na webovou aplikaci, kde je uživatel zrovna přihlášen. Lze takto například pozměnit nebo smazat článek, aniž by si toho uživatel všiml. Proti útoku se lze bránit generováním a ověřováním autorizačního tokenu (Zabezpečení před zranitelnostmi, 2013).

5.5 Aplikační vrstva 30 Nette Framework se snaží chránit uživatele i proti dalším typům útoků jako jsou URL attack, control codes, invalid UTF-8. Zároveň také automaticky konfiguruje PHP, takže se vývojář nemusí starat o zabezpečení session. Z toho plyne, že pokud tato aplikace nebude mít chybu v aplikační logice, tak by měla být dobře zabezpečena. 5.5.2 Registrace uživatelů Pro registraci uživatelů byl napsán pohled Registration, který obsahuje šablony default a control. Šablona default definuje obsah formuláře pro přihlašování nových uživatelů. Šablona control pak obsahuje definici pro zobrazení stránky, která zpracovává ověřovací kódy. Dále bylo nutné napsat pro tyto šablony presenter. V něm jsou napsané metody, které naplňují stránky informacemi. Jsou to metody: rendercontrol() V této metodě je zpracován požadavek od registrovaného uživatele. createcomponentregistrationform() Továrnička na registrační formulář. registrationformsubmitted(form $form) Zde je zpracován odeslaný formulář. Při načtení stránky je možné si v sekci registrace založit nový účet. Vygeneruje se zde formulář, do kterého je třeba zapsat přihlašovací jméno, heslo, potvrzení hesla a e-mail. Ještě před načtením stránky jsou pomocí sql dotazu vybrána všechna jména a e- maily z databáze. Díky tomu můžeme při tvorbě nového uživatele zkontrolovat, jestli se do databáze zadává unikátní jméno a e-mail. K této kontrole přidáme ještě další validační pravidla jako je podmínka pro shodování se hesel a potřeba mít vyplněny všechny položky. Po odeslání formuláře se nejdříve vygeneruje ověřovací kód. Jeho generování je založeno na použití php funkce sha1(), která vytvoří hash z uživatelského jména, aktuálního času a vlastního řetězce (w3school.com, 2013). Tento kód se uloží k uživateli do databáze. Při přihlášení je vždy prováděna kontrola na prázdnost tohoto políčka v tabulce, a když je pořád vyplněno, tak je uživatel přesměrován a vypíše se chyba (Kocmánek, 2011). Po vygenerování ověřovacího kódu se vytvoří e-mailová zpráva, do které se kód uloží. Tato správa se odešle na e-mailovou adresu zadanou uživatelem. Poté se uživateli zobrazí zpráva, která ho žádá o potvrzení své registrace přes kód, který mu přišel na e-mail. Odkaz v mailu se skládá z odkazu na stránku, která zpracovává příchozí kódy, a z vytvořeného kódu. Tento e-mail je poslán přes nastavený SMTP server (Odesílání e-mailů, 2013).

5.6 Správa mapových projektů 31 Když uživatel klikne na odkaz, tak je přesměrován. Na stránce je zpracován jeho potvrzovací kód, který je tak vymazán z databáze u jeho jména a je mu umožněno se přihlásit. Je-li zadán nesprávný kód nebo kód, který už byl použit, tak je vyhozena chyba. 5.6 Správa mapových projektů Po přihlášení se uživatel objeví v seznamu svých mapových projektů. Zde má možnost buď založit nový projekt, nebo upravit stávající. Při tvorbě nového projektu se vygeneruje formulář pro zadání názvu nového projektu. Po odeslání formuláře se do databázové tabulky projects uloží nový záznam obsahující název projektu a kdy byl založen. Zároveň se do tabulky layers vygeneruje první záznam k projektu, představující kořenový adresář pro všechny vrstvy, které budou přidané. Po otevření čerstvě vytvořeného projektu se zobrazí plná aplikace se základní podkladovou mapou. Další vrstvy je třeba připojit. Na pravé straně je proto otevřený panel pro spravování uživatelských vrstev. 5.6.1 Zakládání mapových projektů Sekce projektů je definována v presenteru Homepage, který se načítá při vstupu na hlavní stránku. V tomto presenteru jsou definovány tři šablony: default (úvodní strana), map (mapová aplikace) a createproject (založení nového projektu). Při načtení hlavní stránky se zobrazí seznam vytvořených projektů. Každá položka tohoto seznamu má dva odkazy. První z nich slouží k otevření projektu do plné mapové aplikace, kde může uživatel projekt editovat. Pomocí druhého se dá projekt smazat. Na hlavní straně se nachází také tlačítko Založit nový projekt. Na tomto odkazu se nachází formulář pro vytvoření nového, kde lze zadat název projektu a jeho popis. 5.6.2 Generování MapFile MapFile je textový soubor. Proto se vytváří pomocí parsování jednotlivých částí souborů typu MapFile a dat, které se do něj vloží. Při generování se nejprve vezme z PostGISové databáze hranice oblasti dat, ve které se bude služba vykreslovat (extent). Ta se přidá do výsledného souboru a pokračuje se načtením dat o konkrétní službě. Uživatel má možnost přes aplikaci publikovat WMS i WFS služby. Podle typu služby se při tvorbě MapFile nastaví metadata ke konkrétní službě.

5.7 Prezentační vrstva (Pohled) 32 5.7 Prezentační vrstva (Pohled) Pohled (View) je vrstva aplikace, která má na starost zobrazení výsledku požadavku. Obvykle využívá šablonovací systém a stará so o to, jak zobrazit komponenty nebo výsledky získané z modelu (MVC aplikace presentery, 2013). Pro všechny stránky je jedna základní šablona @layout.latte. V ní je definovaná html hlavička, odkazy na skripty a styly a celkové rozhraní aplikace. Dále jsou definovány šablony pro konkrétní stránky, které z hlavní šablony dědí a obsahují obsah týkající se konkrétní stránky. Každá stránka má šablonu s názvem default.latte, ke které je definovaný konkrétní presenter. Z těchto stránek je možno se odkazem dostat na další úrovně podstránky. 5.7.1 Mapová aplikace Pro implementaci standardů WMS, WFS, a WPS byl vybrán framework OpenLayers, který jako jeden z mála umožňuje zpracovávat WFS a WPS. Pro implementaci WPS byla napsána v PHP třída WPSHandler. Z něho dědí třída MeasureWPS, která implementuje konkrétní WPS. S ní se z pohledu komunikuje pomocí zasílání AJAXových požadavků. AJAXové komunikace bylo dosaženo tak, že se v šabloně k tlačítku s měřením přidala třída Ajax a zároveň se v presenteru upravila funkce handlemeasure(), která komunikaci s MeasureWPS. Byla sem přidána podmínka, že když se jedná o AJAXový požadavek, tak se kromě vložení nového komentáře ještě invaliduje textové pole s výsledkem měření (AJAX & snippety, 2013). Invalidace znamená, že při změně konkrétního prvku nepotřebujeme znovu načíst stránku. V tomto případě je změněna hodnota výsledku měření. 5.8 Mapové panely V zájmu přehlednosti bylo při návrhu uživatelského rozhraní rozhodnuto, že práce s mapou aplikací bude rozdělena do několika tematických panelů. Díky tomu nebude uživatel najednou přehlcen a bude moci využívat najednou jen konkrétní některé funkce pro práci s mapou. 5.8.1 Panel Mapové vrstvy Jedná se o hlavní panel v mapové aplikaci. Skládá se ze seznamu vrstev a skupin zobrazených ve stromové struktuře a tlačítek sloužících k přidávání položek do seznamu. Stromová struktura je implementována za pomoci modifikovaného traverzování. To v praxi znamená, že v tabulce layers jsou přidány sloupce lft a rgt (klíčová slova left a right jsou v SQL vyhrazena), které slouží k uchovávání struktury. Kořenový

5.8 Mapové panely 33 uzel obsahuje minimální hodnotu lft a maximální hodnotu rgt celého stromu, stejně tak jako jeho potomci obsahují minimální hodnotu lft a maximální hodnotu rgt svých podstromů. Když se celý strom seřadí podle hodnoty lft, tak získáme všechny informace, které potřebujeme ke správnému zobrazení celého stromu. Více podrobností o procházení stromu bude popsáno v části Strom vrstev. Díky této metodě se nemusí volat několik databázových příkazů, ale stačí nám na celý strom jen jeden (Van Tulder, 2003). Když se zmáčkne tlačítko pro přidání skupiny, tak se otevře interaktivní dialogové okno, kde je možné zadat název nové skupiny. Po vyplnění formuláře se přes signál pomocí AJAXu pošle informace o nové skupině na server. Zde se zpracuje, přidá se do tabulky layers a do aplikace se zašle signál k překreslení stromu vrstev. Tlačítko pro přidání vrstvy funguje obdobně. Obsahuje však jeden mezikrok navíc. Když uživatel potvrdí vyplněné údaje (název, typ služby a url), tak se na zadanou službu pošle požadavek GetCapabilities. Ten vrátí xml, ze kterého se dají zjistit informace o dané službě. Pomocí JavaScriptu se získá seznam dostupných vrstev z dané služby a následně se otevře nové dialogové okno, ve kterém si uživatel může vybrat konkrétní vrstvy dané služby. Díky tomu je možné přidat stejnou službu několikrát, pokaždé s jinými vrstvami. 5.8.2 Panel pro práci s WPS Tento panel obsahuje formulář pro práci s WPS. Skládá se ze dvou prvků: Políčka pro výběr konkrétní služby a textového pole, ve kterém se po dokončení výpočtu zobrazí výsledek. Když je tento panel aktivní, tak se zpřístupní kreslící nástroj, jehož pomocí lze do mapové aplikace zakreslit geometrii, na které bude proveden výpočet. Při přepnutí do jiného panelu se kreslící nástroj deaktivuje. 5.8.3 Implementace ukládání mapových projektů Další klíčová část aplikace je ukládání projektů pro jednotlivé uživatele. Pro tuto část byl napsán skript, který při načtení aplikace zkontroluje, jestli je v URL předán identifikátor mapového projektu a jestli předaný identifikátor odpovídá projektu, který uživatel vlastní. Není-li v adrese obsažen validní identifikátor, tak se aplikace přesměruje na stránku se seznamem dostupných projektů. Je-li projekt dostupný, tak v panelu Mapové vrstvy je možnost měnit jeho strukturu a vlastnosti. Toho je dosaženo díky několika AJAXovým signálům, které jsou při práci s projektem volány. Jedná se o signály: Insertlayer($parameters) Vloží novou vrstvu z pohledu do databáze. Deletelayer($parameters) Vymaže vrstvu, která byla smazána v pohledu, z databáze.

5.8 Mapové panely 34 Movelayer($parameters) Při přesunutí podstromu vrstev v pohledu, zaznamená tuto změnu v databázi. Changevisible($parameters) Změní nastavení viditelnosti vrstvy v databázi. Changeopacity($parameters ) Změní nastavení viditelnosti vrstvy v databázi. 5.8.4 Strom vrstev Každý mapový projekt je reprezentován stromem, který je implementován pomocí modifikované metody traverzování. Každý uzel ve stromu představuje buď skupinu vrstev, nebo samostatnou vrstvu (list). Metoda spočívá v definování pravé a levé hodnoty pro každý uzel stromu, kdy v každém uzlu, který je kořenem podstromu, se nachází mezi těmito dvěma hodnotami množina uzlů s pravou a levou hodnotou, které jsou větší než levá hodnota kořenu a menší než pravá hodnota kořenu. Této metody se využívá hlavně kvůli optimalizaci, protože je možné pomocí zavolání jediného SQL dotazu získat celý strom. Při vypsání takto strukturovaných dat seřazených podle levé hodnoty, můžeme určit, kde který podstrom začíná nebo končí. V šabloně map.latte se při vykreslení aplikace naplní proměnná $projects_layers seřazeným seznamem vrstev. Ten se následně prochází v cyklu a postupně se do vykreslené webové stránky vkládají html elementy představující jednotlivé vrstvy. V šabloně je strom tvořen nečíslovaným seznamem s vnořenými podseznamy. Pomocí JQuery je pro kořenový uzel skupiny nastavený parametr Sortable. Díky tomu je možné v seznamu hýbat s jednotlivými prvky a přenášet je z jednoho uzlu do druhého. Všechny stromové prvky mají na některé své události napojeny AJAXové signály, které při aktivaci odesílají na server data o změně stavu. Ten se následně vloží do databáze.

5.9 Testování 35 5.9 Testování 5.9.1 Publikování WMS a WPS Po přihlášení jsem se přepnul do seznamu mých publikovaných. Vybral jsem nejprve, že chci publikovat WMS službu (tlačítko Vytvořit novou WMS). Byl jsem přesměrován na formulář, kde jsem zadal testwms jako jméno služby a vybral zazipovaný shapefile z pevného disku. Po odeslání formuláře byl soubor úspěšně nahrán na server, kde byl rozbalen a zpracován. V databázi se vytvořila tabulka filip_testwms. Obrázek 3: Seznam vytvořených mapových služeb. V mém seznamu se objeví nová služba s adresou: http://localhost/cgibin/mapserv?map=/var/www/html/sandbox/www/wms/testwms.map. Z této služby jsem pomocí prohlížeče přes metodu GetCapabilities získal data týkající se popisu služby a seznamu dostupných vrstev. Služba obsahuje jednu vrstvu s názvem WMStest. Test publikování WFS probíhal obdobně. Na jeho konci byl získán výpis funkcí služby přes GetCapabilities.

5.9 Testování 36 Obrázek 4: Ukázka z výpisu GetCapabilities u publikované WMS. Obrázek 5: Ukázka z výpisu GetCapabilities u publikované WFS. 5.9.2 Založení nového mapového projektu V seznamu projektů jsem zmáčkl tlačítko Založit nový projekt. Byl jsem přesměrován na formulář, kde jsem vyplnit název projektu: Testovací projekt a popis projektu: Test. Následně se mi v seznamu projektů objevil nový projekt. Ten jsem otevřel do plné mapové aplikace. Mapová aplikace se vykreslila se základní podkladovou mapou. 5.9.3 Vložení vrstvy do projektu a její zobrazení V mapové aplikaci jsem zmáčkl tlačítko Přidat vrstvu. V dialogu, který se objevil, jsem zadal název vrstvy Testovací WMS, určil typ vrstvy jako WMS a zadal adresu služby, kterou jsem vytvořil v předchozí části. Po odeslání formuláře se objevilo nové dialogové okno, kde jsem zaškrtl jedinou vrstvu, která byla k dispozici. Po potvrzení se vrstva promítla do mapy.

5.9 Testování 37 Obrázek 6: Vytvořená mapová aplikace. 5.9.4 Měření pomocí WPS V mapové aplikaci jsem se přepnul do panelu Výpočty. Tento panel je rozdělen na dvě části: Topologie a Měření vzdáleností. Topologie definuje prostorové vztahy mezi vektorovými objekty GIS. Pomocí topologických pravidel lze definovat vztahy mezi jednotlivými prvky v jedné vrstvě nebo napříč dvěma vrstvami. Uvedený příklad řeší, jestli se dva vektorové objekty v mapě překrývají. Obrázek 7: Ukázka z měření. Do mapového projektu jsem vložil WFS vrstvu http://demo.opengeo.org/wfs. Zvolil jsem si vektorové typy: Tasmani State Boundaries a Tasmania Water Bodies. Nejdřív jsem si označil celou Tasmánii a následně vodní nádrž. Po odeslání údajů mi ze serveru přišla zpráva, že se nádrž nachází uvnitř státu.