ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA STAVEBNÍ
BAKALÁŘSKÁ PRÁCE
PRAHA 2013
Jan ŠPIČKA
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE FAKULTA STAVEBNÍ OBOR GEOINFORMATIKA
BAKALÁŘSKÁ PRÁCE
NÁVRH TURISTICKÉHO PORTÁLU
Vedoucí práce: Ing. Michal Seidl, Ph.D. Katedra speciální geodézie
červen 2013
Jan ŠPIČKA
ZDE VLOŽIT LIST ZADÁNÍ
Z důvodu správného číslování stránek
ABSTRAKT Návrh turistického portálu, který je založen na datech OpenStreetMap, s podporou správy prostorových dat a jejich vyhledáváním, uživatelskými profily a integrací prvků sociálních sítí.
KLÍČOVÁ SLOVA OpenStreetMap, OpenLayers, Nette, PHP, pgRouting, PostgreSQL, PostGIS, Opensource
ABSTRACT Design of tourism web portal based on OpenStreetMap data with support geospatial routing functionality, users profiles and social networks.
KEYWORDS OpenStreetMap, OpenLayers, Nette, PHP, pgRouting, PostgreSQL, PostGIS, Opensource
PROHLÁŠENÍ
Prohlašuji, že bakalářskou práci na téma „ Návrh turistického portálu“ jsem vypracoval samostatně. Použitou literaturu a podkladové materiály uvádím v seznamu zdrojů.
V Praze dne
...............
.................................. (podpis autora)
PODĚKOVÁNÍ
Rád bych poděkoval vedoucímu mojí bakalářské práce Ing. Michalu Seidlovi, Ph.D. a Ing. Martinu Landovi za připomínky a pomoc při zpracování této práce. . . .
Obsah
Úvod
10
1 Turistické portály
12
1.1
1.2
Rozdělení
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
1.1.1
Charakteristické znaky . . . . . . . . . . . . . . . . . . . . . .
12
1.1.2
Rozsah . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
Zhodnocení portálů . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.2.1
Regionální . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1.2.2
Národní
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
1.2.3
Výsledný přehled . . . . . . . . . . . . . . . . . . . . . . . . .
18
2 Požadavky na funkcionalitu 2.1
2.2
2.3
Bodové objekty
19
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.1.1
Základní atributy . . . . . . . . . . . . . . . . . . . . . . . . .
19
2.1.2
Kategorie a druh
. . . . . . . . . . . . . . . . . . . . . . . . .
20
2.1.3
Obrázky a videa
. . . . . . . . . . . . . . . . . . . . . . . . .
20
2.1.4
Sociální sítě . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
2.1.5
Tagy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.1.6
Přístupnost
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
2.1.7
Region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
2.2.1
. . . . . . . . . . . . . . . . . . . . .
24
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
Problémy a jejich řešení
Cestní síť
3 Návrh 3.1
27
Případy užití
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.1.1
Registrace uživatele . . . . . . . . . . . . . . . . . . . . . . . .
27
3.1.2
Aktualizace uživatele . . . . . . . . . . . . . . . . . . . . . . .
28
3.1.3
Přidání místa
. . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.1.4
Aktualizace místa . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.2
3.3
3.4
3.1.5
Nahlášení místa . . . . . . . . . . . . . . . . . . . . . . . . . .
31
3.1.6
Vytvoření výletu
. . . . . . . . . . . . . . . . . . . . . . . . .
32
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.2.1
Aktualizace uživatele . . . . . . . . . . . . . . . . . . . . . . .
33
3.2.2
Vytvoření výletu
33
3.2.3
Vyhledání,vytvoření a aktualizace objektu
Procesy
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.3.1
Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.3.2
Objekty
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3.3.3
Výlety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.3.4
Dočasná databáze změn u objektů . . . . . . . . . . . . . . . .
36
3.3.5
Historie objektů . . . . . . . . . . . . . . . . . . . . . . . . . .
37
Rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
3.4.1
Hlavní mapové okno
. . . . . . . . . . . . . . . . . . . . . . .
38
3.4.2
Mapa s vybraným objektem . . . . . . . . . . . . . . . . . . .
38
3.4.3
Vytvořený výlet . . . . . . . . . . . . . . . . . . . . . . . . . .
39
Databáze
4 Použité technologie
40
4.1
Apache2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.2
PHP5
40
4.3
PostgreSQL
4.4
4.5
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.3.1
PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.3.2
PgRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
4.3.3
osm2pgrouting
. . . . . . . . . . . . . . . . . . . . . . . . . .
41
Nette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
4.4.1
Adresářová struktura . . . . . . . . . . . . . . . . . . . . . . .
41
4.4.2
Zjednodušený princip fungování Nette
. . . . . . . . . . . . .
42
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
OpenLayers
5 Implementace 5.1
Databáze 5.1.1
44 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Vytvoření databáze pro použití pgRouting
. . . . . . . . . . .
44 44
5.2
Aplikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
5.2.1
46
OpenLayers
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Závěr
48
Použité zdroje
49
Seznam symbolů, veličin a zkratek
50
Seznam příloh
52
A Instalace používaných programů
54
A.1
A.2
A.3
A.4
A.5
A.6
Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.1.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.1.2
Test funkčnosti
. . . . . . . . . . . . . . . . . . . . . . . . . .
54
PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.2.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.2.2
Text funkčnosti . . . . . . . . . . . . . . . . . . . . . . . . . .
55
Postgres
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
A.3.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
A.3.2
Konfigurace
55
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nástroje pro správu databáze
. . . . . . . . . . . . . . . . . . . . . .
56
A.4.1
Adminer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
A.4.2
PgAdmin3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
PostGIS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.2
Instalace programu . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.3
Inicializace v databázi
. . . . . . . . . . . . . . . . . . . . . .
57
pgRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.2
Instalace programu . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.3
Inicializace v databázi
. . . . . . . . . . . . . . . . . . . . . .
58
A.6.4
Poznámky . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
A.7
A.8
A.9
osm2pgsql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
A.7.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
A.7.2
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
A.7.3
Import do databáze . . . . . . . . . . . . . . . . . . . . . . . .
59
A.7.4
Připomínky
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
osm2pgrouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
A.8.1
60
Import do databáze . . . . . . . . . . . . . . . . . . . . . . . .
osm2pgsql nebo osm2pgrouting
. . . . . . . . . . . . . . . . . . . . .
60
A.10 Quantum GIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
A.10.1 Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
A.10.2 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
B Printscreen ukázkové aplikace
61
C SQL dávka pro vytvoření databáze
64
D Obsah přiloženého CD
75
ČVUT v Praze
ÚVOD
Úvod V současné době, si člověk vlastně ani neuvědomuje, jak moc důležitou část v ní hrají mapy a navigační systémy. Moderní technologie mi umožňují zjistit mojí polohu, ať jsem kdekoli na světě. Dovolují mi podívat se na kulturní památky, do prostých ulic na druhé straně planety nebo vystoupat na Mount Everest. Pomohou mi najít cestu k cíli, poradí kudy a kam jít v jakémkoli čase. S tím, že dnes dokážeme pomocí kapesních přístrojů lokalizovat svoji polohu na zemi, roste různorodé využití této služby, od sdílení své polohy s kamarády, po nalezení zajímavých míst kolem sebe a navigace k nim. Kvalitní mapová data dnes nejsou zadarmo. Podobně jako se softwarem, ke každému placenému programu existuje otevřená alternativa. Sice nemusí být tak kvalitní, ale může se kolem ní vytvořit zapálená komunita, podporující ve svém volném čase její vývoj. V některých prvcích, dokonce drahé profesionální programy
1
předčí. Takovou naší otevřenou alternativou je databáze OpenStreetMap . K takovým projektům se s největší pravděpodobností po čase přidají i větší společnosti, využívající tuto službu, důsledkem čehož se jejich komunita zvětší, dojde k zlepšení kvality a profesionalizaci. Pro turistiku je vývoj mapových technologií přínosný. Jedeme-li na výlet či jdeme jen na procházku, podíváme se na nějaký mapový portál a najdeme si zajímavá místa v okolí. Významnější turistické oblasti většinou svůj portál mají. Při použití API od velkých mapových portálů jako jsou Mapy.cz
2
nebo Google
3
Maps , je i pro laika vytvoření mapy s konkrétním místem a jeho publikace na internetu otázkou několika minut. Cílem mojí práce bylo na základě studie několika již existujících turistických portálů vytvořit návrh a řešení základních funkčních vlastností, za pomoci opensource nástrojů, které by vyhovovali uživatelům a přitom splňovaly požadavky zadavatele.
1 http://www.openstreetmap.org 2 http://mapy.cz
3 http://maps.google.com
10
ČVUT v Praze
ÚVOD
Věřím, že poznatky a návrhy v této práci přispějí a pomohou v implementaci podobných systémů založených na open-source.
11
ČVUT v Praze
1
1. TURISTICKÉ PORTÁLY
Turistické portály
Vytváříme-li nový mapový portál, je třeba přihlédnout nejen k požadavkům zadavatele, ale také k již existujícím mapovým portálům mající podobné zaměření. To nám pomůže vyhnout se slepým nápadům. Na druhou stranu nám průzkum přinese inspiraci, v podobě již zavedených funkčností a originálních nápadů, které jednotlivé portály mohou obsahovat. Pro srovnání jsem prohlédl pár turistických portálů. V práci je více zhodnotím a na závěr sestavím přehledovou tabulku, hodnotící portály na základě jejich charakteristických znaků.
1.1
Rozdělení
1.1.1 Charakteristické znaky Jednotlivé mapové portály, ať jsou určené pro turistiku nebo ne, mají část společných charakteristických znaků. Podle nich se dají navzájem porovnávat a zhodnocovat. Takovéto znaky jsou například:
∙
Interaktivní turistické objekty
∙
Měření vzdáleností
∙
Tvorba profilů
∙
Plánování trasy
∙
Export souřadnic
∙
Turistické mapy
1.1.2 Rozsah Na první pohled, lze rozlišovat mezi lokálními resp. regionálními a globálními resp. národními turistickými portály. Lokální jsou většinou pro určitou turistickou oblast, např. region Vysočina nebo národní v rámci celé České Republiky. Spravují je veliké
12
ČVUT v Praze 1
servery Mapy.cz , aMapy.cz
1. TURISTICKÉ PORTÁLY
2
aj.. Při tomto rozlišení jsou viditelné jasné rozdíly
v zobrazovaných objektech, u regionálního turistického systému jsou objekty více tématičtější a zaměřené na danou oblast. Rozsahem se rozdělují na:
∙
Regionální
∙
Národní
1.2 „
Zhodnocení portálů
...je třeba posuzovat mapové produkty a turistické průvodce nejen z hlediska kar-
tografické úrovně zpracování, ale i aktuálnosti informací, praktičnosti po technické stránce, celkové atraktivnosti titulu a zejména vhodnosti a užitečnosti pro účastníky cestovního ruchu. “ [6]
1.2.1 Regionální Turistická mapa Českého Krumlova Vzhled Mapa je velmi přehledná. Vzhled umožňuje návštěvníkovi rychlou orientaci, v mapě a ušetří čas k nalezení potřebných informací.
Nástroje Mapa obsahuje základní funkční prvky, jako jsou vyhledávání míst a adres. Dále interaktivní prvky u všech důležitých míst ve městě a mapové vrstvy obsahující základní mapu, letecké snímky, turistické trasy a popisy mapy.
Shrnutí Ve svém rozsahu interaktivní turistické mapy menšího města, jsou nabízené nástroje naprosto dostačující. Rozsahem interaktivních prvků, které mapa obsahuje je vidět, že město Český Krumlov nebere potřebu mapového portálu na lehkou váhu. Jejich turistická mapová aplikace obsahuje veškeré potřebné prvky potřebné pro návštěvníka města. Na druhou stranu interaktivní prvky obsahují pouze velmi hrubé informace
1 http://mapy.cz
2 http://amapy.cz
13
ČVUT v Praze
1. TURISTICKÉ PORTÁLY
a oproti jiným turistickým portálům se tu vlastně nic navíc nedozvíme.
Odkaz: http://mapy.ckrumlov.cz/3 Cyklo Jižní Morava Vzhled Jednoduchá turistická mapa Jižní Moravy. Minimum ovládacích prvků neomezuje její funkčnost, ba naopak. Pod pěti tlačítky se skrývá mnoho nástrojů neodrazujících, ale pro návštěvníka maximálně využitelných.
Nástroje Cyklomapa Jižní Moravy je už podle názvu určená převážně pro cyklisty. V tomto směru pro ně mimo všech základních ovládacích prvků, skrývá zajímavé nástroje, které cyklisté určitě ocení. Nejvíce mě zaujalo plánování trasy. Po zvolení počátečního a koncového bodu se další body trasy naplánují tak, aby byla cesta co nejkratší. Dá ještě nastavit jaký povrch a náročnost trasy preferujete. Výsledkem toho je trasa s výškovým profilem, kterou si můžeme pohodlně vytisknout. Interaktivní prvky u důležitých míst jako je například Hrad Špilberk, v centru Brna, mají u sebe odkaz na rozšířené info o objektu. Zde se dozvíme i něco více, než kde se místo nalézá.
Shrnutí Sympatická mapa obsahující veškeré potřebné nástroje. Co lze vytknout je neotevírání mapy v samostatném okně, je to drobnost a neovlivňuje nijak funkčnost. Tento regionální turistický mapový portál se řadí k těm lepším.
Odkaz: http://www.cyklo-jizni-morava.cz/4
3 Tento 4 Tento
mapový portál získal 2. místo v mezinárodní kartografické soutěži Tourmap v roce 2011. mapový portál získal 2. místo v mezinárodní kartografické soutěži Tourmap v roce 2012.
14
ČVUT v Praze
1. TURISTICKÉ PORTÁLY
1.2.2 Národní Kudy z nudy Vzhled Na první pohled, podřadný doplněk turistického portálu „ Kudy z nudy“ . Portál využívá Mapy API od Seznamu, obsahující přidané interaktivní prvky. Uživatelské rozhraní je tak přehledné. Zorientujeme se prakticky okamžitě. Kromě objektů, zde nic navíc není. Jednoduchost je výhodou mapy. Návštěvník využívá pouze objekty přímo v mapě a nestará se o jiné ovládací prvky.
Nástroje Tvorba výletů s interaktivními prvky je jediným nástrojem portálu. Jejich plánování, zde oproti jiným, řeší zábavněji. Díky rozsáhlé databázi bodových objektů můžeme vytvořit celodenní výlet s místy, které chceme navštívit i s doporučením, kam zajít na dobrý oběd. Po dokončení naplánovaného výletu, nám portál vytvoří trasu, postupně přes všechny zájmové body. Vypočítá se vzdálenost, délka trvání trasy a cena za osobu. Plánujme-li výlet pro čtyřčlennou rodinu, považujeme tyto informace za velmi důležité.
Shrnutí Portál „ Kudy z Nudy“ považuji za užitečný nástroj, pro plánování výletů. Stává se krásným příkladem využití Mapy API od Seznamu, jako prvku „ turistického portálu“ . Nedostatkem při vytváření „ výletu“ , je nezobrazování průběžných výsledků délky trasy a ceny za osobu. Pro tvorbu mapových portálů, nemusí být použíti Mapy API vždy vhodným řešením. S ohledem na návštěvnost, doporučuji, se nad tím nejprve zamyslet. Neboť dle smluvního ujednání si provozovatel vyhrazuje právo dle vlastního uvážení omezit libovolnému uživateli počet povolených použití služby za den, bez povinnosti to odůvodňovat. To samozřejmě neznamená zavrhnout Mapy API. Uvědomme si, že
15
ČVUT v Praze
1. TURISTICKÉ PORTÁLY
tato služba není absolutně bez omezení.
Odkaz: http://www.kudyznudy.cz/ Mapy.cz Vzhled Mapy obsahují jednoduché kompaktní rozhraní. Pod několika ovládacími prvky najdeme mnoho nástrojů. Nejsou však nijak zvláštní. Spíše stanovují vzhled standardní mapové aplikace.
Nástroje 5
Mezi moderní mapové portály lze zařadit Mapy.cz . Obsahují veškeré standardní nástroje od interaktivních prvků přes vyhledávání, plánování tras, změny podkladové vrstvy a tvorby profilů.
Shrnutí Mapový portál od Seznamu zná každý Čech, používající internet. Je jeden z nejlepších a nejpoužívanějších mapových portálů v České republice. Přestože není přímo zaměřen jen pro turisty, obsahuje mnoho, pro celoroční turistiku, zajímavých informací. Například o letos nově spuštěných běžkařských trasách. Podle vyjádření Seznamu, dojde časem k rozšíření, o informaci, týkající se například aktuální teplotu a kvalitu sněhu, v čase lyžařské sezóny.
Odkaz: http://mapy.cz
5 http://mapy.cz
16
ČVUT v Praze
1. TURISTICKÉ PORTÁLY
Tourmapy.cz Vzhled Podoba portálu, podle počtu tlačítek a možností nastavení vypovídá, že toho umí
6
mnoho a pravděpodobně to tak bude. Portál využívá Mapy API API
7
a Google Maps
zároveň. Svojí databází objektů dotváří veliký turistický mapový portál.
Nástroje Tourmapy.cz kromě standardních nástrojů obsažených ve větších turistických mapových portálech, vlastní i neobvyklé nástroje. Jedním z nich je vyhledávání památek podle otvírací doby. Mezi další patří vyhledávání v kalendáři akcí a jiný umožňuje nalezení ubytování a jeho rezervaci přímo skrz mapový portál. Plánuji-li dovolenou a rád bych ji využil putováním po památkách, při tom se zúčastnil zajímavých akcí, Tourmapy.cz mi s tím pomohou. Jednoduše vyhledám zajímavé objekty, v okolí plánované cesty. Vyberu akce konající se, v časovém termínu pro mně vhodném, najdu vyhovující ubytování a zajistím jeho rezervaci.
Shrnutí Tourmapy.cz jsou velkým turistickým portálem. Přemírou poskytovaných nástrojů si však trochu škodí a leckterého uživatele by to mohlo odradit. Pokud však chcete mít přesně naplánovaný výlet, je tento portál vhodným nástrojem.
Odkaz: http://tourmapy.cz/8
6 http://api.mapy.cz/
7 https://developers.google.com/maps/ 8 Tento
mapový portál získal 3. místo v mezinárodní kartografické soutěži Tourmap v roce 2011
a 1. místo v roce 2012
17
ČVUT v Praze
1. TURISTICKÉ PORTÁLY
1.2.3 Výsledný přehled Název /
Interaktivní
Měření
Tvorba
Plánování
Export
Turistické
Vlastnosti
prvky
vzdáleností
profilů
trasy
souřadnic
trasy
kudyznudy.cz
ano+
jinak
ne
ano+
ne
ne
idnes.cz
ano
ano
ano
ano
ano
ano
mapy.cz
ano+
ano
ano
ano
ano
ano
turistika.cz
ano+
ne
ne
ne
ne
ano
ano
ano
ano
ano
ano
ano
ne
ano
ano
ne
ano
ano
ano
ano
ne
ne
ne
ano
ano+
ano
ano
ano
ano
ano
ano
ano
ne
ano
pouze KML
ne
tourmapy.cz cykloserver.cz ckrumlov.cz cyklo-jizni-morava.cz google.cz
Konečné pořadí portálů závisí na prioritách uživatelů, proto si nedovolím sestavovat žádný žebříček. Orientačně, lze označit portály s největším množstvím funkcí za ty nejlepší. Mezi ně se řadí Mapy.cz, iDNES.cz, Turmapy.cz a Cyklo-jizni-morava.cz. Dle mého subjektivního názoru vyšel nejlépe turistický mapový portál Kudy z nudy. Jeho použitelnost ve spojení s dostatkem turisticky zajímavých míst byla výborná a zhruba tímto směrem bych chtěl navrhovaný turistický mapový portál směrovat.
18
ČVUT v Praze
2
2. POŽADAVKY NA FUNKCIONALITU
Požadavky na funkcionalitu
2.1
Bodové ob jekty
Nejdůležitější částí celého navrhovaného turistického portálu je seznam bodových objektů, dělících se do několika kategorií. Bodové objekty mohou tvořit sami uživatelé. Kromě základních informací, které jsou jedinečné, ne však unikátní, mají jednotlivé objekty další atributy už společné, byly pro ně v databázi vytvořeny samostatné tabulky spojené s objektem spojovou tabulkou.
2.1.1 Základní atributy Každý bodový objekt, kromě informace o svojí poloze, bude obsahovat i další atributy:
∙
created - čas vytvoření
∙
modified - čas poslední úpravy
∙
description - stručný popis, zobrazující se v mapě
∙
content - popis, objevující se na samostatné stránce o objektu
∙
opening_time - otevírací čas pro každý den v týdnu
∙
position - dodatečné info o poloze
∙
owner_name - jméno majitele objektu
∙
address_street, address_city, address_postcode - adresa
∙
phone_number - kontaktní telefonní číslo
∙
email - kontaktní email
∙
www - webová stránka vztahující se k objektu
∙
rating - hodnocení místa
∙
price - nejnižší a nejvyšší cena
19
ČVUT v Praze
∙
2. POŽADAVKY NA FUNKCIONALITU
condition - podmínky, např. pokud není objekt volně přístupný, není vhodný pro děti, nesmí tam domácí zvířata
∙
curiosity - zajímavosti
2.1.2 Kategorie a druh 1
Podle vzoru geosumava.cz
budou převzaty kategorie s typy objektů aktuálně použí-
vaných. Moderátor bude moci kdykoli kategorie přidávat, odebírat a upravovat.
∙
ubytování: hotely, apartmány, penziony, ubytovny, chaty a chalupy, kempy
∙
zábava: kulturní akce, programy pro děti, kultura, lyžarské areály, noční život, outdoor, sport a wellness
∙
zajímavá místa: bunkry, přírodní krásy, rozhledny a výhledy, železná opona pohraniční pásmo, pamětihodnosti, poutní a léčivá místa, zaniklé obce
∙
služby: infocentra, autoservisy, bankomaty, lékařská střediska, gastro, lékárny, policie, pošty, půjčovny
Pro upřesnění vlastností se u jednotlivých typů objektů přidá parametr s informaci, zdali je typ objektu komerční čí nikoli. Podle toho, zda je objekt komerční či není, nastavíme na aplikační úrovni pro objekt různé atributy. Např. Hotel je komerční objekt, přiřadíme mu vlastnosti v podobě telefonního čísla, provozní doby, ceník aj.. Např. zaniklé obce budou mít pouze surové informace o poloze, přístupnosti aj., neboť nemají žádnou otvírací dobu nebo adresu a ceník.
2.1.3 Obrázky a videa 2
Obrázky k jednotlivým objektům budeme ukládat do databáze jako bytea mátu binárních dat.
1 http://www.geosumava.cz/
2 http://www.postgresql.org/docs/9.1/static/datatype-binary.html
20
ve for-
ČVUT v Praze
2. POŽADAVKY NA FUNKCIONALITU
3
Videa o jednotlivých objektech uložíme na server YouTube , nabízející pro tuto potřebu potřebný prostor a do databáze se videa uloží jako odkaz se server. Díky popularitě této sociální sítě YouTube, se tak může zvýšit návštěvnost navrhovaného turistického portálu. Za zhlédnutá videa může být i nemalý peněžitý profit, z něhož je možné následně investovat do rozvoje portálu. Příklad vložení YouTube videa:
<iframe width="560" height="315" src="ODKAZ" frameborder="0" allowfullscreen>
2.1.4 Sociální sítě Současná doba se bez sociálních sítí neobejde. Lidé přes ně sdílejí mnoho informací, zajímavých i nepodstatných, dle svého uvážení, zájmu či vzdělání. Rozšiřuje se tím povědomí o značce nebo službách.
4
Podle portálu statcounter.com
5
patří mezi nejrozšířenější sociální sítě v České
6
republice Facebook , YouTube, Twitter
a nezanedbatelný počet uživatelů má i
7
Google+ , jehož aktivní jádro je malé, ale stále se zvětšuje. Díky těmto poznatkům je vhodné do portálu zapojil prvky z těchto čtyř sociálních sítí. YouTube jako úložiště a na propagaci videí a z ostatních tří bych použil tzv. Social plugins, které u každého objektu umožní jeho sdílení.
∙
Google+
∙
Twitter
∙
Facebook
https://developers.google.com/+/web/
https://dev.twitter.com/ https://developers.facebook.com/docs/plugins/
3 http://youtube.com
4 http://gs.statcounter.com/ 5 http://facebook.com 6 http://twitter.com
7 http://plus.google.com
21
ČVUT v Praze
2. POŽADAVKY NA FUNKCIONALITU
2.1.5 Tagy 8
Každý bodový objekt bude mít podporu tagů . Tagy jsou ne-hierarchická klíčová slova nebo pojmy, přidávající informace k určitému objektu. Tento druh metadat pomáhá věci blíže popisovat a dovoluje je pomocí nich samotných vyhledávat. Tagy samotné jsou nezávislé na typech míst a jejich kategoriích, jsou unikátní pro různé objekty a více míst může mít jeden společný tag. Tagy k objektům obvykle vytváří sami uživatelé podle vlastních pocitů. Např. Hrad Loket by mohl mít tagy: #hrad, #kareliv, #pamatka, #voda, #vezeni
2.1.6 Přístupnost U turistických portálů je přístupnost k objektům velice důležitou informací, například pokud se k nějakému objektu dokáži dostat pěšky, neznamená to hned, že se tam dostanu i na kole. Nemůžete-li se pohybovat je o to více důležitá informace o bezbariérových přístupech a vůbec místech vhodných pro vozíčkáře. Různé druhy přístupnosti jsou např:
∙
autem
∙
na kole
∙
pěšky
∙
na vozíčku
2.1.7 Region Informace o tom v jakém regionu se objekt nachází je užitečná. Hledáme-li místo ve určité oblasti, pak je toto nástroj zjednodušující hledání.
8 http://en.wikipedia.org/wiki/Knowledge_tag
22
ČVUT v Praze
2.2
2. POŽADAVKY NA FUNKCIONALITU
Uživatelé
V portálu bude existovat několik druhů uživatelů, konkrétně:
∙
nepřihlášený návštěvník (ghost)
–
–
má možnost:
*
vyhledávat a zobrazovat objekty
*
plánovat výlety
nemá možnost:
*
upozorňovat na chybná místa
*
vytvářet nová místa
*
ukládat si výlety a místa mezi oblíbené
*
aktualizovat již existující místa
*
přidávat nové fotografie k různým místům, a možnost jejich následného smazání
∙
registrovaný uživatel
–
9
má možnost:
*
vyhledávat a zobrazovat objekty
*
plánovat výlety
*
upozorňovat na chybná místa
*
vytvářet nová místa
*
ukládat si výlety a místa mezi oblíbené
*
aktualizovat již existující místa
*
přidávat nové fotografie k různým místům a možnost jejich následného smazání
9 Veškeré
změny týkající se míst ovlivňující uživatele schvaluje moderátor
23
ČVUT v Praze
∙
2. POŽADAVKY NA FUNKCIONALITU
moderátor
–
moderátor má stejná práva jako registrovaný uživatel, s tím rozdílem, že nemusí čekat na schválení sebou samým a schvaluje změny provedené registrovanými uživateli na jednotlivých objektech
∙
administrátor
–
administrátor má stejná práva jako moderátor, navíc má možnost navrhovat nové moderátory
2.2.1 Problémy a jejich řešení Komerční objekty Komerční objekty, by měly mít přiřazenou autorizovanou osobu, která je může upravovat. Vzniká otázka, jak takovou osobu určit. Vzhledem k finančním možnostem nepřipadá v úvahu žádná z možností, kterou využívají společnosti jako Google v
10
Google Places
11
či Foursquare
u svých
Venues. Mohou být vhodnou inspirací.
Pokud vytváříme místo v Google Places, tak po zařazení objektu do kategorie a vyplnění všech možných políček, je potřeba nechat si vklad ověřit. Během několika týdnů pracovník Googlu údaje u místa zkontroluje a pošle na danou adresu korespondenční lístek s PIN kódem. Bohužel jejich řešení je strašně komplikované a kompletní vytvoření místa trvá v lepším případě i půl roku. Místo samozřejmě existuje už v době jeho vytvoření, ale pokud není ověřeno, není zařazeno do vyhledávání, tudíž ztrácí hodnotu. Ve Foursquare oproti Googlu může místo vytvořit každý uživatel. Je mu umožněno u něj vyplnit veškeré informace a takové místo začne ihned existovat. Pokud majitel objektu zjistí existenci místa, které fyzicky vlastní, může se k němu přihlásit. Po zadání telefonního čísla dojde k telefonickému spojení s robotem, který mu položí několik otázek o jeho vztahu k místu. Tím je autorizace ověřena. Na danou adresu
10 http://www.google.com/business/placesforbusiness/ 11 https://foursquare.com/
24
ČVUT v Praze
2. POŽADAVKY NA FUNKCIONALITU
místa přijde dopis s doplňujícími informacemi a samolepkou upozorňující na to, že místo se nachází na Foursquare. V případě navrhovaného turistického portálu, pro region Šumavy, by bylo vhodné autorizaci uživatelů k místům vynechat. Nelze dostatečně efektivně rozpoznat vlastníli uživatel místo nebo ne. Problém řešit pomocí moderátorů. Pokud uživatel stojí o vytvoření místa, vyplní veškeré potřebné údaje a počká na schválení moderátorem. Veškeré změny je potřeba opět schválit.
2.3
Cestní síť
Pro cestní síť stávající se důležitou součástí navrhovaného turistického portálu budou použity data z OpenStreetMap
12
, což je otevřená databáze geodat z celého světa.
Každý den aktualizovaná data z databáze OpenStreetMap, se dají zdarma stáhnout např. ze serveru geofabrik.de
13
.
Export probíhá pomocí nástroje osm2pgrouting. Tento nástroj, ze souboru „ osm“ , podle předpisu v podobě „ xml“ souboru vytáhne cesty, které bychom chtěli použít. A vytvoří nad nimi topologicky čistou síť. Nad níž budeme moci provádět síťové analýzy. Pro náš portál jsem upravil ceny cest, aby bylo možné hledat nejkratší cestu pro vozidlo a nejkratší cestu pro chodce (turistu). Cena jednotlivých typů cest se navýšila pro cesty po kterých by se jednotlivé skupiny nemohli nebo nechtěli pohybovat. V reálném světě jsou různá omezení nebo výhody pro různé druhy cest. Jinými slovy, vždy nehledáme nejkratší cestu, ale např. nejlevnější s minimálními náklady. Není žádné omezení pro to, co jako cenu uvažujme.
12 http://www.openstreetmap.org/ 13 http://download.geofabrik.de/
25
ČVUT v Praze
2. POŽADAVKY NA FUNKCIONALITU
Obr. 2.1: Routing: Rozdíl trasy pro motorové vozidlo (A) a turistické trasy (B)
Obr. 2.2: Routing: Rozdíl trasy pro motorové vozidlo (A) a turistické trasy (B)
26
ČVUT v Praze
3
3. NÁVRH
Návrh
3.1
Případy užití
Případ užití neboli use case, v softwarovém a systémovém inženýrství nazýváme seznam kroků, který definuje interakci mezi tzv. rolí (v UML označována jako "actor") a systémem. Za rolí může být člověk nebo externí systém. [5]
3.1.1 Registrace uživatele Každý návštěvník bude mít možnost se v systému registrovat.
Obr. 3.1: Use case: Registrace
1.1 Registrace Vstupní podmínka: žádná 1.
U
Zadá povinné údaje pro registraci
2.
IS
Kontrola povinných údajů
3.
IS
Vytvoření uživatele
27
ČVUT v Praze
3. NÁVRH
3.1.2 Aktualizace uživatele Registrovaný uživatel má právo měnit svoje osobní údaje.
Obr. 3.2: Use case: Aktualizace uživatele
1.3 Aktualizace uživatele Vstupní podmínka: Registrovaný uživatel 1.
U
Aktualizuje informace o uživateli
2.
IS
Kontrola údajů
3.
IS
Aktualizuje uživatele v systému
28
ČVUT v Praze
3. NÁVRH
3.1.3 Přidání místa Registrovaný uživatel má možnost přidávat nová místa.
Obr. 3.3: Use case: Přidání místa
2.1 Přidání místa Vstupní podmínka: Registrovaný uživatel 1.
U
Zadá nové parametry pro místo
2.
IS
Kontrola parametrů
3.
IS
Uloží nové místo, které bude čekat na schválení moderátora
2.2 Vyhledání místa Vstupní podmínka: žádná 1.
U
Zadá název místa
2.
IS
Vyhledá místo
29
ČVUT v Praze
3. NÁVRH
3.1.4 Aktualizace místa Registrovaný uživatel může aktualizovat již existující místa.
Obr. 3.4: Use case: Aktualizace místa
2.3 Aktualizace místa Vstupní podmínka: Registrovaný uživatel 1.
U
Aktualizuje parametry pro místo
2.
IS
Kontrola parametrů
3.
IS
Uloží aktualizované místo, které bude čekat na schválení moderátora
30
ČVUT v Praze
3. NÁVRH
3.1.5 Nahlášení místa Registrovaný uživatel bude mít možnost nahlašovat chyby v místech.
Obr. 3.5: Use case: Nahlášení místa
2.3 Nahlášení místa Vstupní podmínka: Registrovaný uživatel 1.
U
Nahlásí problém v místě vyplněním příslušného formuláře
2.
IS
Kontrola parametrů
3.
IS
Uloží nahlášený problém, který bude čekat reakci na moderátora
31
ČVUT v Praze
3. NÁVRH
3.1.6 Vytvoření výletu Každému uživateli je umožněno vytvořit výlet a registrovaný uživatel si takový výlet může uložit.
Obr. 3.6: Use case: Vytvoření výletu
2.4 Vytvoření výletu Vstupní podmínka: žádná, pokud chce uživatel výlet uložit musí být přihlášený 1.
U
Uživatel přidá určité místo do výletu
2.
IS
Místo se přidá do seznamu míst tvořící výlet
3.
U, IS
1. a 2. se opakuje, dokud není výlet hotový
2.5 Uložení výletu Vstupní podmínka: vytvořený výlet 1.
U
Uživatel uloží vytvořený výlet
2.
IS
Výlet se uloží do databáze a přiřadí uživateli
32
ČVUT v Praze
3.2
3. NÁVRH
Procesy
3.2.1 Aktualizace uživatele
Obr. 3.7: BPMN: Aktualizace uživatele
3.2.2 Vytvoření výletu
Obr. 3.8: BPMN: Vytvoření výletu
33
ČVUT v Praze
3. NÁVRH
3.2.3 Vyhledání,vytvoření a aktualizace objektu
Obr. 3.9: BPMN: Vyhledání,vytvoření a aktualizace objektu
34
ČVUT v Praze
3.3
3. NÁVRH
Databáze
3.3.1 Uživatelé
Obr. 3.10: Database: Část databáze pro seznam uživatelů
3.3.2 Objekty
Obr. 3.11: Database: Část databáze pro bodové objekty
35
ČVUT v Praze
3. NÁVRH
3.3.3 Výlety
Obr. 3.12: Database: Část databáze pro výlety
3.3.4 Dočasná databáze změn u objektů
Obr. 3.13: Database: Část databáze pro uchovávání dočasných změn objektu
36
ČVUT v Praze
3. NÁVRH
3.3.5 Historie objektů
Obr. 3.14: Database: Část databáze pro uchovávání historie objektu
37
ČVUT v Praze
3.4
3. NÁVRH
Rozhraní
3.4.1 Hlavní mapové okno
Obr. 3.15: Wireframe: Ukázka stránky s mapovým oknem
3.4.2 Mapa s vybraným objektem
Obr. 3.16: Wireframe: Ukázka rozkliknutého objektu v mapě
38
ČVUT v Praze
3. NÁVRH
3.4.3 Vytvořený výlet
Obr. 3.17: Wireframe: Ukázka okna s hotovým výletem
39
ČVUT v Praze
4
4. POUŽITÉ TECHNOLOGIE
Použité technologie
4.1
Apache2
Apache HTTP Server je softwarový webový server s otevřeným kódem pro GNU/Linux, BSD, Solaris, Mac OS X, Microsoft Windows a další platformy. V současné době dodává prohlížečům na celém světě většinu internetových stránek.[3]
4.2
PHP5
PHP je skriptovací programovací jazyk. Je určený především pro programování dynamických internetových stránek a webových aplikací například ve formátu HTML. PHP lze použít i k tvorbě konzolových a desktopových aplikací. Pro desktopové použití existuje kompilovaná forma jazyka. [4]
4.3
PostgreSQL
PostgreSQL je plnohodnotným objektově 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í pověst pro svou spolehlivost a bezpečnost. Běží na všech rozšířených operačních systémech včetně Windows. [2]
4.3.1 PostGIS 1
PostGIS je open source software. Přidává podporu pro geografické objekty objektověrelačnímu databázovému systému PostgreSQL. PostGIS implementuje specifikaci
2
"Simple Features for SQL"konsorcia Open Geospatial Consortium . [8]
4.3.2 PgRouting 3
PgRouting
je rozšíření pro PostGIS / PostgreSQL určené pro síťové analýzy.
1 http://postgis.net/
2 http://www.opengeospatial.org/ 3 http://pgrouting.org/
40
ČVUT v Praze
4. POUŽITÉ TECHNOLOGIE
4.3.3 osm2pgrouting Nástroj pro jednoduchý import dat OSM do PostgreSQL / PostGIS databáze využívající pgRouting.
4.4
4
Nette
Nette je open source PHP 5 Framework, pro vytváření webových aplikací. Snaží se co nejvíce usnadnit vývoj a eliminuje bezpečnostní rizika. Je založen na modelu MVP
5
(model - view - presenter), kdy je veškerá logika přenesena do presenteru,
6
popř. modelu. Součástí Nette je tzv. „ Laďenka“ , která při vývoji odhaluje chyby a napomáhá je tak rychleji opravit. Dalším pomocníkem při vývoji v Nette je pokročilý šablonovací systém Latte. Předností Nette Frameworku je strmá křivka učení, kdy si po krátkém čase osvojíme pokročilé dovednosti. [9]
4.4.1 Adresářová struktura Kromě adresáře
www
není žádný jiný adresář přístupný z webu.
app Adresář obsahuje nejdůležitější součásti celé aplikace. Veškerý kód, který jako programátor tvoříme, se vkládá právě sem. V podadresáři
presenters
se řeší veškerá logika aplikace. V
templates
pomocí
šablonovacího systému tvoříme vzhled aplikace. A v ostatních adresářích se řeší další pokročilé věci. Za zmínku stojí ještě adresář
config, zde se nastavuje např. připojení k databázi
nebo zprovoznění services.
4 http://pgrouting.org/docs/tools/osm2pgrouting.html 5 http://en.wikipedia.org/wiki/Model-view-presenter 6 http://doc.nette.org/cs/debugging
41
ČVUT v Praze
4. POUŽITÉ TECHNOLOGIE
libs Adresář
libs
obsahuje samotný framework.
log a temp V adresářích
log
a
temp
se ukládají výstupy z
Laděnky 7 , cache a sessions.
www 8
V jediném veřejně přístupném adresáři, z internetu se ukládají soubory typu css stylů, javascriptových souborů a obrázků.
4.4.2 Zjednodušený princip fungování Nette
Obr. 4.1: Nette: Zjednodušený princip fungování frameworku
7 http://doc.nette.org/cs/debugging 8 http://www.w3.org/Style/CSS/
42
ČVUT v Praze
4.5
4. POUŽITÉ TECHNOLOGIE
OpenLayers
OpenLayers
9
je JavScriptová knihovna uvolněná pod BSD licencí pro vytváření
mapových aplikací v prostření internetu.
Obr. 4.2: OpenLayers: Map widget
9 https://github.com/openlayers/openlayers
43
ČVUT v Praze
5
5. IMPLEMENTACE
Implementace
V závěrečné části ukážu, že pomocí všech zmiňovaných open source nástrojů lze vytvořit funkční mapovou aplikaci. Bylo vybráno několik základních prvků, které by měla výsledná aplikace mít. Těmito prvky jsou:
∙
zobrazování bodových objektů v mapě
∙
přidávání a editování bodových objektů
∙
tvorba výletů
∙
nalezení a vyobrazení nejvhodnější trasy výletu
5.1
Databáze
5.1.1 Vytvoření databáze pro použití pgRouting Databáze pro síťové analýzy musí splňovat určité zásady. Kromě topologicky čistých dat, je pro síťové analýzy nezbytná existence uzlů a rozdělení všech linii v jejich průsečících. Vytvoření databáze pro síťové analýzy, splňující tyto požadavky, nám zajistí použití nástroje osm2pgrouting. Osm2pgrouting naimportuje do databáze data v požadovaném formátu, ve zobrazení WGS84 (EPSG:4326). V naší aplikaci budem pracovat ve zobrazení Google Mercator (EPSG: 900913) a proto je třeba tyto data transformovat pomocí PostGIS funkce
st_transform. ALTER TABLE ways RENAME COLUMN the_geom TO the_geom1; SELECT AddGeometryColumn(’ways’, ’the_geom’, 900913, ’linestring’, 2); UPDATE ways SET the_geom = st_transform("the_geom1", 900913); SELECT dropgeometrycolumn(’ways’, ’the_geom1’);
Při použití v rámci Šumavy, je možné cestní sít ořezat na požadovanou oblast pomocí PostGIS funkce
ST_Intersects 44
ČVUT v Praze
5. IMPLEMENTACE
SELECT * FROM ways JOIN border ON ST_Intersects(ways.the_geom, border.the_geom) WHERE border.name = ’sumava’);
Obr. 5.1: QuantumGIS: Vizualizace ořezané liniové vrstvy pro sítové analýzy
45
ČVUT v Praze
5.2
5. IMPLEMENTACE
Aplikace
5.2.1 OpenLayers Liniové prvky generujeme v Nette pomocí metody
actionRenderTripPlaces
třídy
MapPresenter ve formátu GeoJSON. Pro zobrazení přidáme jako vektorovou vrstvu do OpenLayers.
Ukázka GeoJSON formátu liniové vrstvy { "type":"FeatureCollection", "features":[ {"geometry": {"type":"MultiLineString", "coordinates":[[[1598517.4196468,6256244.5906515], [1598547.6874163,6256245.8604467], [1598593.8627411,6256262.0291892], ... [1594073.9685884,6245987.6606644], [1594090.221234,6245866.4498661], [1594094.2509996,6245852.3470482]]] }, "type":"Feature","properties":{} } ] }
Ukázka přidání vektorové vrstvy do OpenLayers // show trip style = new OpenLayers.StyleMap({’default’: {strokeColor: "green", strokeOpacity: "0.7", fillColor: "green", 46
ČVUT v Praze
5. IMPLEMENTACE
fillOpacity: "0.5"}}); var trip_json = "/map/rendertrip"; var trip = new OpenLayers.Layer.Vector("Nejkratší trasa", { projection: new OpenLayers.Projection("EPSG:900913"), styleMap: style, protocol: new OpenLayers.Protocol.HTTP({ url: trip_json, format: new OpenLayers.Format.GeoJSON() }), strategies: [new OpenLayers.Strategy.Fixed()] }); map.addLayer(trip);
47
ČVUT v Praze
ZÁVĚR
Závěr V rámci bakalářské práce se mi podařilo, podle zadání, implementovat základní funkce turistického mapového portálu. Ukázková aplikace implementace základních částí se nachází na adrese:
http://inggeo.fsv.cvut.cz:6080/dev/jans/portal2/
www/map/. V první části práce jsem zhodnotil a porovnal některé existující mapové portály. Zaměřoval jsem se zejména na nástroje, které poskytují. Výsledek porovnání jsem shrnul do přehledné tabulky. Získané informace jsem následně použil jako inspiraci při návrhu mapové aplikace. Návrh mapové aplikace byla další část mojí bakalářské práce, velký důraz jsem kladl na návrh databáze. Požadavkem bylo uchovávat historii, o editaci objektů, což jsem v návrhu databáze zohlednil. Práce s databázemi a daty z databáze OpenStreetMap byla největší částí práce. Díky studiu služby OpenStreetMap a nástrojů na ní napojených, jsem se dokonce, během psaní bakalářské práce, stal přispěvatelem do jejich databáze. Pomocí nedávno spuštěného editoru iD
1
je přidání nějaké
feature
velice intuitivní a jednoduché.
Bakalářská práce pro mě měla obrovský přínos, v osvojení si různých nástrojů. Ať už v oblasti GIS nebo OS Linux, což dnes naštěstí, díky open source, spolu úzce souvisí. Během semestru mi tyto nástroje, v mnohém práci ulehčovali. Bohužel, v rámci bakalářské práce je nebylo možné popsat. Dále jsem narazil na další, které mě zaujali a rád bych je prozkoumal. Na závěr bych chtěl zmínit, že jsem „
na vlastní kůži “
zjistil kolik různých oblastí a
programovacích jazyků je třeba pro tvorbu mapového portálu znát. Tvorba mapových aplikací není pouze „
one man show “ .
Myslím si, že není možné být profesionál ve
všech oblastech. Je však důležité mít obecné znalosti, z každé z nich.
1 http://ideditor.com/
48
ČVUT v Praze
POUŽITÉ ZDROJE
Použité zdro je [1] PostgreSQL 9.2.4:
PostgreSQL 9.2.4 Documentation
[online]. Dostupné z URL:
. [2] Ubuntu Wiki:
PostgreSQL [online]. Dostupné z URL:
cz/postgresql>. [3] Wikipedia:
Apache
[online]. Dostupné z URL:
wiki/Apache_HTTP_Server>.
PHP
[4] Wikipedia:
[online]. Dostupné z URL:
wiki/PHP>. [5] Wikipedia:
Use case
[online] Dostupné z URL:
wiki/Use_case>. [6] Tourmap:
tourmap
[online] Dostupné z URL:
aktualne/tourfmap-2013-slavi-10-vyroci>. [7] OSM:
Map
Features
[online]
Dostupné
z
URL:
openstreetmap.org/wiki/Map_Features>. [8] Wikipedia:
PostGIS
[online] Dostupné z URL:
wiki/PostGIS>. [9] Nette:
Nette
[online] Dostupné z URL:
49
.
ČVUT v Praze
SEZNAM SYMBOLŮ, VELIČIN A ZKRATEK
Seznam symbolů, veličin a zkratek ČVUT České vysoké učení technické
FSv
Fakulta stavební
OSM
OpenStreetMap
Nette
Nette Framework
PHP
PHP: Hypertext Preprocessor
API
Application Programming Interface
UML
Unified Modeling Language
50
Seznam obrázků 2.1
Routing: Rozdíl trasy pro motorové vozidlo (A) a turistické trasy (B)
26
2.2
Routing: Rozdíl trasy pro motorové vozidlo (A) a turistické trasy (B)
26
3.1
Use case: Registrace
27
3.2
Use case: Aktualizace uživatele
. . . . . . . . . . . . . . . . . . . . .
28
3.3
Use case: Přidání místa . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.4
Use case: Aktualizace místa
. . . . . . . . . . . . . . . . . . . . . . .
30
3.5
Use case: Nahlášení místa
. . . . . . . . . . . . . . . . . . . . . . . .
31
3.6
Use case: Vytvoření výletu . . . . . . . . . . . . . . . . . . . . . . . .
32
3.7
BPMN: Aktualizace uživatele
. . . . . . . . . . . . . . . . . . . . . .
33
3.8
BPMN: Vytvoření výletu . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.9
BPMN: Vyhledání,vytvoření a aktualizace objektu . . . . . . . . . . .
34
3.10 Database: Část databáze pro seznam uživatelů . . . . . . . . . . . . .
35
3.11 Database: Část databáze pro bodové objekty . . . . . . . . . . . . . .
35
3.12 Database: Část databáze pro výlety . . . . . . . . . . . . . . . . . . .
36
3.13 Database: Část databáze pro uchovávání dočasných změn objektu
. .
36
3.14 Database: Část databáze pro uchovávání historie objektu . . . . . . .
37
3.15 Wireframe: Ukázka stránky s mapovým oknem . . . . . . . . . . . . .
38
3.16 Wireframe: Ukázka rozkliknutého objektu v mapě . . . . . . . . . . .
38
3.17 Wireframe: Ukázka okna s hotovým výletem
39
. . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
4.1
Nette: Zjednodušený princip fungování frameworku
. . . . . . . . . .
42
4.2
OpenLayers: Map widget . . . . . . . . . . . . . . . . . . . . . . . . .
43
5.1
QuantumGIS: Vizualizace ořezané liniové vrstvy pro sítové analýzy
.
45
B.1
Printscreen aplikace: Výchozí okno
. . . . . . . . . . . . . . . . . . .
61
B.2
Printscreen aplikace: Zobrazení místa . . . . . . . . . . . . . . . . . .
61
B.3
Printscreen aplikace: Ukázková trasa
. . . . . . . . . . . . . . . . . .
62
B.4
Printscreen aplikace: Seznam míst . . . . . . . . . . . . . . . . . . . .
62
B.5
Printscreen aplikace: Editace místa
63
. . . . . . . . . . . . . . . . . . .
ČVUT v Praze
SEZNAM PŘÍLOH
Seznam příloh
A Instalace používaných programů A.1
A.2
A.3
A.4
A.5
A.6
A.7
A.8
54
Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.1.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.1.2
Test funkčnosti
. . . . . . . . . . . . . . . . . . . . . . . . . .
54
PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.2.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
A.2.2
Text funkčnosti . . . . . . . . . . . . . . . . . . . . . . . . . .
55
Postgres
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
A.3.1
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
A.3.2
Konfigurace
55
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Nástroje pro správu databáze
. . . . . . . . . . . . . . . . . . . . . .
56
A.4.1
Adminer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
A.4.2
PgAdmin3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
PostGIS
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.2
Instalace programu . . . . . . . . . . . . . . . . . . . . . . . .
57
A.5.3
Inicializace v databázi
. . . . . . . . . . . . . . . . . . . . . .
57
pgRouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.2
Instalace programu . . . . . . . . . . . . . . . . . . . . . . . .
57
A.6.3
Inicializace v databázi
. . . . . . . . . . . . . . . . . . . . . .
58
A.6.4
Poznámky . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
osm2pgsql . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
A.7.1
Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
A.7.2
Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
A.7.3
Import do databáze . . . . . . . . . . . . . . . . . . . . . . . .
59
A.7.4
Připomínky
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
osm2pgrouting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
A.8.1
60
Import do databáze . . . . . . . . . . . . . . . . . . . . . . . .
52
ČVUT v Praze
A.9
osm2pgsql nebo osm2pgrouting
SEZNAM PŘÍLOH
. . . . . . . . . . . . . . . . . . . . .
60
A.10 Quantum GIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
A.10.1 Zdroje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
A.10.2 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
B Printscreen ukázkové aplikace
61
C SQL dávka pro vytvoření databáze
64
D Obsah přiloženého CD
75
53
ČVUT v Praze
A
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
Instalace používaných programů
Popis instalace
1
2
3
serveru Apache2 , skriptovacího jazyka PHP5.4 , databáze Post-
4
5
6
7
greSQL jeho rozšíření PostGIS a PgRouting na operačním systému Ubunut 12.10 .
A.1
Apache
A.1.1 Instalace Do terminálu napíšeme:
sudo apt-get install apache2
A.1.2 Test funkčnosti 8
Apache při instalaci vytvořil adresář /var/www/ což je vlastně http://localhost . Pokud se ve webovém prohlížeči podíváme na adresu http://localhost a mělo by se vypsat "
A.2
It works!", což znamená, že instalace proběhla v pořádku.
PHP
Pro používání PHP nainstalujeme balíky php5 a libapache2-mod-php5 a Apache restartujeme.
A.2.1 Instalace sudo apt-get install php5 libapache2-mod-php5 sudo /etc/init.d/apache2 restart 1 Všechny
příkazy je nutné spouštět pomocí sudo.
2 http://httpd.apache.org/ 3 http://php.net/
4 http://www.postgresql.org/ 5 http://postgis.net/
6 http://pgrouting.org/ 7 http://www.ubuntu.cz/
8 http://cs.wikipedia.org/wiki/Localhost
54
ČVUT v Praze
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
A.2.2 Text funkčnosti Soubory s PHP se dají spustit po vložení do adresáře /var/www. Vytvořme si tedy krátký PHP skript, který spustíme z adresy http://localhost.
A.3
Postgres
Pro používání Postgres
9
nainstalueme balíky postgresql a php-pgsql.
A.3.1 Instalace sudo apt-get install postgresql php5-pgsql \ postgresql-client postgresql-contrib
A.3.2 Konfigurace S databází pracuje uživatel postgres. Tento superuživatel naší databáze, má právo vytvářet další uživatele a databáze. My bychom mu chtěli nastavit heslo, abychom mohli s databází pracovat.
sudo passwd postgres sudo /etc/init.d/postgresql restart Dále bychom chtěli vytvořit uživatele v databázi, abychom nepřistupovali do databáze pod uživatelem postgres, ale pod naším uživatelem např. admin.
su postgres createuser admin createdb admin psql admin admin=# ALTER USER admin with password ’heslo’; 9 http://www.postgresql.org/
55
ČVUT v Praze
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
Nyní je vytvořen uživatel
admin s heslem heslo, za kterého se budeme přihlašovat
do databáze.
A.4
Nástro je pro správu databáze
A.4.1 Adminer 10
Adminer
(dříve phpMinAdmin) je plně vybavený nástroj pro správu databáze nap-
saný v PHP. Na rozdíl od nástroje phpMyAdmin obsahuje jediný soubor, připravený pro nahrání na cílový server. Adminer je k dispozici pro MySQL, PostgreSQL, SQLite, MS SQL a Oracle.
Instalace Adminer stáhnem z adresy
http://www.adminer.org/, rozbalíme, soubor přejmenu-
jeme na index.php a vložíme do adresáře /var/www/adminer. Adminer poté přístupný z adresy http:/localhost/adminer.
A.4.2 PgAdmin3 11
pgAdmin
je populární a nejlépe vybavená administrační a vývojářská Open Source
platforma pro PostgreSQL, nejpokročilejší Open Source databázi na světě. Aplikaci lze používat pod Linuxem, FreeBSD, Solaris, Mac OSX a Windows systémy ke správě PostgreSQL 7.3 a novějšího běžícího na libovolné platformě.
Instalace sudo apt-get install pgadmin3 10 https://github.com/vrana/adminer 11 http://www.pgadmin.org/
56
ČVUT v Praze
A.5
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
PostGIS
A.5.1 Zdroje Přidáme si zdroje:
sudo add-apt-repository ppa:ubuntugis/ubuntugis-unstable
A.5.2 Instalace programu sudo apt-get install python-software-properties sudo apt-get install postgis postgresql-9.1-postgis
A.5.3 Inicializace v databázi Od verze PostgreSQL 9.1, je možné nainstalovat v databázi PostgreSQL PostGIS příkazem:
CREATE EXTENSION postgis;
A.6
pgRouting
A.6.1 Zdroje sudo add-apt-repository ppa:georepublic/pgrouting
A.6.2 Instalace programu sudo apt-get install software-properties-common sudo apt-get install gaul-devel sudo apt-get install postgresql-9.1-pgrouting sudo apt-get install postgresql-9.1-pgrouting-dd sudo apt-get install postgresql-9.1-pgrouting-tsp
57
ČVUT v Praze
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
A.6.3 Inicializace v databázi V databázi spustíme tyto SQL soubory:
/usr/share/postlbs/routing_core.sql /usr/share/postlbs/routing_core_wrappers.sql /usr/share/postlbs/routing_topology.sql
A.6.4 Poznámky Pro jednoduché vyhledání nejbližších elementů routovací sítě, potřebných pro sestavení dotazu jsou potřeba k doinstalování funkce a
find_nearest_node_within_distance,
12
find_nearest_link_within_distance
které na vyhledají nejbližší bod k obecným
souřadnicím. V našem případě je použití následovné:
SELECT id from find_node_by_nearest_link_within_distance(( SELECT st_astext(GEOMETRIE) FROM NAZEV_TABULKY_Z_KTERE_HLEDAME WHERE id = ?),RADIUS,’NAZEV_TABULKY_KDE_HLEDAME’) Bohužel jsem při použití narazil na problém těchto funkcí se starší verzí PostGIS. Funkce v sobě volaly staře pojmenované funkce ze starší verze PostGIS, závada byla nahlášena
13
na serveru GitHub. Obratem bylo přislíbeno, že se problém opraví v
příštím vydání pgRouting 2.0. Dočasně byl problém vyřešen přejmenováním funkcí na existující funkce PostGIS.
A.7
osm2pgsql
osm2pgsql
14
převede OSM data do PostgreSQL / PostGIS databáze.
A.7.1 Zdroje sudo add-apt-repository ppa:kakrueger/openstreetmap 12 https://github.com/pgRouting/pgrouting/blob/master/core/sql/matching.sql 13 https://github.com/pgRouting/pgrouting/issues 14 https://github.com/openstreetmap/osm2pgsql
58
ČVUT v Praze
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
A.7.2 Instalace sudo apt-get install osm2pgsql
A.7.3 Import do databáze su postgres osm2pgsql -d JMÉNO_DB -p PREFIX -s -S default.style OSM_SOUBOR
A.7.4 Připomínky Program osm2pgsql je pro získání všech potřebných dat ze souborů *.osm ideálním nástrojem. Pomocí souboru default.style si nastavíme sloupce, které chceme do databáze naimportovat. Nadefinování souboru default.style je nutné, protože ve většině případů default.style obsahuje sloupce, které nevyžadujeme a zároveň neobsahuje sloupce, které vyžadujeme. Výsledná úprava nám může ušetřit nemálo místa na disku. Je nutné připomenout, že v databázi se nevytváří všechny sloupce, obsažené v *.osm soubor obsahuje. Například pokud bychom z databáze chtěli vyselektovat turistické trasy v České republice, výchozí soubor default.style nám stačit nebude a je třeba přidat následující řádky:
# Czech style hiking tracks. way kct_yellow text linear way kct_red text linear way kct_green text linear way kct_blue text linear
A.8
osm2pgrouting 15
Nejnovější verzi osm2pgrouting si stáhneme se serveru GitHub
Poslední verze ze září 2012 obsahuje chybu způsobující, že při importu *.osm souboru do databáze přetékají některé identifikátory v tabulkách. K opravě je třeba
15 https://github.com/pgRouting/osm2pgrouting
59
ČVUT v Praze
A. INSTALACE POUŽÍVANÝCH PROGRAMŮ
v souboru ./osm2pgrouting/src/Export2DB.cpp změnit u příslušných sloupců typ integer na bigint a poté zkompilovat příkazem:
make Další výčet chyb, které je třeba vzít v úvahu je možné nalézt v sekci issues
16
projektu osm2pgrouting
na serveru GitHub
A.8.1 Import do databáze ./osm2pgrouting -file OSM_SOUBOR -conf mapconfig.xml \ -dbname JMÉNO_DB -user JMÉNO_UŽIVATELE -passwd HESLO -clean
A.9
osm2pgsql nebo osm2pgrouting
Jak jsem již výše napsal, pomocí programu osm2pgsql získáme z *.osm souboru vše co nás napadne, dokonce můžeme vytvořit i cestní síť a na ní provádět síťové analýzy. Problém je, že tím bychom vlastně vytvořili osm2pgrouting, který toto už v základu vytváří a je na to přímo uzpůsobený, vzniklo by něco co již existuje a funguje. Pokud máme zájem hledat nejkratší cesty pomocí pgRouting, určitě použijeme osm2pgrouting, ve všech jiných případech se spíše vyhovuje osm2pgsql.
A.10
Quantum GIS
S pomocnými vizualizacemi při testování OSM dat pomáhal open source gisovský nástroj Quantum GIS
A.10.1 Zdroje sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
A.10.2 Instalace sudo apt-get install qgis 16 https://github.com/pgRouting/osm2pgrouting/issues
60
ČVUT v Praze
B
B. PRINTSCREEN UKÁZKOVÉ APLIKACE
Printscreen ukázkové aplikace
Obr. B.1: Printscreen aplikace: Výchozí okno
Obr. B.2: Printscreen aplikace: Zobrazení místa
61
ČVUT v Praze
B. PRINTSCREEN UKÁZKOVÉ APLIKACE
Obr. B.3: Printscreen aplikace: Ukázková trasa
Obr. B.4: Printscreen aplikace: Seznam míst
62
ČVUT v Praze
B. PRINTSCREEN UKÁZKOVÉ APLIKACE
Obr. B.5: Printscreen aplikace: Editace místa
63
ČVUT v Praze
C
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
SQL dávka pro vytvoření databáze
/* Types & Categories */ CREATE TABLE types ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, image BYTEA ); CREATE TABLE categories ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE categories_types ( categories_id BIGINT REFERENCES categories(id) ON DELETE RESTRICT, types_id BIGINT REFERENCES types(id) ON DELETE CASCADE, PRIMARY KEY (categories_id, types_id) ); /* Places */ CREATE TABLE places ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, types_id BIGINT NOT NULL REFERENCES types(id) ON DELETE RESTRICT, geom GEOMETRY(Point, 900913) NOT NULL, created TIMESTAMP NOT NULL DEFAULT current_timestamp, modified TIME NOT NULL, elevation INTEGER, description TEXT,
64
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
content TEXT, opening_time VARCHAR(255)[7], position TEXT, owner_name VARCHAR(255), address_street VARCHAR(255), address_city VARCHAR(255), address_postcode VARCHAR(255), phone_number VARCHAR(255), email VARCHAR(255), www VARCHAR(255), rating INTEGER DEFAULT 0, price INTEGER[2], condition TEXT, curiosity TEXT, isvalid BOOLEAN DEFAULT FALSE ); /* Trips */ CREATE TABLE trips ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, created TIMESTAMP NOT NULL DEFAULT current_timestamp, rating INTEGER DEFAULT 0 ); CREATE TABLE trips_places ( trips_id BIGINT REFERENCES trips(id) ON DELETE CASCADE, places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, PRIMARY KEY (trips_id, places_id) );
65
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
/* Social networks */ CREATE TABLE social_networks ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE places_social_networks ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, social_networks_id BIGINT REFERENCES social_networks(id) ON DELETE RESTRICT, www varchar(255) NOT NULL, PRIMARY KEY (places_id, social_networks_id) ); /* Tags */ CREATE TABLE tags ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE places_tags ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, tags_id BIGINT REFERENCES tags(id) ON DELETE RESTRICT, PRIMARY KEY (places_id, tags_id) ); /* Access */ CREATE TABLE access ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL );
66
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
CREATE TABLE places_access ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, access_id BIGINT REFERENCES access(id) ON DELETE RESTRICT, PRIMARY KEY (places_id, access_id) ); /* Videos */ CREATE TABLE videos ( places_id BIGINT NOT NULL REFERENCES places(id) ON DELETE CASCADE, name VARCHAR(255) NOT NULL, description TEXT, source VARCHAR(255) NOT NULL ); CREATE TABLE places_videos ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, videos_id BIGINT REFERENCES videos(id) ON DELETE RESTRICT, PRIMARY KEY (places_id, videos_id) ); /* Images */ CREATE TABLE images ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, source BYTEA NOT NULL ); CREATE TABLE places_images ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE,
67
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
images_id BIGINT REFERENCES images(id) ON DELETE RESTRICT, PRIMARY KEY (places_id, images_id) ); /* Regions */ CREATE TABLE regions ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, borders VARCHAR(255)[4] ); CREATE TABLE places_regions ( places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, regions_id BIGINT REFERENCES regions(id) ON DELETE RESTRICT, PRIMARY KEY (places_id, regions_id) ); /* Reports */ CREATE TABLE report_type ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE reported_places ( places_id BIGINT NOT NULL REFERENCES places(id) ON DELETE CASCADE, comment TEXT, created TIMESTAMP NOT NULL DEFAULT current_timestamp, reported_type_id BIGINT REFERENCES report_type(id) ON DELETE RESTRICT, reported_by BIGINT );
68
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
/* Users */ CREATE TABLE users ( id BIGSERIAL PRIMARY KEY, -- because nette, i rename email to username email VARCHAR(255) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, created TIMESTAMP NOT NULL DEFAULT current_timestamp, modified TIMESTAMP NOT NULL, firstname VARCHAR(255), lastname VARCHAR(255), description VARCHAR(255), www VARCHAR(255), phone_number VARCHAR(255), address_street VARCHAR(255), address_city VARCHAR(255), address_postcode VARCHAR(255), image BYTEA ); /* ACL & Roles */ CREATE TABLE privileges ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE resources ( id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE roles (
69
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
id BIGSERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL ); CREATE TABLE resources_privileges ( id BIGSERIAL PRIMARY KEY, resources_id BIGINT REFERENCES resources(id) ON DELETE CASCADE, privileges_id BIGINT REFERENCES privileges(id) ON DELETE CASCADE ); CREATE TABLE roles_resources_privileges ( roles_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
resources_privileges_id BIGINT NOT NULL REFERENCES resources_privileges(id) ON DE ); CREATE TABLE users_roles ( users_id BIGINT REFERENCES users(id) ON DELETE CASCADE, roles_id BIGINT REFERENCES roles(id) ON DELETE RESTRICT, PRIMARY KEY (users_id, roles_id) );
/* Users places */ CREATE TABLE users_places ( users_id BIGINT REFERENCES users(id) ON DELETE CASCADE, places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, PRIMARY KEY (users_id, places_id) ); /* Users trips */
70
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
CREATE TABLE users_trips ( users_id BIGINT REFERENCES users(id) ON DELETE CASCADE, trips_id BIGINT REFERENCES trips(id) ON DELETE RESTRICT, PRIMARY KEY (users_id, trips_id) ); /* Places temp */ CREATE TABLE modified_temp ( id BIGSERIAL PRIMARY KEY , places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, modified_by BIGINT, modified_time TIMESTAMP NOT NULL DEFAULT current_timestamp, description TEXT ); CREATE TABLE places_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE, name VARCHAR(255), type BIGINT, geom GEOMETRY(Point, 900913), elevation INTEGER, description TEXT, content TEXT, opening_time VARCHAR(255)[7], position TEXT, owner_name VARCHAR(255), address_street VARCHAR(255), address_city VARCHAR(255), address_postcode VARCHAR(255), phone_number VARCHAR(255), email VARCHAR(255),
71
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
www VARCHAR(255), rating INTEGER DEFAULT 0, price INTEGER[2], condition TEXT, curiosity TEXT, isvalid BOOLEAN ); CREATE TABLE places_social_networks_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE, type BIGINT, www varchar(255) ); CREATE TABLE places_tags_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE, tags_id BIGINT ); CREATE TABLE places_access_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE, access_id BIGINT ); CREATE TABLE places_videos_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE, videos_id BIGINT ); CREATE TABLE places_images_temp ( id_modified BIGINT REFERENCES modified_temp(id) ON DELETE CASCADE,
72
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
images_id BIGINT ); /* Places history */ CREATE TABLE modified_history ( id BIGSERIAL PRIMARY KEY, places_id BIGINT REFERENCES places(id) ON DELETE CASCADE, modified_by BIGINT, modified_time TIMESTAMP NOT NULL DEFAULT current_timestamp, description TEXT, exist BOOLEAN DEFAULT TRUE ); CREATE TABLE places_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, name VARCHAR(255), type BIGINT, geom GEOMETRY(Point, 900913), elevation INTEGER, description TEXT, content TEXT, opening_time VARCHAR(255)[7], position TEXT, owner_name VARCHAR(255), address_street VARCHAR(255), address_city VARCHAR(255), address_postcode VARCHAR(255), phone_number VARCHAR(255), email VARCHAR(255), www VARCHAR(255), rating INTEGER DEFAULT 0,
73
ČVUT v Praze
C. SQL DÁVKA PRO VYTVOŘENÍ DATABÁZE
price INTEGER[2], condition TEXT, curiosity TEXT, isvalid BOOLEAN ); CREATE TABLE places_social_networks_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, type BIGINT, www varchar(255) ); CREATE TABLE places_tags_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, tags_id BIGINT ); CREATE TABLE places_access_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, access_id BIGINT ); CREATE TABLE places_videos_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, videos_id BIGINT ); CREATE TABLE places_images_history ( id_modified BIGINT REFERENCES modified_history(id) ON DELETE CASCADE, images_id BIGINT );
74
ČVUT v Praze
D
D. OBSAH PŘILOŽENÉHO CD
Obsah přiloženého CD
/database -- obsahuje sql dávky, návrh databáze a předpisy pro import osm souboru ......../sql -- obsahuje sql dávky ................/portal -- sql dávka pro vytvoření navrhované databáze ................/routing -- sql dávka pro vytvoření routovací databáze ......................../sql ........import_by_osm2pgrouting.sh ........import_by_osm2pgsql.sh ........_run.sh ......../styles -- styly pro import z osm /www -- Nette aplikace ......../app -- presentery, modely a latte šablony ......../lib -- vlastní framework ......../log ......../temp ......../tests ......../www -- css, js a index.php ......../... /bc_janspicka.pdf
75