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.
6
OBSAH
Obsah 1 Úvod a cíl práce 1.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Cíl práce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Standardy a komunikace v oblasti 2.1 OGC . . . . . . . . . . . . . . . . 2.1.1 Web Map Service . . . . . 2.1.2 Web Feature Service . . . 2.1.3 Web Processing Service . 2.2 ArcGIS for Server služby . . . . .
GIS . . . . . . . . . . . . . . .
9 9 9
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
10 10 10 11 11 12
3 Technologie pro tvorbu GIS aplikací v prostředí internetu 3.1 Databáze . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Django . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 GeoDjango . . . . . . . . . . . . . . . . . . . . . . . 3.3 Javascript . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 AJAX . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 jQuery . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Dojo Toolkit . . . . . . . . . . . . . . . . . . . . . . 3.4 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Nette Framework . . . . . . . . . . . . . . . . . . . . 3.4.2 Mapito . . . . . . . . . . . . . . . . . . . . . . . . . 3.5 Nástroje pro práci s mapou . . . . . . . . . . . . . . . . . . 3.5.1 ArcGIS API for JavaScript . . . . . . . . . . . . . . 3.5.2 OpenLayers . . . . . . . . . . . . . . . . . . . . . . . 3.5.3 Mapnik . . . . . . . . . . . . . . . . . . . . . . . . . 3.5.4 Google Maps API . . . . . . . . . . . . . . . . . . . 3.6 Nástroje pro distribuci mapových vrstev . . . . . . . . . . . 3.6.1 MapServer . . . . . . . . . . . . . . . . . . . . . . . 3.6.2 Geoserver . . . . . . . . . . . . . . . . . . . . . . . . 3.6.3 GeoNode . . . . . . . . . . . . . . . . . . . . . . . . 3.7 Kritéria porovnání . . . . . . . . . . . . . . . . . . . . . . . 3.8 Výběr nejvhodnější varianty . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
13 13 13 13 14 14 14 14 15 15 15 16 17 17 18 18 18 18 19 19 19 19 20 20 20 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
7
OBSAH
5 Implementace řešení 5.1 Serverová část . . . . . . . . . . . . . . . . . . . . . 5.2 Nastavení serveru a databáze . . . . . . . . . . . . 5.3 Nastavení Nette . . . . . . . . . . . . . . . . . . . . 5.4 Datová vrstva . . . . . . . . . . . . . . . . . . . . . 5.4.1 users . . . . . . . . . . . . . . . . . . . . . . 5.4.2 projects . . . . . . . . . . . . . . . . . . . . 5.4.3 files . . . . . . . . . . . . . . . . . . . . . . 5.4.4 layers . . . . . . . . . . . . . . . . . . . . . 5.4.5 services . . . . . . . . . . . . . . . . . . . . 5.4.6 Tabulky s geometrií pro mapové služby . . . 5.5 Aplikační vrstva . . . . . . . . . . . . . . . . . . . 5.5.1 Zabezpečení . . . . . . . . . . . . . . . . . . 5.5.2 Registrace uživatelů . . . . . . . . . . . . . 5.6 Správa mapových projektů . . . . . . . . . . . . . . 5.6.1 Zakládání mapových projektů . . . . . . . . 5.6.2 Generování MapFile . . . . . . . . . . . . . 5.7 Prezentační vrstva (Pohled) . . . . . . . . . . . . . 5.7.1 Mapová aplikace . . . . . . . . . . . . . . . 5.8 Mapové panely . . . . . . . . . . . . . . . . . . . . 5.8.1 Panel Mapové vrstvy . . . . . . . . . . . . . 5.8.2 Panel pro práci s WPS . . . . . . . . . . . . 5.8.3 Implementace ukládání mapových projektů 5.8.4 Strom vrstev . . . . . . . . . . . . . . . . . 5.9 Testování . . . . . . . . . . . . . . . . . . . . . . . 5.9.1 Publikování WMS a WPS . . . . . . . . . . 5.9.2 Založení nového mapového projektu . . . . 5.9.3 Vložení vrstvy do projektu a její zobrazení . 5.9.4 Měření pomocí WPS . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
25 25 25 25 26 26 27 27 27 28 28 29 29 30 31 31 31 32 32 32 32 33 33 34 35 35 36 36 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
1 1.1
9
Úvod a cíl práce Ú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
2
10
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
2.1.2
11
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
3
13
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
3.4.2
18
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 3.5.1
Nástroje pro práci s mapou 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
3.5.3
19
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, GeoNetwork, 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 PostGISové 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
4 4.1
23
Návrh webové aplikace pracující s mapovými standarty 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
4.2
Způsob užití aplikace
Způsob užití aplikace
Obrázek 2: Use Case diagram implementované aplikace.
24
5
25
IMPLEMENTACE ŘEŠENÍ
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 sudo sudo sudo
apt−g e t apt−g e t apt−g e t apt−g e t
install install install install
apache2 php5 php5−gd 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 sudo sudo sudo sudo
apt−add−r e p o s i t o r y ppa : u b u n t u g i s / ppa apt−g e t update apt−g e t i n s t a l l p o s t g i s apt−g e t i n s t a l l c g i −m a p s e r v e r apt−g e t i n s t a l l php5−m a p s c r i p t
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−g e t 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
5.4.2
27
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
5.4.5
28
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
5.5
29
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 emaily 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)
5.7
32
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í
5.9 5.9.1
35
Testování 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.
5.9
Testování
38
Pro měření vzdáleností jsem v panelu povolil kreslení do mapy. Nakreslil jsem liniovou vrstvu a po dokončení kreslení se na server odeslal požadavek, který byl dál přesměrován na WPS. Z ní mi přišla odpověď v podobě číselného údaje reprezentujícího vzdálenost v metrech. Obě implementované WPS vrací při výpočtu správné údaje.
6
ZHODNOCENÍ NASAZENÍ APLIKACE V PODNIKU
6 6.1
39
Zhodnocení nasazení aplikace v podniku Uplatnění aplikace
Mapová aplikace, která je výstupem této práce, obsahuje obecnou PHP třídu pro geoprocessingové služby podle standardu WPS. V případě napojení správné WPS služby je možné provádět analýzy nad různými územními celky a využít je například pro geomarketing. Mezi tyto analýzy patří: Síťové analýzy – Sítě lze definovat jako soubor lineárních prvků, vytvářejí určitou strukturu nebo obrazec, po nichž se pohybují zdroje, obvykle slouží k transportu hmoty a energie. Mezi hlavní typy sítí patří řeky, vlaky, silnice (Pantůčková, 2011). Pomocí síťových analýz je možno trasovat sítě (tracing), kdy se vyhledává určitá trasu v síti na základě kritérií stanovených uživatelem. Další možnosti jsou vyhledání nejkratší cesty v síti a alokace zdrojů (Pantůčková, 2011). Vzdálenostní analýzy – Termín vzdálenostní analýzy označuje prostorové analýzy využívající vzdálenostní charakteristiky analyzovaných objektů v daném geografickém prostoru. Tato analýza se dělí na analýzy nad vektory a nad rastry. Základním nástrojem vzdálenostních analýz je tvorba obalové zóny (bufferu) (Jedlička, 2008). Kolem bodu a plochy se tyto zóny obecně nazývají obalové zóny nebo taky buffer, zatímco kolem liniových objektů se nazývají koridory.
6.2
Cena realizace
Tato aplikace běží výhradně na open source softwaru, takže za samotnou aplikaci není třeba platit. K jejímu běhu je však třeba vlastnit server. Obecně nelze použít sdílený webhosting, protože na sdílených webhostinzích většinou nejdou spouštět cgi skripty (viz. http://kb.wedos.com/forum/topic/142/cgi-scripts-cgi-bin.html). Cgi skripty jsou pro mapovou aplikaci klíčové a bez nich by například nejel formulář pro zpracování služeb podle standardu wps. Díky využití MapServeru, který má nižší nároky na výkon serveru než např. GeoServer je možné aplikaci nasadit na relativně levnou VPS. Aplikace byla testována na serveru s 1 GB RAM a 1 CPU. Poplatek za VPS s těmito parametry se pohybuje mezi 100 až 150 Kč za měsíc. Dá se pořídit např. na Wedosu (Wedos, 2014). Při nasazení pro větší počet uživatelů nebo větší mapové projektu, bude potřeba server s větším výkonem. K údržbě aplikace je potřeba odborný personál v podobě alespoň jednoho pracovníka, který rozumí GISu a databázím. Tento pracovník by aktualizoval databázi dat a kontroloval jejich konzistenci.
7
7
ZÁVĚR
40
Závěr
V první části bakalářské práce byly vysvětleny standardy WMS, WFS a WPS, které patří pod standard OGC. Dále byla popsána služba AGS od ArcGISu. V další části byly rozebrány jednotlivé technologie, s jejichž pomocí je možno vytvořit webovou aplikaci pracující s geoprostorovými informacemi. Nejprve byly představeny technologie pracující se serverovou částí a databázemi, na to navázaly programovací jazyky a jejich frameworky, které usnadňují a urychlují vývoj. Poté byly představeny technologie pro vykreslování map a pro práci s nimi. Na závěr této části byly tyto jednotlivé části porovnány a byla vybrána technologie pro implementaci aplikace, která je součástí této práce. Pro aplikaci byl vybrán databázový systém PostgreSQL, díky jeho rozšiřitelnosti a podpoře pro GIS aplikace. Zároveň bylo rozhodnuto, že aplikace bude mít třívrstvou architekturu MVC a pro její implementaci poslouží PHP framework Nette. Pro samotné vykreslování map byly vybrány knihovny OpenLayers. Následující část bakalářské práce se zabývá navržením aplikace a definováním cílového uživatele. V rámci této části byly také určeny podmínky a sepsáno zadání, které výsledná aplikace musí splnit. Bylo rozhodnuto, že webová stránka bude umožňovat publikování služeb s možností jejich zobrazení v mapových aplikacích. Součástí úlohy je i komplexní uživatelská aplikace, která slouží k tvorbě vlastních mapových projektů a provádění výpočtů pomocí WPS. Další část se zabývá samotnou implementací webové aplikace. V této kapitole byly následně popsány jednotlivé aspekty tvorby aplikace. Byl vysvětlen postup tvorby a realizace návrhu. V závěru byl popsán průběh testování aplikace podle zadání navrženého v předchozí kapitole. Poslední část bakalářské práce pojednává o praktickém využití aplikace a jejím využití v oblasti analýz. Je zde také proveden odhad vyčíslení, kolik by stálo nasazení a udržování aplikace. K běhu aplikace je potřeba vlastní server s nízkým výkonem, který ale musí podporovat PostgreSQL a jeho nástavbu PostGIS. Výstupem této bakalářské práce je webová aplikace, která umožňuje správu uživatelských účtů, publikování mapových služeb podle standardů WMS a WFS, práci s mapou a ukládání mapových projektů.
8
8
41
REFERENCE
Reference
About JavaScript, 2013 Mozilla Developer Network [online]. [cit. 2014-04-24]. Dostupné z: https://developer.mozilla.org/enUS/docs/Web/JavaScript/About_JavaScript . AJAX wikipedia, 2014 [online]. In: Wikipedia: the free encyclopedia. San Frencisco (CA): Wikimedia Foundation, 2001- [cit. 2014-05-18]. Dostupné z: http://en.wikipedia.org/wiki/Ajax_(programming) . AJAX snippety, 2013 [online]. Nette Foundation. [cit. 2013-04-22]. Dostupné z: http://doc.nette.org/cs/ajax . Introduction, 2014. REGENTS OF THE UNIVERSITY MINNESOTA [online]. [cit. 2014-04-18]. Dostupné http://mapserver.org/el/mapscript/php/php_intro.html . An
OF z:
Introduction to MapServer, 2013. REGENTS OF THE UNIVERSITY OF MINNESOTA [online]. [cit. 2013-04-21]. Dostupné z: http://mapserver.org/introduction.html .
About OGC, 2013 [online]. [cit. http://www.opengeospatial.org/ogc.
2013-04-18].
Dostupné
z:
ArcGIS Help 10.1, 2013 [online]. [cit. 2013-05-17]. Dostupné z: http://resources.arcgis.com/en/help/main/10.1/index.html//015400000435000000. ArcGIS Online: Public Account, 2013 [online]. [cit. 2013-05-17]. Dostupné z: http://www.esri.com/software/arcgis/arcgisonline/features/free-personalaccount . BENTHALL, Sebastian, 2010 [online].What’s this GeoNode thing?. [cit. 2013-0424]. Dostupné z: http://digifesto.com/2010/02/18/whats-this-geonode-thing/. ČERMÁK, Miroslav, 2008 [online]. Vícevrstvá architektura: popis vrstev, [cit. 2013-05-01]. Dostupné z: http://www.cleverandsmart.cz/vicevrstvaarchitektura-popis-vrstev/. Databáze a model, 2013 [online]. Nette Foundation. [cit. 2013-05-02]. Dostupné z: http://doc.nette.org/cs/book/database . Dojo and AMD, 2013 [online]. Environmental Systems Research Institute, Inc.. [cit. 2013-05-02]. Dostupné z: http://help.arcgis.com/en/webapi/javascript/arcgis/jshelp/inside_dojo_amd.html .
8
42
REFERENCE
Django at a glance, 2013 [online]. DJANGO SOFTWARE FOUNDATION. [cit. 2013-05-03]. Dostupné z: https://docs.djangoproject.com/en/1.5/intro/overview/ . Django documentation, 2013 [online]. DJANGO SOFTWARE FOUNDATION. 1.4.2 [cit. 2013-05-03]. Dostupné z: https://docs.djangoproject.com/en/1.5/topics/security/ . DUBROVSKÝ, Jakub, 2013. Návrh platformy pro práci s pozičními daty. Brno. [cit. 2013-05-17]. Dostupné z: http://is.muni.cz/th/255770/fi_m/thesis.doc. Diplomová práce. MASARYKOVA UNIVERZITA V BRNĚ. Vedoucí práce doc. RNDr. Tomáš Pitner, Ph.D. . Esri Unveils ArcGIS Server 10 on Amazon EC2, 2010 [online]. [cit. 2013-05-17]. Dostupné z: http://www.esri.com/news/releases/10_3qtr/server10-amazon.html. FLANAGAN, David, 2011. JavaScript: The Definitive Guide, sixth edition. 2. vyd. Beijing: O’Reilly Media. 1100 s. ISBN 978-0-596-80552-4. GeoServer, 2013 [online]. [cit. 2013-04-22]. http://geoserver.org/display/GEOS/Welcome .
Dostupné
z:
Google Developers, 2013. GOOGLE [online]. [cit. 2013-04-29]. Dostupné z: https://developers.google.com/maps/ . Google Maps JavaScript API v3, 2013. GOOGLE [online]. [cit. 2013-04-29]. Dostupné z: https://developers.google.com/maps/documentation/javascript/tutorial?hl=cs . HAZZARD, Erik, 2011. OpenLayers 2.10 Beginner’s Guide, Packt Publishing. 372 s. ISBN-10 1849514127. JEDLIČKA, Karel, 2008 [online].Úvod do GIS. [cit. 2013-0426]. Dostupné z: http://gis.zcu.cz/studium/ugi/Prezentace/11AnalyzyVzdalenostniSousedstviVazenaVzdalenostNejlevnejsiCestaGrafove.pdf. KOCMÁNEK, Jan, 2011 [online].Jak na potvrzení registrace v NETTE?. [cit. 201304-18]. Dostupné z: http://blog.jankocmanek.cz/jak-na-potvrzeni-registrace-vnette/. KOCH, Tyler, 2006. Datové a funkční modelování, 2. Vydání. Brno: Vysoké učení technické v Brně. 108 s. ISBN 80-214-3252-7.. Konfigurace, 2013 [online]. Nette Foundation. [cit. 2013-04-22]. Dostupné z: http://doc.nette.org/cs/configuring .
8
43
REFERENCE
KOSEK, Jiří,Využití databází v PHP, 2001 [online]. [cit. 2013-04-27]. Dostupné z: http://www.kosek.cz/clanky/wapkurz/ar06s52.html . LUTZ, Mark, 2010. Programming Python, fourth edition. Beijing: O’Reilly Media. 1632 s. ISBN 978-0-596-15810-1.. Mapfile, 2013. REGENTS OF THE UNIVERSITY OF MINNESOTA [online]. [cit. 2013-05-04]. Dostupné z: http://mapserver.org/mapfile/index.html . MITCHELL, Tyler, 2005. Web mapping illustrated, Beijing: O’Reilly Media. 349 s. ISBN 978-0-596-00865-9.. MVC aplikace presentery, 2013 [online]. Nette Foundation. [cit. 2013-04-12]. Dostupné z: http://doc.nette.org/cs/presenters . Odesílání e-mailů, 2013 [online]. Nette Foundation. [cit. 2013-05-12]. Dostupné z: http://doc.nette.org/cs/mailing . OpenGIS Web Map Server Implementation Specification, 2006 [online]. 1.3.0 [cit. 2013-04-18]. Dostupné z: http://portal.opengeospatial.org/files/?artifact_id=14416. OpenLayers, 2013 [online]. MEDIA WIKI. [cit. 2013-04-23]. Dostupné z: http://wiki.openstreetmap.org/wiki/OpenLayers . PANTŮČKOVÁ, Tereza, 2011. Síťová analýza v GIS. Praha. Dostupné z: http://gama.fsv.cvut.cz/ cepek/proj/bp/2011/tereza-pantuckova-bp-2011.pdf. Bakalářská práce. ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE. Vedoucí práce Ing. Jiří CAJTHAML, Ph.D.. PAVLENKO, Artem,mapnik, 2011 [online]. [cit. 2013-04-22]. Dostupné z: http://mapnik.org/faq/ . PHP sha1() Function, 2013 [online]. Refsnes Data. [cit. 2013-04-29]. Dostupné z: http://www.w3schools.com/php/func_string_sha1.asp . Píšeme komponenty, 2013 [online]. Nette Foundation. [cit. 2013-05-07]. Dostupné z: http://doc.nette.org/cs/components . Postgis.net, 2013 [online]. Spatial and Geographic objects for PostgreSQL. POSTGIS PROJECT STEERING COMMITTEE. PostGIS. [cit. 2013-05-14]. Dostupné z: http://postgis.net/ . PostgreSQL, 2012 [online]. [cit. http://wiki.ubuntu.cz/postgresql.
2013-05-17].
Dostupné
z:
Presentery a šablony, 2013 [online]. Nette Foundation. [cit. 2013-04-20]. Dostupné z: http://doc.nette.org/cs/book/presenter .
8
44
REFERENCE
PROCHÁZKA, Filip,Nettevs dibi, 2013 [online]. [cit. 2013-05-06]. Dostupné z: http://pla.nette.org/cs/nette-database-vs-dibi . Přihlašování oprávnění uživatelů, 2013 [online]. Nette Foundation. [cit. 2013-05-03]. Dostupné z: http://doc.nette.org/cs/security . QURESHI, Asfandyar a spol., 2009 [online]. Getting Started: Python and IDLE. [cit. 2013-05-18]. Dostupné z: http://web.mit.edu/6.s189/www/handouts/GettingStarted.html. RUSSEL, Matthew, 2008. Dojo: The Definitive Guide, 2. vyd. Beijing: O’Reilly Media. 488 s. ISBN 978-0-596-51648-2. Security in Django, 2013 [online]. DJANGO SOFTWARE FOUNDATION. [cit. 2013-04-18]. Dostupné z: https://docs.djangoproject.com/en/1.5/topics/security/ . Sencha Ext JS, 2013 [online]. Sencha Inc.. [cit. 2013-04-21]. Dostupné z: http://www.sencha.com/products/extjs . SKŘIVAN, Jaromír, 2000 [online].Databáze a jazyk SQL. [cit. 2013-05-01]. Dostupné z: http://interval.cz/clanky/databaze-a-jazyk-sql/. SPRINGMEYER, Dane, 2009 [online].Overview: GeoDjango. [cit. 2013-04-25]. Dostupné z: http://www.geowebguru.com/articles/99-overview-geodjango. Stažení a instalace, 2013 [online]. Nette Foundation. [cit. 2013-04-22]. Dostupné z: http://doc.nette.org/cs/installation . The
syndication feed framework, 2013 [online]. DJANGO SOFTWARE FOUNDATION. [cit. 2013-05-20]. Dostupné z: https://docs.djangoproject.com/en/dev/ref/contrib/syndication/ .
VAN TULDER, Gijs. Storing Hierarchical Data in a Database. In: SitePoint [online]. 2003. [cit. 2014-05-18]. Dostupné z: http://www.sitepoint.com/hierarchical-data-database/. Web Feature Service Implementation Specification, 2005 [online]. 1.1.0 [cit. 2013-0510]. Dostupné z: https://portal.opengeospatial.org/files/?artifact_id=8339. Web
Map Service, 2013 [online]. [cit. 2013-05-17]. http://www.opengeospatial.org/standards/wms.
Web
Processing Service, 2013 [online]. [cit. 2013-05-17]. http://www.opengeospatial.org/standards/wps.
Dostupné Dostupné
z: z:
Virtuální servery - VPS - hosting WEDOS, 2014 [online]. [cit. 2014-05-12]. Dostupné z: http://hosting.wedos.com/cs/virtualni-servery.html.
8
45
REFERENCE
What is GIS?, 2014 [online]. ESRI. [cit. http://www.esri.com/what-is-gis/overview .
2014-05-01].
Dostupné
z:
What is PHP?, 2013 [online]. The PHP Group. [cit. 2013-04-22]. Dostupné z: http://www.php.net/manual/en/intro-whatis.php . Zabezpečení před zranitelnostmi, 2013 [online]. Nette Foundation. [cit. 2013-04-24]. Dostupné z: http://doc.nette.org/cs/vulnerability-protection .
Přílohy
A
A
DVD
47
DVD
Na přiloženém DVD je k dispozici elektronická verze bakalářské práce a virtuální obraz disku s nastaveným MapServerem, PostGISovou databází a celou aplikací.