ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZEFAKULTA STAVEBNÍ
BAKALÁŘSKÁ PRÁCE
PRAHA 2013 Pavel KLIMUNDA
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZEFAKULTA STAVEBNÍ
OBOR GEOINFORMATIKA
BAKALÁŘSKÁ PRÁCENÁVRH INFORMAČNÍHO SYSTÉMU URC JOSEF
Vedoucí práce: Ing. Michal Seidl, Ph.D.Katedra speciální geodézie
červen 2013 Pavel KLIMUNDA
ZDE VLOŽIT LIST ZADÁNÍ
Z důvodu správného číslování stránek
ABSTRAKT
Cílem bakalářské práce „Návrh informačního systému URC JOSEF“ je navrhnout zá-
klad informačního geoportálu pro regionální podzemní výzkumné centrum ČVUT URC
JOSEF (http://uef-josef.eu). Systém bude postaven na moderních technologiích, bude
maximálně uživatelsky přívětivý a snadno udržovatelný a rozšiřitelný. Tato práce obecně
popíše jednotlivé části systému.
KLÍČOVÁ SLOVA
GIS, AJAX, PHP, ExtJS, GeoExt, OpenLayers, Nette, PostGIS, PostgreSQL
ABSTRACT
The goal of this work "Design of information system for URC JOSEF" is to design
base of the information geoportal system for underground research center CTU URC
JOSEF (http://uef-josef.eu). The system will be built on modern technologies, it will be
user-friendly and easily maintainable and extensible. The aim of this thesis is to describe
general parts of the system.
KEYWORDS
GIS, AJAX, PHP, ExtJS, GeoExt, OpenLayers, Nette, PostGIS, PostgreSQL
PROHLÁŠENÍ
Prohlašuji, že bakalářskou práci na téma „Návrh informačního systému URC JO-
SEF“ jsem vypracoval samostatně. Použitou literaturu a podkladové materiály uvádím
v seznamu zdrojů.
V Praze dne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
(podpis autora)
PODĚKOVÁNÍ
Chtěl bych poděkovat Ing. Michalu Seidlovi Ph.D., vedoucímu práce, za připomínky
a pomoc při zpracování této práce. Dále bych chtěl poděkovat rodině a přátelům za
jejich dlouhodobou podporu v průběhu celého studia.
Obsah
Úvod 9
1 Požadavky na funkcionalitu 11
1.1 Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2 Majetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Senzory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.4 Výzkumné projekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5 Bodová pole a geodata . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Historie změn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.7 Aktualizace geodetický dat . . . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Vize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Návrh 16
2.1 Případy užití . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.1 Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.1.2 Majetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.1.3 Senzory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1.4 Výzkumné projekty . . . . . . . . . . . . . . . . . . . . . . . . 21
2.1.5 Bodová pole a geodata . . . . . . . . . . . . . . . . . . . . . . 22
2.2 Procesy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.2.1 Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.2.2 Majetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.2.3 Senzory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.2.4 Výzkumné projekty . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.5 Bodová pole a geodata . . . . . . . . . . . . . . . . . . . . . . 27
2.3 Databáze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.3.1 Objekty, doplňkové atributy a spojení . . . . . . . . . . . . . . 30
2.3.2 Správa uživatelů, rolí a oprávnění . . . . . . . . . . . . . . . . 32
2.3.3 Geodata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3.4 Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.4 Třídy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.1 Objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.2 Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.4.3 Mapy, vrstvy a geodata . . . . . . . . . . . . . . . . . . . . . . 36
2.4.4 Majetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.4.5 Senzory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.4.6 Projekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5 Rozhraní . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.5.1 Stavební prvky rozhraní aplikace . . . . . . . . . . . . . . . . 39
2.5.2 Základní rozložení grafických prvků . . . . . . . . . . . . . . . 40
3 Popis technologií 41
3.1 Apache2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2 PHP 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.4 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.1 Ukázka kódu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5 Nette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5.1 Aplikační logika . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5.2 Adresářová struktura . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Ext JS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.7 GeoExt 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.8 OpenLayers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.8.1 Ukázka kódu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4 Implementace 45
4.1 Databázová vrstva . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.1 Číselník: Typy zdrojů . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.2 Číselník: Definice zdrojů . . . . . . . . . . . . . . . . . . . . . 45
4.1.3 Číselník: Definice typů geoobjektů . . . . . . . . . . . . . . . . 46
4.1.4 Číselník: Definice možných spojení . . . . . . . . . . . . . . . 46
4.2 Převod DGN výkresu do databáze . . . . . . . . . . . . . . . . . . . . 46
4.2.1 Export dat pomocí OGR . . . . . . . . . . . . . . . . . . . . . 46
4.2.2 Import dat do databáze . . . . . . . . . . . . . . . . . . . . . 48
4.3 Implementace mapového rozhraní . . . . . . . . . . . . . . . . . . . . 49
4.3.1 Serverová část . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
4.3.2 Klientská aplikace . . . . . . . . . . . . . . . . . . . . . . . . . 50
Závěr 52
Použité zdroje 54
Seznam symbolů, veličin a zkratek 55
Seznam příloh 57
A Instalace aplikací 58
A.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.2 Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.2.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.3.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4.2 Konfigurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.4.3 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
B Tvorba SQL databáze 60
C Printscreen ukázkové aplikace 71
D Obsah přiloženého CD 72
ČVUT v Praze ÚVOD
Úvod
Podzemní laboratoř Josef byla jako externí pracoviště Stavební fakulty ČVUT ote-
vřena v roce 2007. Pracoviště se nachází v blízkosti Slapské přehrady poblíž obce
Čelina na Příbramsku. Laboratoř slouží jednak studentům ČVUT, kteří zde mají
jedinečnou možnost vyzkoušet si v praxi práci v podzemí a zároveň slouží jako vý-
zkumné zařízení, které spolupracuje s podnikatelskou sférou.[1]
Momentálně probíhá v dole Josef obnovování geodetických základů, na kterém
se podílí řada studentů. Geodetické práce prováděné studenty na dole Josef jsou
především velmi přesná nivelace, zaměřování inženýrských sítí, zaměření polohopisu
a laserové skenování. Výsledky těchto měření by měly být zpřístupněny širokému
spektru uživatelů, kteří je budou dále využívat. Hlavně z tohoto důvodu je potřeba
vybudovat geografický informační systém, který pojme a bude schopen zobrazit vel-
kou škálu dat, jako jsou například majetek, geodetické objekty a informace o projek-
tech, a zároveň umožní jejich editaci, nahlížení a dodatečné zpracování. Po krátkém
zkoumání bylo zjištěno, že na trhu neexistuje dostatečné open source online řešení,
které by splňovalo požadavky na takovýto systém, a tak bylo přistoupeno k vytvoření
návrhu vlastní aplikace pro důl Josef.
Jako stavební kameny informačního systému byly vybrány open source skripto-
vací programovací jazyk PHP1, respektive PHP framework Nette2 a databázovou
vrstvu zajišťuje objektově-relační databázový systém PostgreSQL3. Frontend budou
obstarávat jazyky HTML5 4, CSS3 5 a ExtJS 6, zobrazení geodetických dat pak JS
framework OpenLayers7.
Cílem práce je především zjistit, jaká funkcionalita bude pro chod informačního
systému nezbytná a dále provést návrh datové základny a ukázku implementace1http://php.net2http://nette.org/3http://www.postgresql.org/4http://www.w3.org/html/wg/drafts/html/master/5http://www.w3schools.com/css3/default.asp6http://www.sencha.com/products/extjs/7http://openlayers.org/
9
ČVUT v Praze ÚVOD
rozhraní geoportálu. Doufám, že tato práce bude přínosná a v budoucnu podle ní
bude vytvořena kvalitní aplikace, která bude dobře přijata uživateli.
10
ČVUT v Praze 1. POŽADAVKY NA FUNKCIONALITU
1 Požadavky na funkcionalitu
Tato kapitola bude zaměřena na sepsání základních požadavků na funkcionalitu
z pohledu zadavatele. Informační systém by měl ve své pokročilé podobě umožňovat
a podporovat pracovní procesy nejrůznějšího zaměření, které vznikají a probíhají
v rámci celého životního cyklu předmětného objektu – v našem případě střediska
URC JOSEF. Dále budou probrány jednotlivé procesy, které budou v práci podrobně
rozebrány, a vize, které by systém měl v budoucnu obsahovat a které v této práci
nejsou dále rozvinuty.
1.1 Uživatelé
Systém bude obsahovat dynamickou správu oprávnění, která se bude skládat z rolí,
které budou přidávány uživateli. Každá role bude mít přiřazen libovolný počet opráv-
nění. Oprávnění se bude skládat ze zdroje (typ objektu) a privilegií (typ akce). Sys-
tém bude schopen vytvářet nové role a oprávnění a uživatel bude moci přidávat
zdroje i privilegia.
∙ Každý uživatel bude mít roli, každá role bude mít práva na určité úkony v sys-
tému.
∙ Uživatel bude moci mít více rolí.
∙ Uživatel s patřičnými právy bude moci vytvářet nové uživatele.
∙ Povinné parametry uživatele
– login/email
– jméno
– příjmení
– heslo
∙ Nepovinné parametry uživatele
– telefon
11
ČVUT v Praze 1. POŽADAVKY NA FUNKCIONALITU
– adresa
– místnost
– pracovní pozice
1.2 Majetek
Systém musí obsahovat databázi inventárních čísel majetku, rozřazených do katego-
rií, včetně podkategorií. Majetek musí být polohově určen – buď místností, do které
patří nebo v případě dolu souřadnicemi. Bude obsažen systém výpůjček včetně mož-
ností zaslání upomínky a také možnost rušení a přidávání nového majetku. Dále bude
obsahovat rozhraní pro hlášení poruch a závad.
∙ Databáze inventárních čísel majetku včetně tvorby a mazání.
∙ Majetek řazen do kategorií a podkategorií.
∙ Možnost tisku formulářů pro potřeby inventarizace.
∙ Hlášení závad a poruch.
∙ Systém výpůjček včetně řešení upomínek.
∙ Povinné parametry inventáře majetku
– inventární číslo
– název
– kategorie
∙ Nepovinné parametry inventáře majetku
– popis
12
ČVUT v Praze 1. POŽADAVKY NA FUNKCIONALITU
1.3 Senzory
Systém bude umět sledovat stav zařízení objektu, načítat data z čidel pomocí za-
bezpečeného API a bude napojen na místní IP kamery.
∙ Databáze infrastruktury.
∙ API pro aktualizaci dat z čidel.
1.4 Výzkumné projekty
Řešitelé výzkumných projektů budou moci vytvořit profil projektu – ať veřejně
přístupný či neveřejný pouze pro komunikaci v týmu. Projekty budou mít své pod-
stránky, na kterých se bude zobrazovat jejich stav, popisné informace a další dopro-
vodné informace jako jsou videa, fotografie a jiné dokumenty.
∙ Databáze projektů.
∙ Přiřazování řešitelů projektů.
∙ Možnost skrytí/zobrazení projektu ostatním uživatelům, včetně možnosti mít
skryté části projektu.
∙ Povinné parametry projektu
– název
– řešitelé
1.5 Bodová pole a geodata
Základní součástí bude správa bodového pole včetně jeho změn v čase, správa polo-
hopisu, výškopisu a mapy areálu a dolu.
∙ Systém bude obsahovat interaktivní mapu areálu včetně mapy dolu
13
ČVUT v Praze 1. POŽADAVKY NA FUNKCIONALITU
∙ Měřené objekty:
– BOD_P: stanoviska
– HRANICE: plot
– POZ_DR: značky – les, neplodná půda
– STAV_OBJ: budovy, buňky
– KOMUN: asfaltová komunikace, cesty, chodníky
– ING_S: šachty, hydranty, vod. šoupata, el. transformátor, el. rozdělovací
skříň, světla, vodní potrubí, hasicí přístroje, vzduchotechnika
– TEZBA: ústí štoly
– VODSTVO: jezírko
– OSTATNI: malé vystavené exponáty
1.6 Historie změn
Systém bude udržovat kompletní historii objektů na úrovni databáze, a to takovým
způsobem, který umožní vrátit se u objektu do jakéhokoliv místa v čase, popřípadě
zobrazit kompletní historii změn jednoho objektu.
1.7 Aktualizace geodetický dat
Systém umožní uživateli poloautomatickým způsobem aktualizovat geodetická data
tak, aby nedošlo ke ztrátě dat a zároveň aby bylo možné uchovat kompletní historii.
1.8 Vize
V budoucnu by měl být systém snadno rozšiřitelný. Měl by být napsán pokud možno
co nejmodulárněji a jeho datová základna by měla být co nejobecněji definovaná.
Mezi další vlastnosti, které by měl systém v budoucnu obsahovat, patří například
správa a řízení rizik. Dále pak systém pro řízení projektů. V budoucnu by měl systém
14
ČVUT v Praze 1. POŽADAVKY NA FUNKCIONALITU
umožnit aktualizaci dat co nejjednodušším způsobem - například nahráním výkresu
v DXF nebo DGN.
Velkým lákadlem poslední doby je zobrazení 3D dat v prohlížeči. Bohužel v této
době nejsou open source technologie natolik vyspělé, aby bylo možné vytvořit systém
zobrazující 3D souřadnice. V současnosti je možné 3D souřadnice uchovávat v data-
bázi a jakmile se na trhu objeví použitelná open source 3D technologie, bude stačit
pouze upravit aplikační vrstvu. Další velkou neznámou je práce s daty z laserového
skenování. V budoucnu by bylo dobré zaměřit se na jejich reprezentaci v databázi
a zkoumat možnosti jejich využití v automatických dotazech.
Systém by měl také umět exporty map do různých formátů jako je například
pdf nebo shp. Mělo by být možné vybrat konkrétní vrstvy mapy, nastavit barvy
jednotlivých vrstev a umět pracovat s legendou. Měly by být předpřipraveny profily
pro určité typy důlních map jako je základní důlní mapa a provozní mapa.
15
ČVUT v Praze 2. NÁVRH
2 Návrh
Kvalitní návrh je dnes u softwarových projektů jednou z nejdůležitějších částí. Pro
návrh systému je využito několik typů diagramů, které nám pomohou namodelovat
systém tak, aby se doladily požadavky se zadavatelem a zároveň se mohla účinně
delegovat práce na jednotlivých částech systému mezi vývojáři. V našem případě šlo
především o to dobře si rozmyslet datovou základnu.
2.1 Případy užití
V této části rozeberu případy užití neboli use case, které definují interakci mezi rolí,
potažmo uživatelem, a systémem. Use case diagramy se skládají z obrázku inter-
akce role a systému a slovního popisu jednotlivých kroků. Z use case diagramu poté
vychází diagram procesů, který nám přiblíží danou problematiku spíše z pohledu
systému než uživatele. Následuje ukázka základních use case diagramů využitých při
návrhu projektu.
2.1.1 Uživatelé
Vytvoření uživatele
Oprávnění uživatelé budou moci vytvářet nové uživatele.
Obr. 2.1: Use case: Vytvoření uživatele (Uživatelé)
16
ČVUT v Praze 2. NÁVRH
1.1 Přihlášení
Vstupní podmínka: Registrovaný uživatel
1. U Zadá přihlašovací údaje
2. IS Kontrola přihlašovacích údajů
3. IS Povolení vstupu do IS
1.2 Vytvoření uživatele
1. U Zadá parametry nového uživatele
2. IS Zkontroluje validitu údajů
3. IS Přidá uživatele do systému
Přidání role
Oprávněný uživatel bude moci vytvářet podle potřeby nové role, kterým budou
pomocí parametrů nastavena systémová oprávnění. Následně bude moci být uživateli
přiřazeno x rolí, jejichž oprávnění se budou sčítat.
Obr. 2.2: Use case: Přidání role (Uživatelé)
1.3 Vytvoření role
1. U Zadá parametry nové role
2. IS Zkontroluje validitu údajů
3. IS Přidá roli do systému
17
ČVUT v Praze 2. NÁVRH
1.4 Přidání role
Vstupní podmínka: Vytvoření role
1. U Vybere uživatele
2. U Vybere roli
3. IS Přiřadí roli uživateli
4. U, IS Opakování 2. a 3. dokud nemá uživatel všechny potřebné role
2.1.2 Majetek
Vytvoření objektu
Oprávněný uživatel bude moci do systému vkládat a následně editovat nové objekty,
u kterých bude možno evidovat jejich výpůjčky.
Obr. 2.3: Use case: Vytvoření objektu (Majetek)
2.1 Vytvoření kategorie
1. U Zadá parametry nové kategorie majetku
2. IS Zkontroluje validitu údajů
3. IS Přidá kategorii do systému
2.2 Vytvoření objektu
Vstupní podmínka: Vytvoření kategorie
1. U Zadá parametry nového objektu
2. U Vybere kategorii
3. IS Vytvoří nový objekt
18
ČVUT v Praze 2. NÁVRH
Registrace výpůjčky
Každý objekt pak bude mít kompletní historii výpůjček.
Obr. 2.4: Use case: Registrace výpůjčky (Majetek)
2.3 Vyhledání objektu
Vstupní podmínka: Vytvoření objektu
1. U Zadá parametry hledaného objektu
2. IS Vrátí hledaný objekt, pokud takový existuje
2.4 Registrace výpůjčky
Vstupní podmínka: Vyhledání objektu
1. U Zadá informace o výpůjčce
2. IS Zaeviduje výpůjčku
2.1.3 Senzory
Aktualizace dat
Oprávnění uživatelé budou moci přidat senzor, který bude mít možnost pomocí chrá-
něného API aktualizovat sbíraná data v systému (např. teploty, vlhkost). Samotnou
aktualizaci tedy bude provádět přímo senzor, který bude obsahovat řídicí jednotku
schopnou vytvořit GET požadavek na HTTP server – např. pomocí malého BASH
skriptu v CRONu.
19
ČVUT v Praze 2. NÁVRH
Obr. 2.5: Use case: Aktualizace dat (Infrastruktura)
3.1 Vytvoření čidla
1. U Zadá parametry čidla
2. IS Vytvoří čidlo
3. IS Vygeneruje privátní klíč pro šifrování přenosu
3.2 Ověření1. U Zašle požadavek s šifrovanou zprávou
2. IS Ověří požadavek
3.3 Aktualizace dat
Vstupní podmínka: Vytvoření čidla
1. U Zašle požadavek na aktualizaci dat
2. IS Uloží data
20
ČVUT v Praze 2. NÁVRH
2.1.4 Výzkumné projekty
Přidání uživatele
Uživatel bude moci vytvořit nový projekt a následně mu přidat další uživatele jako
správce.
Obr. 2.6: Use case: Přidání uživatele (Projekty)
4.1 Vytvoření projektu
1. U Zadá parametry nového projektu
2. IS Uloží projekt
4.2 Ověření1. U Zadá dotaz na práva k projektu
2. IS Rozhodne jestli je uživatel oprávněn
4.3 Přidání uživatele1. U Vybere uživatele
2. IS Přidá uživatele do projetku
21
ČVUT v Praze 2. NÁVRH
2.1.5 Bodová pole a geodata
Vyhledání bodu
Uživatel vytvoří nový bod, který bude následně moci vyhledat.
Obr. 2.7: Use case: Vyhledání bodu (Bodová pole a geodata)
5.1 Vytvoření bodu
1. U Zadá parametry nového bodu
2. IS Uloží bod
4.2 Vyhledání bodu
Vstupní podmínka: Vytvoření bodu
1. U Zadá dotaz na vyhledání bodu
2. IS Vrátí nalezený bod
2.2 Procesy
Pomocí vývojových diagramů postupně navrhujeme jednotlivé části aplikační logiky
po jednotlivých krocích. Vývojový diagram obsahuje několik základních stavebních
kamenů, které budeme využívat. Jedná se především o:
∙ Vstupní a koncový bod.
∙ Šipky ukazující tok algoritmu.
∙ Dílčí kroky zobrazené pomocí oválů.
∙ Rozcestníky určující možnosti, kterými se algoritmus může vydat.
22
ČVUT v Praze 2. NÁVRH
2.2.1 Uživatelé
Vytvoření uživatele a přidání role
Následující diagram procesu zobrazuje průběh procesu vytvoření uživatele a přidání
rolí.
Obr. 2.8: Proces: Vytvoření uživatele a přidání role (Uživatelé)
23
ČVUT v Praze 2. NÁVRH
Vytvoření role a přidání oprávnění
V tomto diagramu je zobrazen proces vytvoření role a přidání jednotlivých opráv-
nění, kdy role může mít libovolný počet oprávnění.
Obr. 2.9: Proces: Vytvoření role a přidání oprávnění (Uživatelé)
24
ČVUT v Praze 2. NÁVRH
Přiřazení zdrojů/privilegií oprávněním
Proces zobrazující přiřazení zdrojů a privilegií jednotlivým oprávněním.
Obr. 2.10: Proces: Přiřazení zdrojů/privilegií oprávněním (Uživatelé)
2.2.2 Majetek
Registrace výpůjčky
Diagram zobrazující proces registrace výpůjčky. Výpůjčka musí být navázána na
existující objekt a pokud objekt neexistuje, bude možné jej vytvořit. Výpůjčce může
být přiřazen uživatel systému. Pokud však dotyčná osoba v systému není, uloží se
jednorázově její jméno a kontakt.
25
ČVUT v Praze 2. NÁVRH
Obr. 2.11: Proces: Registrace výpůjčky (Majetek)
2.2.3 Senzory
Aktualizace dat
Samotná aktualizace dat z čidel bude jednoduchá a bude se skládat pouze z ověření
klíče a samotné aktualizace pomocí daného API.
Obr. 2.12: Proces: Aktualizace dat (Senzory)
26
ČVUT v Praze 2. NÁVRH
2.2.4 Výzkumné projekty
Vytvoření a editace projektu
Uživatel vyhledá projekt v databázi. Pokud projekt v databázi není, může vytvořit
projekt nový. Vytvořenému projektu následně přiřadí řešící uživatele.
Obr. 2.13: Proces: Vytvoření a editace projektu (Výzkumné projekty)
2.2.5 Bodová pole a geodata
Editace bodů
Uživatel bude editovat a vytvářet jednotlivé body bodového pole.
27
ČVUT v Praze 2. NÁVRH
Obr. 2.14: Proces: Editace bodů (Bodová pole a geodata)
Zobrazení mapy
Uživatel bude moci zobrazit mapu dolu či mapu areálu a přepínat v ní vrstvy.
Obr. 2.15: Proces: Zobrazení mapy (Bodová pole a geodata)
Správa map a vrstev
Oprávněný živatel bude moct vytvořit jakoukoliv novou mapu a přidat do ní li-
bovolný počet vrstev. Každá vrstva může obsahovat libovolný počet geoobjektů
různých typů.
28
ČVUT v Praze 2. NÁVRH
Obr. 2.16: Proces: Správa map a vrstev (Bodová pole a geodata)
Aktualizace geodetických dat
Oprávněný uživatel načte soubor s geometriemi aktualizovaných dat, vyhledá nebo
vytvoří vrstvu, do které geodata patří a zobrazí si mapu s novými a starými daty.
Pokud se bude jednat o nový objekt, vytvoří nový objekt. Pokud se bude jednat
o aktualizaci již existujícího objektu, tak tyto dva objekty vybere a provede jejich
aktualizaci.
29
ČVUT v Praze 2. NÁVRH
Obr. 2.17: Proces: Aktualizace geodetických dat (Bodová pole a geodata)
2.3 Databáze
Databáze je navrhována po jednotlivých blocích pomocí UML diagramu.
2.3.1 Objekty, doplňkové atributy a spojení
Všechny objekty ukládané do databáze budou vycházet ze společného objektu ulo-
ženého v tabulce objects, který obsahuje tyto základní parametry:
∙ name – název objektu
∙ description – popis objektu
30
ČVUT v Praze 2. NÁVRH
∙ resources_id – id typu objektu
Atributy objektu jsou uloženy v tabulce attributes a mohou obsahovat jeden
z předem definovaných datových typů: bool, int, double, varchar nebo text. Uživate-
lem definovaná spojení jsou pak v tabulce objects_joins, která obsahuje informace
o tom, které dva datové typy se mají spojit. Takto navržený databázový model v bu-
doucnu umožní přidat jakýkoliv datový typ s téměř jakýmikoliv parametry a bude
jej možno logicky spojit s jiným objektem. Pro každý zdroj je pak definován seznam
základních parametrů v tabulce default_attributes.
Obr. 2.18: Databáze: Objekty
31
ČVUT v Praze 2. NÁVRH
2.3.2 Správa uživatelů, rolí a oprávnění
Uživatelé jsou vedeni v tabulce users a mají základní parametry potřebné k jejich
identifikaci. Především:
∙ login – přihlašovací jméno/email
∙ firstname – jméno
∙ lastname – příjmení
∙ psswd – heslo
∙ phone – telefon
∙ position – pracovní pozice
Každý uživatel může mít přiřazeno několik rolí. Každá role obsahuje libovolný
počet oprávnění (tabulka permissions). Role může být navázána buď na konkrétní
objekt, pomocí cizího klíče objects_id, nebo při jeho nevyplnění být obecná na
všechny typy daného typu objektu. Stejně tak může být role navázána pouze na
jednoho uživatele pomocí atributu users_id ve spojové tabulce roles_permissions.
Základ oprávnění tvoří dvě tabulky:
∙ resources – tabulka zdrojů, tedy obecně názvů skupin objektů (např. geodata,
název presenteru)
∙ privileges – tabulka povolených akcí (vytvořit, smazat, editovat)
Pro možnost rozeznání, zdali se jedná o objekt databáze nebo objekt na úrovni
php, je nutná tabulka resources_types, která říká obecný typ daného zdroje.
32
ČVUT v Praze 2. NÁVRH
Obr. 2.19: Databáze: Správa uživatelů a rolí
2.3.3 Geodata
Geodetická data jsou ukládána ve třech datových typech:
∙ points – body
∙ linestrings – linie
∙ polygons – polygony
Databáze je navržena tak, aby jednotlivé geodetické prvky měly společný identifiká-
tor, což nám zajišťují společné tabulky objects, kde jsou uloženy základní informace
o prvcích a resources s jejich typem. Samotné geometrie budou uloženy ve třech ve-
dlejších tabulkách. Každý geometrický prvek pak může být přiřazen do libovolného
33
ČVUT v Praze 2. NÁVRH
počtu vrstev, které by měly znázorňovat typ objektu a jeho vztah k ostatním prv-
kům. Jednotlivé vrstvy jsou pak spojeny s tabulkou map. I zde platí, že jednotlivé
mapy můžou obsahovat více vrstev a vrstva může být obsažena v několika mapách
zároveň.
Obr. 2.20: Databáze: Geodata
2.3.4 Historie
Historie databáze bude řešena pomocí tabulek, které budou stejné jako tabulky
s normálními platnými daty, avšak budou u nich vypnuté cizí i primární klíče a bu-
dou mít suffix „_history“ . Do takto upravených tabulek se budou pomocí triggerů
při každé update/delete akci nad hlavními tabulkami ukládat změny oproti původ-
ním datům. Celý proces funguje tak, že trigger přesune upravovaná data z původní
tabulky do tabulky historie a nahradí původní data v hlavní tabulce novými. Tímto
způsobem máme kompletní přehled o všech změnách ve všech tabulkách kompletně
v režii databáze a nemusí se to tedy řešit na úrovni aplikace. Při zrušení objektu
dojde k přesunu původních dat do history tabulky a následnému vymazání dat
z hlavní tabulky. Kvůli této akci není možné mít na tabulce „_history“ žádný cizí
klíč, protože by v tomto případě neměl kam ukazovat.
34
ČVUT v Praze 2. NÁVRH
2.4 Třídy
2.4.1 Objekty
Abstraktní třída Object obsahuje parametry a metody společné pro všechny objekty.
Nemá však vlastní instanci.
Obr. 2.21: Třídy: Object
2.4.2 Uživatelé
Třída User uchovává jednotlivé informace a metody potřebné pro správu uživatelů.
Každý uživatel je definován pomocí svého id a unikátního přihlašovacího jména
(login). Uživatelé jsou pak rozřazeni do různých rolí (třída Role), které obsahují
oprávnění (třída Permission).
35
ČVUT v Praze 2. NÁVRH
Obr. 2.22: Třídy: Uživatelé
2.4.3 Mapy, vrstvy a geodata
Geodetická data jsou reprezentována třídou Geodata, která dědí od třídy Object
a její rozšiřující parametry jsou typ geometrie a samotná geometrie. Geodata jsou
sjednocena do vrstev. V každé vrstvě může být libovolný počet geodetických objektů
a zároveň může mít každý geodetický objekt několik vrstev. Stejné pravidlo platí pro
mapu, která je dána třídou Map a která sdružuje jednotlivé vrstvy.
36
ČVUT v Praze 2. NÁVRH
Obr. 2.23: Třídy: Mapy, vrstvy, geodata
2.4.4 Majetek
Inventář majetku je řešen pomocí třídy Inventory, která rozšiřuje obecnou třídu
Objects a obsahuje odkaz na místnost (třída Room) či jakýkoliv geodetický objekt
(třída Geodata), a je zařazen právě do jedné kategorie (třída InventoryCategory).
Výpůjčky eviduje třída Borrowing, kde je možné přiřadit výpůjčce uživatele systému
nebo vyplnit jméno, telefon a adresu uživatele, který v systému není a není ani
potřeba, aby do něj měl přístup. Výpůjčky se nemažou - pouze se při vrácení nastaví
parametr returned na čas navrácení.
37
ČVUT v Praze 2. NÁVRH
Obr. 2.24: Třídy: Majetek
2.4.5 Senzory
Každý senzor využívající API bude reprezentován třídou Infrastructure a bude na
sebe mít navázána libovolná měření (třída Measurement). Každé měření bude mít
jako atribut svou hodnotu a jednotky, ve kterých je prováděno.
Obr. 2.25: Třídy: Senzory
2.4.6 Projekty
Projekt je definován třídou Project a je vlastněn jedním nebo více uživateli. Může
mít krátký popis nebo libovolný počet podstránek uchovávaných ve třídě Page.
38
ČVUT v Praze 2. NÁVRH
K projektu mohou být připojena jakákoliv binární data a může k němu být přiřazeno
libovolné množství čidel ze třídy Infrastructure.
Obr. 2.26: Třídy: Projekty
2.5 Rozhraní
Rozhraní IS je řešeno pomocí javascript frameworku ExtJS, který obsahuje pokročilé
nástroje pro tvorbu grafických prvků aplikace. Základ naší aplikace tvoří Viewport,
který již obsahuje jednotlivé kontejnery, které se dále budou plnit jednotlivými po-
hledy.
2.5.1 Stavební prvky rozhraní aplikace
Kontejner
Kontejner je základní stavební kámen rozhraní aplikace. Jedná se o prvek, do kterého
přidáváme všechny pohledy obsahující data aplikace jako například formuláře, ta-
bulky a grafy. Výhoda použití kontejnerů tkví v tom, že máme pevně dáno základní
rozhraní aplikace, které je neměnné a do kterého podle potřeby vkládáme pohledy
a odebíráme je z něj.
39
ČVUT v Praze 2. NÁVRH
Viewport
Viewport je základní kontejner, jehož hlavní předností je automatická změna veli-
kosti aplikace podle okna, ve kterém je aplikace spuštěna. Běžný uživatel tak nepozná
rozdíl mezi desktopovou a webovou aplikací.
Layout
Layout, neboli rozložení, nám udává, kde který prvek bude obsažen. V ExtJS se
nastavují layouty a pozice v nich každému prvku.
Panel
Panel je nejpoužívanější komponenta, která již obsahuje přímo námi požadované
prvky jako jsou například grid (tabulka), chart (graf), form (formulář) nebo třeba
jen html obsah. Panel se využívá pro tvorbu základních pohledů, které se poté
pomocí controlleru jednoduše přepínají a tím zobrazují uživateli obsah.
2.5.2 Základní rozložení grafických prvků
Byl zvolen dvousloupcový design s horním panelem, který slouží především jako
hlavní menu – topContainer. Levý sloupec neboli leftContainer bude obsahovat jed-
notlivá podmenu. Hlavní obsah bude obsažen v okně mainContainer.
Viewport
topContainer
leftContainer mainContainer
Obr. 2.27: Wireframe
40
ČVUT v Praze 3. POPIS TECHNOLOGIÍ
3 Popis technologií
Tato kapitola je věnována stručnému popisu technologií, které jsou potřeba ke zdár-
nému dokončení projektu. Mnohé z nich jsou v této práci použity jen okrajově,
ovšem pro finální aplikaci jsou nepostradatelné.
3.1 Apache2
Apache2 je open-source HTTP server pro operační systémy UNIXového typu. Jedná
se o bezpečný, výkonný a rozšiřitelný server pro HTTP služby. Jeho vývoj započal
v roce 1993 v americkém NCSA (National Center for Supercomputing Applications)
pod názvem NCSA HTTPd. Poté, co v roce 1994 z projektu odešel hlavní vývojář,
se vývoj výrazně zpomalil a vedlo to až k vytvoření skupiny Apache Group a k po-
kračování vývoje pod jménem Apache. Apache je vydáván pod svou vlastní licencí,
kterou spravuje ASF (Apache Software Foundation).[2]
3.2 PHP 5
PHP je skriptovací jazyk syntakticky vycházející z jazyků C, Java a Perl doplněný
o vlastní funkce. Jeho hlavním účelem je dovolit vývojářům rychle vytvářet dyna-
mické webové stránky. PHP 5 je plně objektový jazyk, který obsahuje mnoho rozší-
ření. PHP vzniklo v roce 1995 a dnes je spravováno skupinou The PHP Group.[3]
3.3 PostgreSQL
PostgreSQL je svobodná objektově-relační databáze vyvíjená již déle než 15 let.
PostgreSQL je možné provozovat na všech hlavních operačních systémech. Postgre-
SQL si zakládá na dodržování standardů – jeho SQL implementace vychází přede-
vším ze standardu ANSI-SQL:2008. Pro správu databází založených na PostgreSQL
se nejčastěji využívá nástroj pgAdmin3.[4]
41
ČVUT v Praze 3. POPIS TECHNOLOGIÍ
3.4 PostGIS
PostGIS je knihovna přidávající podporu geografických objektů do PostgreSQL da-
tabáze. Řídí se OpenGis specifikací "Simple Features Specification for SQL", kon-
krétně je kompatibilní s profilem "Types and Functions". Obsahuje jak definici zá-
kladních geografických prvků, jakými jsou například linie – line, lomená čára – line-
string, polygon, tak funkce pro práci s nimi. PostGIS je svobodný software vydáván
pod GNU General Public License.[5]
3.4.1 Ukázka kódu
CREATE TABLE points (geom GEOMETRY(PointZ, <epsg>));
INSERT INTO points (geom) VALUES ST_GeomFromText(Point(x, y, z));
SELECT ST_AsText(geom) from points;
3.5 Nette
Nette je moderní český open source PHP framework. Je založen na modelu MVP
(Model – View – Presenter), je plně objektový a obsahuje pokročilý šablonovací
systém Latte a databázovou vrstvu. Jednou z jeho předností a zároveň i nevýhodou
je opravdu rychlý vývoj a velmi brzká implementace novinek z posledních verzí
jazyka PHP.[6]
3.5.1 Aplikační logika
Aplikace v nette je rozdělena do třech základních stavebních kamenů. Prvním z nich
je model, který představuje datovou vrstvu. O aplikační logiku se stará presenter,
který načítá data z modelu, zpracovává je a výsledky posílá do pohledu – view.
42
ČVUT v Praze 3. POPIS TECHNOLOGIÍ
3.5.2 Adresářová struktura
∙ app (components, config, model, presenters, templates)
∙ libs (Nette)
∙ log
∙ temp (cache, sessions)
∙ tests
∙ www (css, images, js)
3.6 Ext JS
Sencha Ext JS je Javascriptový framework určený pro tvorbu bohatých webových
aplikací. Je postaven na MVC (Model – View – Controller) architektuře. Je vydáván
pod dvojitou licencí – pod GPL licencí pro použití v opensource, a pod placenou
licencí pro použití ve firmách. I přesto, že se jedná o Javascriptový framework, jeho
stavba je velmi podobná dříve zmíněnému Nette s jediným rozdílem, že Nette pre-
senter je zde nahrazen Controllerem. Ext JS je postaveno na myšlence komponent,
které se postupně zanořují do sebe. Uživatel je tak zcela odstíněn od nízkolevelo-
vého programování webových aplikací v HTML a CSS a jeho práce se tak daleko
více podobá konfiguraci jednotlivých komponent, které plní daty nejčastěji pomocí
datové struktury JSON (JavaScript Object Notation).[7]
3.7 GeoExt 2
GeoExt je Javascriptová knihovna, umožňující skloubit OpenLayers a Ext JS. Pů-
vodní GeoExt 1 byl postavený na knihovně Ext JS 3, která je však natolik odlišná
od nově vydané Ext JS 4, nad kterou je postaven tento projekt, že bylo nutné Ge-
oExt přepsat. Výsledkem je GeoExt 2, nyní ve verzi beta, který plně nahrazuje
funkcionalitu původního GeoExt.[8]
43
ČVUT v Praze 3. POPIS TECHNOLOGIÍ
3.8 OpenLayers
OpenLayers jsou open source javascriptovou knihovnou pro zobrazování geodetic-
kých dat. Podporuje různé technologie od WMS přes WFS servery po načítání
vlastních vrstev pomocí GEOJSONu.[9]
3.8.1 Ukázka kódu
new OpenLayers.Layer.WMS(
"CUZK",
"http://geoportal.cuzk.cz/WMS_ORTOFOTO_PUB/WMService.aspx",
{layers: ’GR_ORTFOTORGB’},
{singleTile: true}
);
44
ČVUT v Praze 4. IMPLEMENTACE
4 Implementace
V rámci této práce byla vytvořena databáze podle předešlého návrhu, byla naplněna
testovacími daty definujícími mapu, vrstvu a geodetický objekt znázorňující počvu
dolu. S pomocí Ext JS, GeoExt a OpenLayers byla vytvořena ukázková mapová apli-
kace, která načítá data s pomocí Nette aplikace. Aplikace má navrhované rozložení
prvků, kromě mapového okna však nemá zprovozněny žádné ovládací prvky.
4.1 Databázová vrstva
SQL dávka vytvářející databázi je přiložena elektronicky a také ji lze nalézt v příloze
A. Pro účely testování správnosti návrhu byly naplněny číselníky definující objekty
a spojení objektů v databázi.
4.1.1 Číselník: Typy zdrojů
Tabulka resources_types
id type
1 object
2 acl
4.1.2 Číselník: Definice zdrojů
Tabulka resources
id resource description resources_types_id
1 presenters Název presenteru... 2
2 geodata Obecná geodetická... 1
3 layers Vrstvy 1
4 maps Mapy 1
45
ČVUT v Praze 4. IMPLEMENTACE
4.1.3 Číselník: Definice typů geoobjektů
Tabulka geotypes
id geotype
1 Point
2 Linestring
3 Polygon
4.1.4 Číselník: Definice možných spojení
Tabulka joins_types
id type a_resources_id b_resources_id
1 layers_geodata 3 2
2 maps_layers 4 2
4.2 Převod DGN výkresu do databáze
Zdrojová důlní mapa byla vytvořena v programu Bentley Microstation, ze kterého
však neexistuje jednoduchý způsob převodu. Pro převod byla zvolena knihovna
OGR, která je součástí GDAL (Geospatial Data Abstraction Library) knihovny
a představuje relativně snadný způsob průchodu různých typů vektorových dat –
v našem případě výkresu ve formátu DGN.[10]
4.2.1 Export dat pomocí OGR
Pro účely ukázky práce s vrstvou byla vybrána vrstva počvy dolu. Jedná se o vrstvu
složenou ze sousedících polygonů, zobrazujících spodní hranu chodby dolu. V pro-
gramu Microstation bylo zjištěno číslo této vrstvy a poté byl na mapu uloženou
v DGN spuštěn následující příkaz, který načte všechny prvky – elements a uloží je
do formátu SHP.
ogr2ogr dulni_mapa.shp -sql "SELECT * FROM elements \
WHERE level=16" dulni_mapa_v7.dgn
46
ČVUT v Praze 4. IMPLEMENTACE
Dalším krokem je export obsahu SHP souboru do SQL dávky. Parametr „-t 3DZ“
definuje použití 3D souřadnic, parametr „-s 10267“ číslo EPSG, parametr „-w“ defi-
nuje výstup ve formátu WKT a parametr „-S“ definuje použití pouze jednoduchých
geometrií namísto multi geometrií.
shp2pgsql -t 3DZ -S -w -s 102067 dulni_mapa.shp \
> dulni_mapa_pocva_wkt.sql
Následující příklad nebyl použit, pouze demonstruje uložení SQL dávky s geo-
metriemi ve formátu WKB.
shp2pgsql -t 3DZ -S -s 102067 dulni_mapa.shp \
> dulni_mapa_pocva_wkb.sql
Syntaxe výsledného souboru
Výsledná SQL dávka obsahuje na jednotlivých řádcích INSERT příkazy obsahující
jednotlivé geodetické prvky dané vrstvy.
INSERT INTO "dulni_mapa"
("type","level","graphicgro","colorindex","weight", \
"style","entitynum","mslink","text",geom) VALUES \
(’6’,’16’,’0’,’0’,’0’,’0’,NULL,NULL,NULL, \
’SRID=102067;POLYGON((-753524.443 -1081449.153 286.238, \
-753521.678 -1081448.507 286.191, \
-753523.13 -1081461.562 286.244, \
-753524.104 -1081471.028 286.281, \
-753524.509 -1081483.784 286.48, \
-753526.771 -1081483.837 286.484, \
-753526.044 -1081470.877 286.313, \
-753525.19 -1081461.332 286.277, \
-753524.443 -1081449.153 286.238)) \
’);
47
ČVUT v Praze 4. IMPLEMENTACE
4.2.2 Import dat do databáze
Pomocí textového editoru byla výsledná dávka upravena pro import do naší data-
báze. Byly vytvořeny záznamy pro novou vrstvu Počva a geoobjetky jednotlivých
polygonů, které jsou s ní svázané.
Vytvoření vrstvy Počva
INSERT INTO josef.objects \
(id, name, description, resources_id, created_users_id)
VALUES \
(’6’, ’Počva’, ’Počva dolu’, ’3’, ’1’);
Spojení Počvy s Mapou
INSERT INTO josef.objects_join \
(a_objects_id, b_objects_id, joins_types_id) \
VALUES (1, 6, 2);
Objekty vrstvy Počva
INSERT INTO josef.objects \
(id, name, description, resources_id, created_users_id)
VALUES (’7’, ’Počva-1’, ’Část počvy’, ’2’, ’1’);
Nastavení geotypu objektu
INSERT INTO josef.geotypes_objects (objects_id, geotypes_id) \
VALUES (’7’,’3’);
Přidání geometrie
INSERT INTO josef.polygons (objects_id, geom) \
VALUES (7, \
ST_GeomFromText(’ \
POLYGON((-753524.443 -1081449.153 286.238, \
48
ČVUT v Praze 4. IMPLEMENTACE
-753521.678 -1081448.507 286.191, \
-753523.13 -1081461.562 286.244, \
-753524.104 -1081471.028 286.281, \
-753524.509 -1081483.784 286.48, \
-753526.771 -1081483.837 286.484, \
-753526.044 -1081470.877 286.313, \
-753525.19 -1081461.332 286.277, \
-753524.443 -1081449.153 286.238) \
)’, \
5514));
Spojení objektu Počvy s vrstvou
INSERT INTO josef.objects_join \
(a_objects_id, b_objects_id, joins_types_id) VALUES (6, 7, 1);
4.3 Implementace mapového rozhraní
Jako základ byl použit PHP framework Nette, který po svém spuštění načte ja-
vascriptové knihovny a předá jim patřičná data. Ukázková aplikace je zamýšlena
především jako tzv. "proof of concent"– tedy jako ukázka realizovatelnosti konceptu
a nejedná se tedy o plně funkční informační systém.
4.3.1 Serverová část
Na serverové straně se o předávání dat do Ext JS aplikace starají presentery Map
a Layer. Map presenter vrací seznam map uložených v databázi, Layer presenter pak
pomocí akce get-layer vrací GEOJSON obsahující všechny geometrie dané vrstvy.
49
ČVUT v Praze 4. IMPLEMENTACE
Ukázka navráceného GEOJSON pro vrstvu
{
"type":"FeatureCollection",
"features":[
{
"geometry":{
"type":"GeometryCollection",
"geometries":[
{"type":"Polygon",
"coordinates":[[
[-753415.737,-1081709.37],
[-753411.117,-1081705.135],
[-753402.665,-1081719.355],
[-753399.912,-1081711.851],
[-753391.498,-1081721.029],
[-753398.904,-1081727.757],
[-753415.737,-1081709.37]]]
}
]
},
"type":"Feature",
"properties":{}
}
]
}
4.3.2 Klientská aplikace
Klientská aplikace je napsaná v Ext JS 4 a využívá MVC architekturu. Základní
rozložení aplikace je dvousloupcový layout s horním menu a je popsáno v kapitole
50
ČVUT v Praze 4. IMPLEMENTACE
2.5.2. Layout je nadefinován pomocí pohledu Viewport.js, který zároveň načítá po-
hled hlavního menu – topContainer.js a v něm topMenu.js. Levé menu je řešeno
pomocí pohledu menuList a je obsaženo v pohledu leftContainer.js. Mapový panel
obstarává pohled mapPanel.js, který je umístěn do mainContaineru.
Mapové okno, řešené pomocí mapPanelu, dědí třídu GeoExt.panel.Map, která
nám umožnuje používat v okně mapu OpenLayers. Pomocí kontroleru MapPanel.js
je pak do mapového okna nahrána podkladová ortofotomapa ze serverů ČÚZK a dále
dvě testovací vrstvy „Počva“ a „Kůlna“ .
Ukázka načtení vrstvy do mapy
var vecLayer = new OpenLayers.Layer.Vector("Kůlna", {
projection: new OpenLayers.Projection("EPSG:102067"),
isBaseLayer: false,
styleMap: sm,
protocol: new OpenLayers.Protocol.HTTP({
url: "layer/get-layer/2",
format: new OpenLayers.Format.GeoJSON()
}),
strategies: [new OpenLayers.Strategy.Fixed()]
});
mapPanel.map.addLayers(vecLayer);
51
ČVUT v Praze ZÁVĚR
Závěr
V rámci této práce se podařilo nadefinovat základní požadavky na funkci infor-
mačního geoportálu pro URC JOSEF. Vybrané požadavky byly hlouběji rozebrány
pomocí diagramů, které nám pomohly namodelovat procesy probíhající v systému
a ujasnit si datovou strukturu aplikace, která byla naimplementována na úrovni
databáze. Dále byla do databáze nahrána testovací data, která byla převedena z vý-
kresu ve formátu DGN. Následně byla vytvořena testovací mapová aplikace, která
tato data zobrazuje. Ukázková aplikace je dostupná na adrese http://inggeo.fsv.
cvut.cz:6080/dev/pavelk/josef/www/.
Jednu z největších výzev při návrhu aplikace představovalo vytvoření databáze
tak, aby nám dovolila přidávat různé typy objektů s téměř jakýmikoliv parametry
a řešit oprávnění přístupu k nim, aniž bychom museli měnit datovou základnu.
Nakonec byl tento problém úspěšně vyřešen pomocí obecného objektu, na který se
může navázat libovolný počet atributů s jedním z přednastavených datových typů.
Mezi objekty se mohou definovat spojení a mohou se tak libovolně zanořovat. Další
výzvou bude implementace tohoto objektu na aplikační úrovni.
Dalším závažným problémem bylo bezproblémové načítání geodetických dat. Zá-
kladem zdárného řešení je domluva s osobou tvořící mapový podklad, aby pro určitá
data použila správná geometrická primitiva (bod, lomenou čáru, polygon) a také aby
jednotlivé objekty měla ve správných a předem definovaných vrstvách. Takto nakres-
lený výkres je pak možné pomocí knihovny OGR, která je součástí knihovny GDAL
načíst do PostGIS databáze. V budoucnu by aktualizace dat měla být největší pri-
oritou při implementaci systému.
Na aplikační úrovni představovaly největší problém verze jednotlivých použitých
frameworků. Zvláště pak nová verze Ext JS, která je nyní ve verzi 4 a která podstat-
ným způsobem změnila svoji architekturu a tím způsobila řadu problémů s integrací
GeoExt, potažmo OpenLayers. Tento problém byl naštěstí vyřešen použitím beta
verze knihovny GeoExt, která však stále není vydána ve stabilní verzi.
52
ČVUT v Praze ZÁVĚR
V této práci bych chtěl pokračovat implementací v rámci diplomové práce, kde
největší výzvy vidím právě ve zdárné implementaci klientské strany, kde se projeví
úskalí spojené s rozšiřitelným datovým modelem.
53
ČVUT v Praze POUŽITÉ ZDROJE
Použité zdroje
[1] Podzemní laboratoř Josef [online]. Poslední aktualizace 30. 4. 2013. Dostupné
z URL: <http://www.uef-josef.eu/>.
[2] Apache2 [online]. Poslední aktualizace 15. 5. 2013. Dostupné z URL: <http:
//httpd.apache.org/>.
[3] PHP: General Information [online]. Poslední aktualizace 15. 5. 2013. Dostupné
z URL: <http://cz1.php.net/manual/en/faq.general.php/>.
[4] PostgreSQL: About [online]. Poslední aktualizace 15. 5. 2013. Dostupné z URL:
<http://www.postgresql.org/about/>.
[5] PostGIS [online]. Poslední aktualizace 15. 5. 2013. Dostupné z URL: <http:
//www.postgis.org/>.
[6] O frameworku | Nette Framework [online]. Poslední aktualizace 15. 5. 2013. Do-
stupné z URL: <http://nette.org/cs/o-frameworku>.
[7] Sencha Ext JS | Products | Sencha [online]. Poslední aktualizace 15. 5. 2013.
Dostupné z URL: <http://www.sencha.com/products/extjs>.
[8] GeoExt 2 - Status Page [online]. Poslední aktualizace 15. 5. 2013. Dostupné
z URL: <http://geoext.github.io/geoext2/>.
[9] OpenLayers [online]. Poslední aktualizace 15. 5. 2013. Dostupné z URL: <http:
//openlayers.org/>.
[10] OGR Simple Feature Library [online]. Poslední aktualizace 15. 5. 2013. Do-
stupné z URL: <http://www.gdal.org/ogr/>.
54
ČVUT v Praze SEZNAM SYMBOLŮ, VELIČIN A ZKRATEK
Seznam symbolů, veličin a zkratek
ČVUT České vysoké učení technické
FSv Fakulta stavební
HTTP Hyper Text Transfer Protocol
URI Uniform Resource Identifier
GET HTTP požadavek využívající URI
IP Internet Protocol
API Application Programming Interface
U Uživatel
IS Informační systém
ACL Access control list
NCSA National Center for Supercomputing Applications
ASF Apache Software Foundation
PHP PHP: Hypertext Preprocessor
JSON JavaScript Object Notation
GDAL Geospatial Data Abstraction Library
CRM Customer relationship management
55
Seznam obrázků
2.1 Use case: Vytvoření uživatele (Uživatelé) . . . . . . . . . . . . . . . . 16
2.2 Use case: Přidání role (Uživatelé) . . . . . . . . . . . . . . . . . . . . 17
2.3 Use case: Vytvoření objektu (Majetek) . . . . . . . . . . . . . . . . . 18
2.4 Use case: Registrace výpůjčky (Majetek) . . . . . . . . . . . . . . . . 19
2.5 Use case: Aktualizace dat (Infrastruktura) . . . . . . . . . . . . . . . 20
2.6 Use case: Přidání uživatele (Projekty) . . . . . . . . . . . . . . . . . . 21
2.7 Use case: Vyhledání bodu (Bodová pole a geodata) . . . . . . . . . . 22
2.8 Proces: Vytvoření uživatele a přidání role (Uživatelé) . . . . . . . . . 23
2.9 Proces: Vytvoření role a přidání oprávnění (Uživatelé) . . . . . . . . . 24
2.10 Proces: Přiřazení zdrojů/privilegií oprávněním (Uživatelé) . . . . . . 25
2.11 Proces: Registrace výpůjčky (Majetek) . . . . . . . . . . . . . . . . . 26
2.12 Proces: Aktualizace dat (Senzory) . . . . . . . . . . . . . . . . . . . . 26
2.13 Proces: Vytvoření a editace projektu (Výzkumné projekty) . . . . . . 27
2.14 Proces: Editace bodů (Bodová pole a geodata) . . . . . . . . . . . . . 28
2.15 Proces: Zobrazení mapy (Bodová pole a geodata) . . . . . . . . . . . 28
2.16 Proces: Správa map a vrstev (Bodová pole a geodata) . . . . . . . . . 29
2.17 Proces: Aktualizace geodetických dat (Bodová pole a geodata) . . . . 30
2.18 Databáze: Objekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.19 Databáze: Správa uživatelů a rolí . . . . . . . . . . . . . . . . . . . . 33
2.20 Databáze: Geodata . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.21 Třídy: Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.22 Třídy: Uživatelé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.23 Třídy: Mapy, vrstvy, geodata . . . . . . . . . . . . . . . . . . . . . . 37
2.24 Třídy: Majetek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.25 Třídy: Senzory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.26 Třídy: Projekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.27 Wireframe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
C.1 Printscreen ukázkové aplikace . . . . . . . . . . . . . . . . . . . . . . 71
ČVUT v Praze SEZNAM PŘÍLOH
Seznam příloh
A Instalace aplikací 58
A.1 Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.2 Apache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.2.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.3 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.3.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4.1 Instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
A.4.2 Konfigurace . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
A.4.3 PostGIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
B Tvorba SQL databáze 60
C Printscreen ukázkové aplikace 71
D Obsah přiloženého CD 72
57
ČVUT v Praze A. INSTALACE APLIKACÍ
A Instalace aplikací
A.1 Úvod
Kompletní vývoj aplikace probíhal v operačním systému GNU/Linux, konkrétně na
distribuci Ubuntu. V této příloze bude rozebrána instalace aplikací nutných pro její
běh a základní nastavení těchto aplikací.
A.2 Apache
A.2.1 Instalace
sudo apt-get install apache2
Konfigurace
Po instalaci je v Apache2 vypnutý mod-rewrite, který je potřeba kvůli Nette Fra-
meworku a proto je nutné jej povolit.
sudo cd /etc/apache2/mods-enabled/
sudo ln -s ../mods-available/rewrite.load rewrite.load
sudo /etc/init.d/apache2 reload
A.3 PHP
A.3.1 Instalace
sudo apt-get install php5 libapache2-mod-php5
A.4 PostgreSQL
A.4.1 Instalace
sudo apt-get install postgresql php5-pgsql postgresql-client \
postgresql-contrib
58
ČVUT v Praze A. INSTALACE APLIKACÍ
A.4.2 Konfigurace
Nastavení hesla uživatele postgres a vytvoření nového uživatele a databáze.
sudo passwd postgres
sudo /etc/init.d/postgresql restart
su postgres
createuser <user_name>
createdb <db_name>
psql <user_name>
ALTER USER <user_name> WITH PASSWORD ’<password>’;
A.4.3 PostGIS
Z důvodu zastaralosti verze PostGIS v systému bylo nutné přidat zdroj ubuntugis-
unstable, který obsahuje nejnovější verze PostGIS.
Instalace
sudo apt-add-repository ppa:ubuntugis/ubuntugis-unstable
sudo apt-get install postgis postgresql-9.1-postgis
Konfigurace
V databázi je pak nutné spustit následující příkaz.
CREATE EXTENSION postgis;
59
ČVUT v Praze B. TVORBA SQL DATABÁZE
B Tvorba SQL databáze
CREATE SCHEMA josef;
SET search_path TO josef,public;
DROP TABLE IF EXISTS josef.roles;
DROP TABLE IF EXISTS josef.users;
DROP TABLE IF EXISTS josef.users_roles;
DROP TABLE IF EXISTS josef.addresses_types;
DROP TABLE IF EXISTS josef.addresses;
DROP TABLE IF EXISTS josef.resources_types;
DROP TABLE IF EXISTS josef.resources;
DROP TABLE IF EXISTS josef.privileges;
DROP TABLE IF EXISTS josef.permissions;
DROP TABLE IF EXISTS josef.roles_permissions;
DROP TABLE IF EXISTS josef.objects;
DROP TABLE IF EXISTS josef.attributes;
DROP TABLE IF EXISTS josef.attributes_types;
DROP TABLE IF EXISTS josef.default_attributes;
DROP TABLE IF EXISTS josef.resources_default_attributes;
DROP TABLE IF EXISTS josef.objects_joins;
DROP TABLE IF EXISTS josef.joins_types;
DROP TABLE IF EXISTS josef.geotypes_objects
DROP TABLE IF EXISTS josef.points
DROP TABLE IF EXISTS josef.linestrings
DROP TABLE IF EXISTS josef.polygons
CREATE TABLE josef.users (
id BIGSERIAL PRIMARY KEY,
login VARCHAR(255) UNIQUE NOT NULL,
firstname VARCHAR(255),
lastname VARCHAR(255),
60
ČVUT v Praze B. TVORBA SQL DATABÁZE
password VARCHAR(255) NOT NULL,
phone VARCHAR(15),
position VARCHAR(255),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.roles (
id BIGSERIAL PRIMARY KEY,
role VARCHAR(255) UNIQUE NOT NULL,
description TEXT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.users_roles (
users_id BIGINT NOT NULL REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
roles_id BIGINT NOT NULL REFERENCES roles(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
61
ČVUT v Praze B. TVORBA SQL DATABÁZE
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
PRIMARY KEY (users_id, roles_id)
);
CREATE TABLE josef.addresses_types (
id BIGSERIAL PRIMARY KEY,
type VARCHAR(255),
description TEXT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.addresses (
id BIGSERIAL PRIMARY KEY,
users_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
addresses_types_id BIGINT REFERENCES addresses_types(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
street VARCHAR(255),
city VARCHAR(255),
postcode VARCHAR(255),
country VARCHAR(255),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
62
ČVUT v Praze B. TVORBA SQL DATABÁZE
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.resources_types (
id BIGSERIAL PRIMARY KEY,
type VARCHAR(255),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.resources (
id BIGSERIAL PRIMARY KEY,
resource VARCHAR(255),
description TEXT,
resources_types_id BIGINT REFERENCES resources_types(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.privileges (
id BIGSERIAL PRIMARY KEY,
63
ČVUT v Praze B. TVORBA SQL DATABÁZE
privilege VARCHAR(255),
description TEXT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.objects (
id BIGSERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
description TEXT,
resources_id BIGINT NOT NULL REFERENCES resources(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id)
\ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.permissions (
id BIGSERIAL PRIMARY KEY,
permision VARCHAR(255),
description TEXT,
resources_id BIGINT REFERENCES resources(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
privileges_id BIGINT REFERENCES privileges(id) \
64
ČVUT v Praze B. TVORBA SQL DATABÁZE
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.roles_permissions (
roles_id BIGINT NOT NULL REFERENCES roles(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
permissions_id BIGINT NOT NULL REFERENCES permissions(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
objects_id BIGINT REFERENCES objects(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
PRIMARY KEY (roles_id, permissions_id)
);
CREATE TABLE josef.attributes_types (
id BIGSERIAL PRIMARY KEY,
type VARCHAR(255) UNIQUE NOT NULL,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
65
ČVUT v Praze B. TVORBA SQL DATABÁZE
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.attributes (
objects_id BIGINT PRIMARY KEY REFERENCES objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
attributes_types_id BIGINT NOT NULL REFERENCES attributes_types(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
name VARCHAR(255) NOT NULL,
value_bool BOOLEAN,
value_int INT,
value_double DOUBLE PRECISION,
value_varchar VARCHAR(255),
value_text TEXT,
value_bytea BYTEA,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.default_attributes (
id BIGSERIAL PRIMARY KEY,
attributes_types_id BIGINT NOT NULL REFERENCES attributes_types(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
66
ČVUT v Praze B. TVORBA SQL DATABÁZE
name VARCHAR(255) NOT NULL,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.joins_types (
id BIGSERIAL PRIMARY KEY,
type VARCHAR(255),
a_resources_id BIGINT NOT NULL REFERENCES resources(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
b_resources_id BIGINT NOT NULL REFERENCES resources(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.objects_join (
a_objects_id BIGINT REFERENCES objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
b_objects_id BIGINT REFERENCES objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
joins_types_id BIGINT REFERENCES joins_types(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
67
ČVUT v Praze B. TVORBA SQL DATABÁZE
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
PRIMARY KEY (a_objects_id, b_objects_id, joins_types_id)
);
CREATE TABLE josef.geotypes (
id BIGSERIAL PRIMARY KEY,
geotype VARCHAR(255) NOT NULL UNIQUE,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.geotypes_objects (
objects_id BIGINT REFERENCES josef.objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
geotypes_id BIGINT REFERENCES josef.geotypes(id) \
ON UPDATE CASCADE ON DELETE RESTRICT,
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
68
ČVUT v Praze B. TVORBA SQL DATABÁZE
);
CREATE TABLE josef.points (
objects_id BIGINT PRIMARY KEY REFERENCES josef.objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
geom GEOMETRY(PointZ, 5514),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.linestrings (
objects_id BIGINT PRIMARY KEY REFERENCES josef.objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
geom GEOMETRY(LinestringZ, 5514),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
CREATE TABLE josef.polygons (
objects_id BIGINT PRIMARY KEY REFERENCES josef.objects(id) \
ON UPDATE CASCADE ON DELETE CASCADE,
geom GEOMETRY(PolygonZ, 5514),
created TIMESTAMP NOT NULL DEFAULT current_timestamp,
69
ČVUT v Praze B. TVORBA SQL DATABÁZE
created_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL,
modified TIMESTAMP,
modified_users_id BIGINT REFERENCES users(id) \
ON UPDATE CASCADE ON DELETE SET NULL
);
70
ČVUT v Praze C. PRINTSCREEN UKÁZKOVÉ APLIKACE
C Printscreen ukázkové aplikace
Obr. C.1: Printscreen ukázkové aplikace
71
ČVUT v Praze D. OBSAH PŘILOŽENÉHO CD
D Obsah přiloženého CD
Součástí elektronických příloh na přiloženém CD jsou text této bakalářské práce ve
formátu pdf, webová aplikace, skript pro vytvoření databáze a soubory použité pro
export mapových dat.
∙ aplikace/
– app/...
– libs/...
– log/...
– temp/...
– tests/...
– www/...
– readme.txt
∙ databaze/
– database.sql
– readme.txt
∙ dulni_mapa/
– dulni_mapa.shp
– dulni_mapa.shx
– dulni_mapa_pocva_wkb.sql
– dulni_mapa_pocva_wkt.sql
– dulni_mapa_v7.dgn
– readme.txt
∙ bp_klimunda.pdf
∙ readme.txt
72