UNIVERZITA PALACKÉHO V OLOMOUCI PŘÍRODOVĚDECKÁ FAKULTA KATEDRA GEOINFORMATIKY
Libor KIMPL
PROSTOROVÉ NADSTAVBY NEKOMERČNÍCH DATABÁZÍ – VSTUP A SPRÁVA GEOOBJEKTŮ
Bakalářská práce
Vedoucí práce: RNDr. Vilém Pechanec, Ph.D.
Olomouc 2010
Prohlašuji, že jsem zadanou bakalářskou práci vypracoval samostatně pod vedením RNDr. Viléma Pechance, Ph.D. Všechny použité materiály a zdroje jsou citovány s ohledem na vědeckou etiku, autorská práva a zákony na ochranu duševního vlastnictví.
V Olomouci 25. května 2010
…………………………... podpis
OBSAH 1. ÚVOD
7
2. CÍL PRÁCE
8
3. PROSTŘEDÍ A METODY ZPRACOVÁNÍ
9
3.1 DATABÁZE
9
3.1.1
Modelování aplikací
11
3.1.2
Správa fyzických dat
13
3.2 GEODATABÁZE (PROSTOROVÁ DATABÁZE)
14
3.2.1
PostgreSQL
14
3.2.2
MySQL
16
3.2.3
SQLite
18
3.3 PROSTOROVÁ NADSTAVBA DATABÁZE
18
3.3.1
PostGIS
18
3.3.2
MyGIS
19
3.3.3
SpatiaLite
19
3.3.4
JanGeoDB
20
3.4 DALŠÍ SOFTWAROVÁ ŘEŠENÍ
22
3.4.1
Janitor
22
3.4.2
QuantumGIS (QGIS)
23
3.4.3
FWTools Shell
25
3.4.4
OpenEV
26
3.4.5
GDAL
26
3.4.6
OGR
28
3.4.7
shp2pgsql
29
3.5 ULOŽENÍ DAT V GEODATABÁZI
31
3.5.1
Well-known text (WKT)
31
3.5.2
Well-known binary (WKB)
32
3.6 JAZYK SQL 3.6.1 Spatial SQL (Prostorové SQL) 4. VSTUP A SPRÁVA GEOOBJEKTŮ
33 34 38
4.1 Vytvoření databáze (CREATE DATABASE)
38
4.2 Vytvoření tabulky (CREATE TABLE)
40
4.3 Vložení záznamů (INSERT)
45
4.4 Odstranění záznamů (DELETE)
47
4.5 Změna obsahu záznamů (UPDATE)
48
4.6 Dotazování (SELECT)
51
5. DISKUZE
61
6. ZÁVĚR
62
7. SEZNAM POUŽITÉ LITERATURY
64
8. SUMMARY
66
PŘÍLOHY
1. ÚVOD Pojem databáze dnes není zcela jistě nikomu cizí. Lidé mají potřebu evidovat a shromažďovat informace už odpradávna. Celá dnešní moderní společnost je postavena na databázových systémech od evidence občanů, přes zdravotnictví, hospodářství, školství až po letectví, výzkum nebo síť mobilních telefonů [24]. V současné době směřuje vývoj geografických informačních systémů do stavu, kdy je snaha ukládat do databází společně jak atributová tak geometrická data. GIS nejsou jediné aplikace, které využívají prostorové objekty. Při počítačovém konstruování strojů, stavebních objektů či elektronických obvodů jsou také vytvářeny prostorové objekty [1]. Tato bakalářská práce se věnuje rozšíření databází o prostorové nadstavby. Seznámí nejen se základními pojmy z oblasti databází, ale i s konkrétními vlastnostmi a použitím prostorových databází, seznámí s dialektem jazyka SQL jako nástroje pro vytvoření prostorové databáze a manipulaci s geodaty. Jazyk SQL je standardním nástrojem, ze kterého většina dnes používaných databázových systémů vychází a v různé míře tyto systémy tento standard dodržují.
7
2. CÍL PRÁCE Cílem bakalářské práce je popsat a porovnat stávající prostorové rozšíření nekomerčních databází s přímým využitím v GIS. Zjištěné poznatky budou zpřístupněny pomocí DocBooku. V teoretické části práce vznikne přehled o stávajících (výrazných) řešeních prostorových nadstaveb – PostGIS, MyGIS, JanGeoDB, Spatial for SQLite. Budou popsány existující nadstavby na úrovni přehledu podporovaných datových typů, přehledu operací pro vstup a správu geodat, dostupnosti a závislosti rozšíření a základní schéma datového modelu. V praktické části bude provedeno testování tzn. vstup základních datových typů do databáze a základní manipulace s nimi (INSERT, UPDATE geometrické složky i atributové, DELETE) v prostředí PostGIS, MyGIS, JanGeoDB, SpatialSQLite. Operace budou prováděny jak z konzolce pomocí jazyka SQL, tak z libovolné desktop aplikace. Všechny kroky budou podrobně zdokumentovány. Praktická část bude doplněna o srovnání rychlosti a kvality operace.
8
3. PROSTŘEDÍ A METODY ZPRACOVÁNÍ Existuje celá řada databázových systémů, produktů a nadstaveb, které se využívají pro potřeby geografických informačních systémů.
3.1 DATABÁZE Databáze je velkou sbírkou propojených dat uložených v počítačovém prostředí. V těchto prostředích jsou data perzistentní, což znamená, že přežijí neočekávané softwarové nebo hardwarové problémy (s výjimkou závažných případů selhání disku). K tradičnímu využití databází patří personální řízení, akcie, cestovní rezervace a bankovnictví. V případě relačních databázových systémů se databáze skládá z několika tabulek a jejich vzájemných vztahů, které jsou nazývány dle autora relačního modelu E. F. Codda relace
[2]
. Každá tabulka se skládá z jednotlivých řádků, které se označují jako záznam
(record). Struktura záznamu je dána definicí tabulky. Pokud se například bude jednat o tabulku s adresami, pak budou jednotlivá pole (fields) záznamu obsahovat jméno, příjmení, ulici atd. Pro každé pole je přesně zadáno, jak má vypadat jeho obsah (například různé formáty čísel nebo řetězec o maximálním počtu znaků). Namísto o záznamech obsahujících jednotlivá pole se často hovoří pouze o řádcích (rows) či sloupcích (columns). Významově znamenají všechny tyto výrazy totéž. Databáze může být viděna jako jeden nebo více souborů uložených na nějakém vnějším paměťovém zařízení, jako je například disk. Ačkoliv by bylo možné psát aplikace, které mají přímý přístup k těmto souborům, stavba aplikací vyvolává řadu problémů, které se týkají bezpečnosti, souběžnosti a složitosti manipulace s daty
[4]
. DBMS (DataBase
Management System) je kolekce programů, které řídí strukturu databáze a kontroluje přístup k datům uloženým v databázi. Obecně řečeno, DBMS usnadňuje proces: •
Definování databáze, která je popsána datovými typy, strukturami a omezeními, které mají být vzaty v úvahu.
•
Budování databáze; tj. ukládání dat do trvalého úložiště.
•
Manipulace s databází.
•
Dotazování na databázi pro získání specifických údajů.
•
Aktualizace databáze (změny hodnot).
9
Uložená data
Obr. 1: Zjednodušené prostředí databázového systému [4]
Na obrázku č.1 výše je znázorněno zjednodušené prostředí databázového systému. Ukazuje, jak DBMS působí jako prostředník mezi uživateli, aplikačními programy a zařízeními, kde jsou data uložena. DBMS software se skládá ze dvou částí. Horní část zpracovává dotazy (queries) uživatele. Výsledkem dotazu je tabulka, která je však uložena pouze v operační paměti počítače (RAM) [2]. Spodní část umožňuje přístup k vlastním údajům a metadatům potřebným k pochopení definice a struktury databáze. DBMS závisí na základním pojetí datové nezávislosti. Uživatelé komunikují s reprezentací dat nezávisle na konkrétním fyzickém skladování a DBMS má na starosti překládání uživatelských manipulací s ohledem na efektivní provoz fyzických datových struktur [4]. Tohoto mechanismu je možné dosáhnout pomocí různých úrovní abstrakce. Je obvyklé rozlišovat tři úrovně v databázovém prostředí: 1. Fyzická úroveň se zabývá strukturami skladování, 2. Logická úroveň definuje reprezentaci dat navržených pro uživatele a 3. Vnější úroveň odpovídá za částečný pohled do databáze pomocí konkrétní aplikace. Rozdíl mezi fyzickými a logickými reprezentacemi je stěžejní oblastí databáze. Jasně odděluje úkoly věnované systému zjednodušené reprezentace a funkčním manipulacím nabízeným uživateli. Dokáže se tedy soustředit především na odpovídající modelování a provádění aplikace.
10
3.1.1 Modelování aplikací Na logické úrovni je prvním úkolem definovat databázové schéma, které popisuje strukturu spravovaných informací řízených aplikacemi stejně jako omezení, která je třeba respektovat
[4]
. Jakmile je schéma definováno, mohou být data vkládána, aktualizována,
vymazávána a dotazována pomocí dotazovacího jazyka. Zejména struktury, omezení a provoz zajišťuje DBMS závislý na logickém datovém modelu podporovaném DBMS. V současné době je nejrozšířenější relační datový model. Níže je uveden příklad vývoje aplikace s relačními databázemi.
REPREZENTACE DAT V RELAČNÍ DATABÁZI
V relačním prostředí je reprezentace dat poměrně jednoduchá. Opírá se o jediný typ struktury, tabulky nebo relace
[4]
. Například reprezentace názvu, hlavního města a počtu
obyvatel kolekce zemí obsahuje jeden řádek na zemi a jeden sloupec nebo atribut na vlastnost zastoupenou v každé zemi (konkrétně její název, hlavní město a počet obyvatel). Navrhnutí relačního schématu obvykle zabere dva kroky. •
Koncepční modelování (krok 1.). Tento krok je nezávislý na případné realizaci. Dovoluje obecně popsat objekty zájmu (entity) spolu se vztahy mezi nimi. Entity jsou příklady typů entit a vztahy jsou příklady typů vztahů. Například ve větě "Paříž je hlavní město Francie", Paříž (Francie) je entita, která patří k typu entity s názvem města (respektive země), a "je hlavní město" je typ vztahu. Skutečnost, že město Paříž je hlavním městem Francie je vztah, který je zvláštní případ předchozího typu vztahu. Vztahy mezi entitami mohou být obecné, jako je kompozice, agregace nebo dědictví. Jiné vztahy se vztahují na konkrétní situace (např. "silnice spojující města"). Entity a vztahy jsou obvykle graficky zobrazeny v diagramu jako entita-vztah (ER), UML (Unified Modeling Language) nebo OMT (Object Modeling Techniques) diagramy. Jakmile je takové schéma navrženo, získá se koncepční schéma.
•
Logická úroveň (krok 2.). V této fázi je koncepční schéma přeloženo do datového modelu konkrétní DBMS. V kontextu relační databáze, následuje několik jednoduchých pravidel transformace a popisuje relační schéma pomocí Data Definition Language (DDL).
11
Obr. 2: Postup a realizace datového modelování [1]
MANIPULACE S DATY
V prostředí DBMS, se manipulace s daty děje prostřednictvím vyjádření dotazů a jiných operací (aktualizace, vložení, atd.) v jazyce pro manipulaci s daty (DML). Jedním z důvodů úspěchu relační DBMS je existence dotazovacího jazyka SQL, jednotně používaného ve všech relačních systémech
[4]
. SQL má základní vlastnosti, které stojí za
zmínku. 1) SQL je deklarativní, což znamená, že uživatel vyjádří, co očekává jako výsledek. Jazyk je jednoduchý, a je přístupný i pro neodborné uživatele. Tento systém také dává svobodu (a odpovědnost) zvolit vhodné provedení. 2) SQL se opírá o řádné matematické základy. Soubor údajů manipulace vyjádřený prostřednictvím jazyka je přesně vymezen dvěma ekvivalenty, formálními jazyky, a sice relačním kalkulem a relační algebrou. První z nich je v podstatě první logický příkaz. Druhým je malý soubor operátorů, které popisují, jak lze manipulovat vztahy k vyhodnocení dotazu.
12
Nicméně, existuje protějšek k jednoduchosti SQL. Expresivní síla SQL není dostatečná, neboť neodpovídá kompletním programovacím jazykům jako C
[4]
. Například
nelze vyjádřit rekurze (opakování činnosti) a ani aritmetické výpočty. I když je to cena, která má být zaplacena za jednoduchost a efektivnost, přináší silná omezení, pokud jde o výpočty potřebné pro manipulaci s prostorovými objekty.
3.1.2 Správa fyzických dat Jakýkoli DBMS nakládá na fyzické úrovni s těmito úkoly. Všechny tyto funkce jsou skryty pro koncového uživatele. •
Úložiště. DBMS spravuje efektivnější organizaci dat na trvalé vedlejší paměťové jednotce (obvykle jeden či více disků). Reprezentace na této úrovni může být zcela jiná, než je ukázáno uživateli v závislosti na logickém datovém modelu. Např. tabulka může být uložena v několika souborech, případně rozdělena na více disků.
•
Přístupové cesty. DBMS poskytuje metody pro přístup k datům nebo přístupové cesty, které urychlí vyhledávání dat. Typická struktura dat nebo index, který urychluje vyhledávání dat, je B-tree.
•
Zpracování dotazu. Zpracování (hodnocení) dotazu obvykle zahrnuje několik operací. Pro efektivní zhodnocení dotazu musí být tyto činnosti vhodně kombinovány. Důležitým předmětem dotazu je zpracování návrhu efektivního propojení algoritmů.
•
Optimalizace dotazu. Protože uživatelský dotaz je čistě deklarativní (alespoň s SQL), je odpovědností systému najít přijatelně efektivní způsob, jak zhodnotit dotaz.
•
Souběžnost a obnova. DBMS spravuje souběžný přístup k datům a zdroje několika uživatelů a zaručuje bezpečnost a konzistenci databáze, jakož i obnovení databáze do konzistentního stavu po selhání systému.
Mnohé z těchto funkcí (s výjimkou kontroly souběžnosti a obnovy) jsou určeny k efektivnímu vyhodnocování dotazů [4]. Výše uvedené úkoly, musí být řešeny v prostorových databázích. Nicméně, s prostorovými daty mnoho z těchto úkolů vyžaduje specifické řešení. Zejména relační datový model ukazuje, že je příliš chudý, aby zastupoval a manipuloval s geometrickými daty. Tím vzniká několik zajímavých problémů týkajících se rozšíření stávajících logických datových modelů a vývoje nových technik zpracování dotazu.
13
3.2 GEODATABÁZE (PROSTOROVÁ DATABÁZE) Geodatabáze je databáze navržená pro ukládání, dotazování a manipulaci s geografickou informací a prostorovými daty. Je také známá jako prostorová databáze. V rámci prostorové databáze je s prostorovými daty zacházeno jako s jakýmkoli jiným typem dat. Vektorová data mohou být uložena jako bod, linie nebo polygon datové typy a mohou mít související souřadnicový systém. Záznam geodatabáze může používat datový typ geometrie pro reprezentaci umístění objektu ve fyzickém světě a další standardní databázové datové typy pro uložení atributů objektu. Některé geodatabáze mohou obsahovat podporu také pro ukládání rastrových dat. Mnoho geodatabází má vlastní funkce, které umožňují manipulovat a dotazovat se na prostorová data pomocí SQL, například najít všechny obyvatele oblasti v rámci expozice zóny pro potenciální ohrožení životního prostředí. Nicméně k prostorovým datům v některých geodatabázích lze přistupovat pouze pomocí speciálního klientského softwaru. V rámci geografického informačního systému (GIS) je prostorová databáze jednou ze součástí, které lze použít pro ukládání a manipulaci s daty. Kompletní systém pak zahrnuje také klientský software pro zobrazení a editaci dat uložených v databázi [11].
3.2.1 PostgreSQL PostgreSQL je objektově-relační databázový systém s otevřeným zdrojovým kódem, vyvinutý na University of California v Berkeley Computer Science Department. 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 [19]. Běží nativně na všech rozšířených operačních systémech včetně Linuxu, UNIX (AIX, BSD, HP-UX, SGI-IRIX, Mac OS X, Solaris, Tru64) a Windows. Stoprocentně splňuje podmínky ACID (soubor vlastností zaručujících spolehlivé zpracování databázových transakcí), plně podporuje cizí klíče, operace JOIN, pohledy, spouštěče a uložené procedury. Obsahuje většinu SQL92 a SQL99 datových typů, např. INTEGER, NUMERIC, BOOLEAN, CHAR, VARCHAR, DATE, INTERVAL a TIMESTAMP. Rovněž podporuje ukládání binárních velkých objektů, včetně obrázků, zvuků nebo videa. Má nativní programovací rozhraní pro C / C++, Java, .Net, Perl, Python, Ruby, Tcl, ODBC a další. Výkonnostně nezaostává za srovnatelnými komerčními systémy a častokrát je i předčí. PostgreSQL podporuje složené, jedinečné, částečné a funkční indexy, které může použít některá z jeho B-tree, R-tree, hash, nebo GiST skladovacích metod.
14
GiST (Generalized Search Tree) indexování je moderní systém, který sdružuje široké spektrum různých třídících a vyhledávacích algoritmů včetně B-tree, B +-tree, R-tree, partial sum tree, ranked B +-tree a mnoho dalších. To také poskytuje rozhraní, které umožňuje jak tvorbu vlastních datových typů, stejně jako rozšiřitelných dotazovacích metod, s jejíž pomocí lze prohledávat. Tak, GiST nabízí flexibilitu ke specifikování toho, co je uloženo, jak je to uloženo, a schopnost definovat nové způsoby, jak hledat přes to --- způsoby, které jsou daleko větší než nabízí standardní B-tree, R-tree a další obecné hledací algoritmy.
Obr. 3: Logo databázového systému PostgreSQL [19]
PostgreSQL je šířen pod licencí The PostgreSQL License (TPL), která je nejliberálnější ze všech Open Source licencí. Tato licence umožňuje neomezené bezplatné používání, modifikaci a distribuci PostgreSQL, a to ať pro komerční nebo nekomerční využití. PostgreSQL můžete šířit se zdrojovými kódy nebo bez nich, zdarma nebo komerčně. Předností systému PostgreSQL je rozšiřitelnost. Systém může být bezproblémově rozšiřován o nové datové typy, funkce, operátory, agregační funkce, procedurální jazyky. Díky tomu mohly vzniknout následující rozšíření: PostGIS - podpora pro geografické informační systémy, Slony-I - master to multiple slaves replikace. Za vývojem PostgreSQL stojí skupina nezávislých vývojářů a uživatelů navzájem komunikujících prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací [27].
pgAdminIII pgAdminIII je populární a nejlépe vybavená administrační a vývojářská Open Source platforma pro PostgreSQL. Aplikaci lze používat pod Linuxem, FreeBSD, Solaris, Mac OS X a Windows systémy ke správě PostgreSQL 7.3 a novějšího. pgAdmin je navržený tak, aby uměl vyhovět na potřeby všech uživatelů, od psaní jednoduchých dotazů SQL až po vývoj komplexních databází. Grafické rozhraní podporuje všechny funkce PostgreSQL a činní administraci snadnou. Aplikace rovněž obsahuje editor SQL se zvýrazňováním syntaxe, editor kódu serverové strany, agenta pro plánování úkolů, podporu pro replikační systém Slony-I a další. Připojení k serveru může probíhat přes TCP/IP
15
nebo Unixové sokety (na *nixových platformách) a může být kvůli bezpečnosti šifrované SSL. Pro komunikaci s databázovým serverem nejsou potřeba žádné přídavné ovladače. pgAdmin je vyvíjen komunitou expertů na PostgreSQL z celého světa a je dostupný ve více jak tuctu jazyků. Jedná se o svobodný software vydaný pod licencí BSD [20].
Obr. 4: Logo administračního programu databázového systému PostgreSQL [20]
3.2.2 MySQL MySQL je nejpopulárnější open source SQL databázový systém, vytvořený švédskou firmou MySQL AB, nyní vlastněný společností Sun Microsystems, dceřinou společností Oracle Corporation. Jeho hlavními autory jsou Michael „Monty“ Widenius a David Axmark [15]
. Je považován za úspěšného průkopníka dvojího licencování – je k dispozici jak pod
bezplatnou licencí GPL, tak pod komerční placenou licencí.
Obr. 5: Příkazový řádek MySQL
MySQL je multiplatformní databáze. Komunikace s ní probíhá, jak už název napovídá, pomocí jazyka SQL. Podobně jako u ostatních SQL databází se jedná o dialekt tohoto jazyka s některými rozšířeními. Pro svou snadnou implementovatelnost (lze jej instalovat na Linux, MS Windows, ale i další operační systémy), výkon a především díky tomu, že se jedná
16
o volně šiřitelný software, má vysoký podíl na v současné době používaných databázích. Velmi oblíbená a často nasazovaná je kombinace MySQL, PHP a Apache jako základní software webového serveru („technologie LAMP“)
[15]
. MySQL bylo od počátku
optimalizováno především na rychlost, a to i za cenu některých zjednodušení: má jen jednoduché způsoby zálohování a až donedávna nepodporovalo pohledy, triggery a uložené procedury. Tyto vlastnosti jsou doplňovány teprve v posledních letech, kdy začaly nejčastějším uživatelům produktu, programátorům webových stránek, již poněkud scházet.
Obr. 6: Logo databázového systému MySQL [15]
MySQL Administrator MySQL Administrator je všestranný nástroj, který pomáhá při vyřizování nejrůznějších operací při správě serveru MySQL
[2]
. Dokáže například provádět následující
operace: •
Spuštění a zastavení serveru
•
Konfigurace serveru
•
Zjišťování aktuálního stavu serveru
•
Spuštění správy uživatelů (Správa přístupových práv)
•
Prohlížení souborů protokolů
•
Zálohování a obnovení databáze ze zálohy
•
Vytvoření a správa databází
Ovládání programu není nijak složité, přesto předpokládá alespoň základní znalosti správy MySQL. Program MySQL Administrator používá řada vývojářů v jazyce PHP pouze k vytvoření a správě databáze či tabulek. Databáze program označuje slovem Schemas.
MySQL Query Browser MySQL Query Browser pomáhá při používání příkazů jazyka SQL a u verze MySQL 5.0 a vyšší také při vývoji a testování uložených procedur (stored procedures)
[2]
. Výsledky
příkazů jazyka SQL se zobrazují v tabulkách. U jednoduchých dotazů (např. SELECT *
17
FROM tabulka) lze měnit jednotlivé záznamy přímo v tabulce, popřípadě do tabulky
přidávat nové záznamy. MySQL Query Browser je do značné míry výsledkem zpětné vazby získané od mnoha uživatelů po dobu několika let [2].
3.2.3 SQLite SQLite je relační databázový systém obsažený v relativně malé knihovně napsané v C. Je vyvíjen D. Richardem Hippem a šířen pod licencí public domain. Na rozdíl od databází založených na principu klient-server, kde je databázový server spuštěn jako samostatný proces, je SQLite pouze malá knihovna, která se přilinkuje k aplikaci a pomocí jednoduchého rozhraní ji lze začít využívat. Každá databáze je uložena v samostatném souboru .dbm (Database Manager), kde se data ukládají za použití jednoduchého primárního klíče do stejně velkých bloků a používá hašovacích technik pro rychlý přístup k datům při vyhledávání podle klíče [25]. V SQLite je implementován téměř celý standard SQL92. Databázi SQLite lze použít například v programovacích jazycích C, C++, Delphi, Java, Lua, PHP, Python, Perl, Ruby, Tcl. Předkompilované binární kódy jsou k dispozici pro Linux, Mac OS X a Windows.
Obr. 7: Logo databázového systému SQLite [26]
3.3 PROSTOROVÁ NADSTAVBA DATABÁZE Rozšíření standardních databází o možnosti nativního ukládání geometrických vlastností objektů a „aktivní“ práci s nimi.
3.3.1 PostGIS PostGIS je open source software, který přidává podporu pro geografické objekty objektově - relačnímu databázovému systému PostgreSQL. PostGIS implementuje specifikaci "Simple Features for SQL" (standard, který specifikuje uložení geografických dat v digitální podobě) konsorcia Open Geospatial Consortium (OGC - mezinárodní standardizační organizace založené na dobrovolné shodě). První verze byla vydána v roce 2001 společností
18
Refractions
Research
pod
licencí
GNU
General
Public
Licence
[18]
.
Dostupný
z http://postgis.refractions.net/download/
Obr. 8: Logo prostorové nadstavby PostGIS [22]
3.3.2 MyGIS MySQL realizuje prostorové rozšíření specifikace Open Geospatial Consortium (OGC). Podporuje prostorové rozšíření umožňující vznik, skladování a analýzu geografických vlastností. Do verze MySQL 5.0.16 jsou tyto funkce dostupné jen pro tabulky MyISAM. Verze MySQL 5.0.16 podporuje už také InnoDB, NDB, BDB a ARCHIVE pro prostorové funkce. MySQL podporuje formáty WKT a WKB. Well-known text (WKT) formát geometrie je určen pro výměnu dat geometrie ve formě ASCII. WKB se používá k výměně dat geometrie jako binární proudy zastoupené BLOB hodnotami, které obsahují geometrické WKB
informace.
Podrobná
dokumentace
je
dostupná
na
http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
3.3.3 SpatiaLite Prostorové rozšíření SpatiaLite umožňuje ukládat v databázi SQLite geoprostorová data - podobně jako např. PostGIS pro databázový systém PostgreSQL
[12]
. Je vyvíjen
a udržován Alessandrem Furierim. SpatiaLite podědilo po svém rodiči veškeré dobré vlastnosti: •
jednoduchost,
•
robustnost,
•
veškerá data jsou ukládána do jednoho souboru,
•
nezávislost na platformě. SpatiaLite v současnosti podporuje formáty WKT a WKB. Implementovány jsou také
některé SQL prostorové funkce jako AsText(), GeomFromText(), Area(), PointN() a podobně. Dokumentace a instalační soubory jsou dostupné na http://www.gaia-gis.it/spatialite/
19
Obr. 9: Logo prostorové nadstavby SpatiaLite [12]
3.3.4 JanGeoDB JanGeoDB je určena k uložení vektorové reprezentace geodat. Jedná se o nativní geodatabází systému Janitor. Janitor pracuje s různými formáty dat. Každý z nich má svá omezení nebo není zcela otevřený. Bylo proto přikročeno k vytvoření vlastní geodatabáze Janitoru - jangeodatabáze (zkráceně JanGeoDB)
[5]
. Relační model JanGeoDB byl vytvořen
na základě zkušeností. Základní požadavky na JanGeoDB: Ukládat jednotlivé objekty jako tvary - tj. body, linie a polygony. Tvary sdružovat do vrstev. Tvar nemusí být v žádné vrstvě, ale může být také ve více vrstvách. Vrstva má atributovou tabulku s tématickými informacemi o tvarech, které obsahuje. Geometrická informace o tvaruje je v určité projekci. Tvary v jedné vrstvě musí mít stejnou projekci. Projekce je definovaná pro nějaké území.
20
Obr. 10: Ukázka relačního datového modelu JanGeoDB [5]
VOLBA DBMS A SPECIFIKACE DATOVÝCH TYPŮ
Pro volbu DBMS byly stanoveny tyto požadavky: - jednoduchost, aby jeho použití neodrazovalo potenciální uživatele, kteří nemusí být právě počítačovými experty, - rozšířenost, aby měl dobrou podporu, jistou budoucnost a uživatelé s ním měli dostatek zkušeností,
21
- poskytnutí nástrojů pro udržení referenční integrity, - možnost naprogramovat dodatečnou funkcionalitu v rámci DBMS. Zvolen byl systém MySQL. A to s tím, že MySQL bude pilotní implementací, která bude později převedena i do jiných DBMS
[5]
. Uživatel Janitoru si pak bude moci vybrat
DBMS, podle svých vlastních preferencí. Vývoj JanGeoDB byl pozastaven a nahrazen MyGIS. V současnosti je součástí projektu Survey systému Janitor.
3.4 DALŠÍ SOFTWAROVÁ ŘEŠENÍ Pro testování přístupu k databázím a pro využití dat v geodatabázi byly použity další nástroje a programy.
3.4.1 Janitor Janitor je prostorově orientovaný systém, umožňující pořizování a zpracování dat s územní vazbou, orientovaný na operační systém Windows. Systém je vyvíjen na Laboratoři GIS v CENIA (Česká informační agentura životního prostředí). Program je napsaný v jazyce C++ a je určený k získávání, organizaci, správě a analýze dat. Je tvořen samostatně pracujícími a vzájemně propojitelnými aplikacemi (JanMap, JanDat, DataBuilder, ConnAdmin, FieldGIS, JanIRS, SQLTools). Aplikace jsou postaveny tak, aby umožnily sběr dat v terénu včetně jejich prostorového určení, vedení datového skladu, zakládání a import, jak prostorových, tak ostatních dat a jejich editaci, tvorbu a modifikaci formulářů a sestav, výstupy. Základem systému je otevřená technologie umožňující tvorbu formulářů k zadávání a správě dat, včetně podpory ukládání prostorových dat (GIS). Janitor pracuje s daty uloženými v prostředí podporovaných databázových serverů (PostgreSQL, MySQL) a využívá dotazovací jazyk SQL92, včetně modifikací daného databázového stroje. Janitor umožňuje zobrazit datové soubory s prostorovou orientací (mapová projekce, zeměpisné souřadnice) v GIS aplikaci JanMap a publikovat pomocí formulářů a dokumentů vytvořených pomocí nástroje DataBuilder
[14]
. Poslední zatím dostupná verze je verze Janitor 2.5.1. Dokumentace
a instalační soubory jsou dostupné na http://www.janitor.cenia.cz/ JanMap byl používán pro zobrazování a import vrstev. Tento software dokáže zobrazovat vrstvy z PostGIS i MyGIS, a také umí do obou databází importovat (platilo do
22
verze PostgreSQL 8.2 - stávající verze nepodporují import pro změnu struktury knihovny v PostgreSQL). Pomocí SQLTools je možné se na obě databáze dotazovat. Aby se vrstvy mnou vytvořené mohly do JanMapu načíst, bylo třeba vložit do tabulky geometry_columns v PostGIS a MyGIS záznamy (INSERT) o vytvořených tabulkách (postup pro PostGIS viz. kap. 3.4.2). Ukázka kódu v MyGIS: 1
MkINgeometry_columns: INSERT INTO geometry_columns(
F_TABLE_NAME, F_GEOMETRY_COLUMN, COORD_DIMENSION, SRID, TYPE) VALUES ('t1', 'geometry', 3, 1, 'POINT');
Pro načtení vrstev se vybere z nabídky SOUBOR položka PŘIPOJENÍ KE GEODATABÁZÍM, nastaví se OGR připojení na konkrétní databázi a poté už si stačí jen vybrat, které vrstvy chceme načíst.
Obr. 11: Logo systému Janitor [13]
3.4.2 Quantum GIS (QGIS) Quantum GIS (QGIS) je uživatelsky přívětivý Open Source geografický informační systém (GIS) pod licencí GNU General Public Licence
[21]
. QGIS je oficiálním projektem
Open Source Geospatial Foundation (OSGeo). Běží na Linux, Unix, Mac OS X a Windows a podporuje řadu vektorových, rastrových a databázových formátů a funkcí. Základní možnosti programu rozšiřují zásuvné moduly. Pomocí nich se dá například importovat shapefile do PostgreSQL, vytvořit mapfile pro UMN MapServer, připojit si WFS či využít QGIS jako grafické rozhraní pro funkce softwaru GRASS
[22]
. Lze nahrávat vrstvy
z PostGIS a SpatiaLite. Poslední dostupná verze QGIS je 1.4.0 „Enceladus“. Instalační soubory dostupné z http://qgis.org/en/download.html 1
MkINgeometry_columns je označení kódu, podle kterého jej můžeme najít na CD přiloženému k bakalářské práci. Všechny SQL kódy v této práci jsou označeny stejným způsobem: M – název databáze (M – MyGIS, P – PostGIS, S – SpatiaLite)k(kód)IN – zkratka příkazu (INSERT)geometry_columns
23
Obr. 12: Logo systému Quantum GIS [21]
Tento software byl používán pro zobrazování vrstev vytvořených v PostGIS a SpatiaLite, a také pro importování shapefilů do databáze PostgreSQL. Pro načtení vytvořených vrstev do QGIS, bylo potřeba do tabulky geometry_columns v PostGIS vložit záznamy (INSERT) o vytvořených tabulkách. Stejnou věc bylo nutné provést i v SpatiaLite. Ukázky kódů v PostGIS a SpatiaLite: PkINgeometry_columns: INSERT INTO geometry_columns(
f_table_catalog,
f_table_schema,
f_table_name,
f_geometry_column,
coord_dimension, srid, "type") VALUES ('', 'public', 'T2', 'geometry', 2, -1, 'LINESTRING');
SkINgeometry_columns: INSERT INTO "geometry_columns"
VALUES ('T1', 'geometry', 'POINT', 2, 4156, 0);
Dále už stačilo pouze spustit program, vybrat Přidat vrstvu z PostGIS nebo SpatiaLite, nastavit připojení k databázi, připojit, a poté už jen vybrat z nabídky vrstev tu, kterou chceme zobrazit. Na obrázku č.13 níže je nástroj pro import shapefilů do databáze PostgreSQL, označen na liště nástrojů jako modrý slon. Po spuštění tohoto nástroje se musí nastavit připojení ke konkrétní databázi a přidat shapefile z pevného disku, který chceme do databáze importovat.
24
Obr. 13: Nástroj na import shapefilů do PostGIS
3.4.3 FWTools Shell FWTools je sada open source programů pro geografické informační systémy vytvořená Frankem Warmerdamem (iniciály FW)
[8]
. Tato sada nástrojů je vyrobena pro
platformy Microsoft Windows a Linux a obsahuje několik balíčků (OpenEV, GDAL/OGR, MapServer, PROJ.4, OGDI, Python). FWTools Shell je nástroj pro řízení dat. Jde o příkazový řádek pro zadávání FWTools příkazů.
Obr. 14: Ukázka příkazového řádku FWTools Shell s kódem OGR nástroje ogrinfo
25
3.4.4 OpenEV OpenEV je výkonný open source desktopový prohlížeč. Umožňuje uživatelům zkoumat údaje v některém z obrazových a vektorových datových formátů podporovaných Geospatial Data Abstraction Library (GDAL/OGR). OpenEV je dobrým příkladem toho, jak jsou GDAL/OGR schopnosti přístupné prostřednictvím jiných programovacích jazyků. OpenEV je založen na užívaní Pythonu, který dělá OpenEV rozšiřitelným a silným, protože má větší flexibilitu tohoto jazyka běžícího za ním
[3]
. Nejsilnějším rysem OpenEV může být jeho schopnost používat Python schopností
v rámci OpenEV, což umožňuje přístup k GDAL/OGR funkcím a mnoho dalších Python modulů, které jsou potřeba.
Obr. 15: Software OpenEV s GDAL nástrojem gdal_translate
3.4.5 GDAL (Geospatial Data Abstraction Library) je knihovna určená pro čtení a zápis rastrových GIS formátů. Knihovna je vyvíjena pod hlavičkou Open Source Geospatial Foundation a vydávána pod licencí X/MIT
[9]
. Knihovna používá jednoduchý abstraktní
datový model pro všechny podporované datové formáty. Kromě toho nabízí také řadu užitečných nástrojů pro příkazovou řádku určených pro konverzi a zpracování dat.
26
Obr. 16: Logo knihovny GDAL [9]
GDAL byla původně vyvíjena Frankem Warmerdamem a to do verze 1.3.2, posléze byla tato role oficiálně převedena na GDAL/OGR Project Management Committee, která je součástí Open Source Geospatial Foundation [10]. GDAL je součástí balíčku FWTools. GDAL (často nazývaný goodle) má tři důležité funkce: 1) podporuje více než 40 různých rastrových formátů. 2) je k dispozici k použití pro další aplikace. Jakékoliv aplikace využívající GDAL knihovny, mají přístup všech podporovaných formátů, takže vlastní programování pro každý požadovaný formát je zbytečné. 3) předkompilované nástroje pomohou využít funkce GDAL programové knihovny, tudíž není třeba napsat svůj vlastní program [3]. GDAL podporuje desítky rastrových formátů, seznam je uveden v Příloze 1. Tento seznam je převzat z webových stránek GDAL http://www.gdal.org/formats_list.html
PROGRAMOVACÍ KNIHOVNY
Důležitý rys GDAL je jeho dostupnost jako soubor programovacích knihoven. Vývojáři používající různé jazyky, mohou využít výhody GDAL, která jim dává více času soustředit se na jiné úkoly. Vlastní programování pro podporu formátů již k dispozici díky GDAL není nutné: znovu použitelnost je hlavní síla GDAL. Schopnost přímého spojení s GDAL knihovnami pomohlo přidat nové funkce do řady GISových a vizualizačních programů, komerčních i open source
[3]
. GDAL internetové
stránky uvádí několik projektů, které využívají GDAL, včetně FME, MapServer, GRASS, Quantum GIS, Cadcorp SIS terénu a Virtual Terezin Project.
GDAL NÁSTROJE
•
gdalinfo - vypíše informace o rastrovém souboru (metadata)
Ukázka kódu zadávaného pomocí příkazového řádku:
27
C:\Documents and Settings\Administrator>gdalwin321.6\bin\gdalinfo \dataBP\stin_ter.tif
•
gdal_translate - vytvoří kopii souboru s danými parametry výstupu
Ukázka kódu zadávaného pomocí příkazového řádku: C:\Documents and Settings\Administrator>gdalwin321.6\bin\gdal_translate -of "JPEG" \dataBP\stin_ter.tif \dataBP\stin_teren.jpg
- ze souboru ve formátu .tif vytvoří jeho kopii ve formátu .jpg. •
gdalwarp - transformuje obrazová data do cílového souřadnicového systému
•
gdaladdo - přidá pohledy (overlays) do rastrového souboru
•
gdaltindex - vytvoří “tileindex” pro UMN Mapserver
•
gdal_contour - vytvoří vrstevnice z DEM (digitální výškový model)
•
rgb2pct.py - konvertuje data z 24-bitové do 8-bitové RGB palety
•
pct2rgb.py - konvertuje data z 8-bitové do 24-bitové RGB palety
•
gdal_merge.py - sestaví mozaiku z několika obrazových souborů
•
gdal2tiles.py - vytvoří TMS dlaždice
•
gdal_rasterize - rasterizuje vektorová data
•
gdaltransform - transformuje souřadnice
•
nearblack - převede barevné hodnoty blízké černé či bílé na danou hodnotu
•
gdal_retile.py - vytvoří dlaždice a sestaví pyramidy
•
gdal_grid - vytvoří rastrový soubor z bodových dat
•
gdal_config - konfigurační nástroj knihovny
3.4.6 OGR Simple Features Library je C++ open-source knihovna (a příkazový řádek) poskytující čtení (a někdy i zápis), přístup do různých formátů vektorových souborů včetně ESRI shapefiles, S-57, SDTS, PostGIS, Oracle Spatial, Mapinfo mid/mif a TAB formátů. OGR je součástí knihovny GDAL [16]. OGR je součástí balíčku FWTools. OGR podporuje více než 16 vektorových formátů, seznam je převzat z webových stránek OGR http://www.gdal.org/ogr/ogr_formats.html a uveden v Příloze 2. OGR obsahuje nástroje podobné GDAL rastrovým nástrojům [3]. OGR je součástí GDAL/OGR projektu.
28
OGR NÁSTROJE
Stejně jako GDAL, OGR obsahuje sadu knihoven, které mohou být použity v aplikacích. OGR také přichází s několika užitečnými nástroji: •
ogrinfo - vypíše informace o vektorovém souboru (metadata)
Ukázky kódů (zadávaných pomocí FWTools Shell): >ogrinfo
"PG:dbname=prostorova
user=postgres
password=libor
host=localhost port=5432" ctverce
- zobrazí informace o vrstvě ctverce v databázi v PostgreSQL >ogrinfo \dataBP obojzivelnici -where "poznamka='juvenilní'"
- zobrazí informace o vybraných prvcích a prvky z vrstvy obojzivelnici, které odpovídají podmínce –where >ogrinfo
\dataBP
obojzivelnici
-sql
"select
id_tax
from
obojzivelnici where id_tax = 'Salamandra salamandra'"
- zobrazí informace o vybraných prvcích a prvky z vrstvy obojzivelnici, které odpovídají sql dotazu •
ogr2ogr - vytvoří kopii souboru s danými parametry výstupu
Ukázky kódů: >ogr2ogr -f "ESRI Shapefile" c:\silnice.shp "PG:dbname=prostorova user=postgres password=libor host=localhost port=5432" silnice
- vytvoří shapefile silnice.shp z tabulky silnice v PostgreSQL databázi prostorova >ogr2ogr
-f
"PostgreSQL"
"PG:dbname=prostorova
user=postgres
password=libor host=localhost port=5432" \dataBP\q04_71.shp -nln ctverce
- vloží shapefile q04_71.shp do databáze prostorova a vytvořenou tabulku pojmenuje (nln) ctverce •
ogrtindex - vytvoří “tileindex” pro UMN Mapserver
OGR, jako GDAL, pomáhá v přístupu, konverzi a manipulaci s daty, konkrétně vektorových dat. OGR lze použít také se skriptovacími jazyky, což umožňuje programovou práci s daty
[3]
. GDAL/OGR balíky obvykle přicházejí s OGR moduly pro Python. Kromě
Pythonu také existuje podpora Java a C # pro GDAL/OGR.
3.4.7 shp2pgsql PostGIS přichází s nástroji pro příkazový řádek s názvem pgsql2shp a shp2pgsql. Ty mohou být použity pro konverzi z PostGIS tabulky do formátu shapefile a zpět. 29
Nástroj shp2pgsql převádí tvary do textové podoby SQL příkazů. Je nutné předat je do textového souboru pro pozdější načítání nebo je psql příkazem používat okamžitě. Původní nastavení ukládá geometrická data do pole the_geom. # shp2pgsql silnice_chkobk.shp public.silnice > cesty.sql # psql -d postgisdatabase -f cesty.sql
Verze PostGIS 1.5 obsahuje shp2pgsql – GUI, který se jmenuje Shape File to PostGIS Importer, kterým se lze jednoduše připojit k databázi PostgreSQL a nahrát do ní vlastní shapefile.
Obr. 17: Nástroj pro import shapefilů do PostGIS
30
3.5 ULOŽENÍ DAT V GEODATABÁZI Simple Features jsou OpenGIS standard (verze 1.2.0), který specifikuje digitální ukládání geografických dat (bod, linie, polygon, multi-bod, multi-linie, atd.), jak s prostorovými, tak i s neprostorovými atributy
[23]
. Simple Features jsou založeny na 2D geometrii s lineární
interpolací mezi vrcholy. Obecně platí, že 2D geometrie je jednoduchá, neobsahuje-li překřížení prvku sebe samým. OpenGIS Simple Features specifikace definuje různé prostorové subjekty, které mohou být použity k vytvoření nové geometrie z existující geometrie. Plné znění standardu je dostupné na http://www.opengeospatial.org/standards/sfa. Definuje dva formáty pro popis geografických dat (WKT a WKB).
3.5.1 Well-known text (WKT) je textový značkovací jazyk určený pro popis vektorové geometrie
geografických
objektů,
prostorových
referenčních
systémů,
popřípadě
transformačních parametrů mezi jednotlivými souřadnicovými systémy. 1) geometrické objekty Geometrické objekty, které lze pomocí WKT popsat jsou: •
body,
•
linie,
•
polygony,
•
TIN,
•
polyhedrony.
Multigeometrické typy dovolují použít v jednom objektu více geometrických typů stejné dimenze. Pro uložení geometrie různých dimenzí slouží kolekce geometrie. Souřadnice mohou být 2D (x, y), 3D (x, y, z), 4D (x, y, z, m), kde m je hodnota lineárního referenčního systému nebo 2D s hodnotou m (x, y, m). Klíčové slovo EMPTY definuje tzv. "prázdnou" geometrii. Prvek, který neobsahuje žádné lomové body (souřadnice). Zápis ve formě WKT je často používán v OGC specifikacích, PostGIS například obsahuje funkce pro konverzi geometrie z/do formy WKT. Příklad geometrie zapsané ve formě WKT: POINT(6 10) LINESTRING(3 4,10 50,20 25) POLYGON((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)) MULTIPOINT(3.5 5.6,4.8 10.5) MULTILINESTRING((3 4,10 50,20 25),(-5 -8,-10 -8,-15 -4))
31
MULTIPOLYGON(((1 1,5 1,5 5,1 5,1 1),(2 2, 3 2, 3 3, 2 3,2 2)),((3 3,6 2,6 4,3 3))) GEOMETRYCOLLECTION(POINT(4 6),LINESTRING(4 6,7 10))
2) prostorové referenční systémy Prostorový referenční systém obsahuje v zápisu WKT informace o geodetickém datu, geoidu, souřadnicovém systému a kartografickém zobrazení. WKT je používán řadou GIS aplikací a knihoven, např. ESRI používá WKT ve formátu Shapefile (soubor *.prj). Příklad definice systému S-JTSK ve formě WKT: PROJCS["krovak", GEOGCS["bessel", DATUM["unknown", SPHEROID["Bessel_1841",6377397.155,299.1528128], TOWGS84[570.8,85.7,462.8,4.998,1.587,5.261,3.56]], PRIMEM["Greenwich",0], UNIT["degree",0.0174532925199433]], PROJECTION["Krovak"], PARAMETER["latitude_of_center",0], PARAMETER["longitude_of_center",0], PARAMETER["azimuth",0], PARAMETER["pseudo_standard_parallel_1",0], PARAMETER["scale_factor",1], PARAMETER["false_easting",0], PARAMETER["false_northing",0], UNIT["meter",1]]
3) transformace Formát WKT může popisovat metodu transformace a transformační parametry pro konverzi mezi dvěma prostorovými souřadnicovými systémy.
Databáze podporující WKT: MySQL, PostgreSQL s PostGIS, SQLite se SpatiaLite, Oracle, MS SQL Server.
3.5.2 Well-known binary (WKB) binární forma používaná pro převod a uložení informací v databázovém systému jako je např. PostGIS. Formát je kontrolován konsorciem Open 32
Geospatial Consortium (OGC) a popsán ve specifikacích Simple Feature Access a Coordinate Transformation Service. Všechny souřadnice se zde ukládají jako hodnoty Double precision (64bitové číslo s plovoucí desetinnou čárkou) Příklad geometrie zapsané ve formě WKB: 0101000000000000000000F03F000000000000F03F
Hodnota odpovídá hodnotě POINT(1 1) ve formátu WKT.
Pozn. Rastrová data se ukládají jako Binary large object (BLOB), je označení pro datový typ blíže nespecifikovaných binárních dat v databázi. Obvykle se jedná o obrázky, zvukové záznamy nebo jakákoli jiná data, která jinak bývají uložena v samostatných souborech
[7]
.
BLOB je tedy obecný datový typ, který explicitně vyjadřuje, že databáze nemá informace o tom, jak jeho obsah interpretovat. Na rozdíl od jiných datových typů, kdy databáze může číselné a časové údaje poskytovat ve vhodném formátu, případně textové údaje konvertovat do požadované kódové stránky, obsah BLOB položky obdrží klientská aplikace přesně tak, jak byl binárně uložen a o interpretaci se musí postarat sama.
3.6 JAZYK SQL Jazyk SQL je standardním neprocedurálním relačním dotazovacím jazykem, podporovaným většinou dostupných databázových systémů. SQL je zkratka anglických slov Structured Query Language (strukturovaný dotazovací jazyk). Příkazy jazyka SQL obecně umožňují úplnou kontrolu nad systémem řízení báze dat. Podle svého účelu se dělí do následujících skupin: •
Příkazy pro manipulaci s daty (SELECT, INSERT, UPDATE, DELETE, …). Jsou to příkazy pro získání dat z databáze a pro jejich úpravy. Označují se zkráceně
DML – Data Manipulation Language („jazyk pro manipulaci s daty“). •
Příkazy pro definici dat (CREATE, ALTER, DROP, …). Těmito příkazy se vytvářejí struktury databáze – tabulky, indexy, pohledy a další
objekty. Vytvořené struktury lze také upravovat, doplňovat a mazat. Tato skupina příkazů se nazývá zkráceně DDL – Data Definition Language („jazyk pro definici dat“). •
Příkazy pro řízení dat (GRANT, REVOKE, START TRANSACTION, COMMIT, ROLLBACK).
33
Do této skupiny patří příkazy pro nastavování přístupových práv a řízení transakcí. Označují se jako DCL – Data Control Language („jazyk pro ovládání dat“), někdy také TCC – Transaction Control Commands („jazyk pro ovládání transakcí“).
Pozn. Úlohy v této bakalářské práci se týkají pouze prvních dvou skupin příkazů jazyka SQL.
3.6.1 Spatial SQL (Prostorové SQL) Prostorové databáze jsou databáze kombinující konvenční a prostorová data (tedy data vztahující se k poloze objektů, jejich velikosti atd.) [28]. V aplikacích využívajících prostorové informace, jako jsou různé geografické informační systémy (GIS) či CAD/CAM systémy, tedy vznikla potřeba vhodného dotazovacího jazyka, který by umožňoval pokládat: •
dotazy pouze na prostorové vlastnosti (vypiš města vzdálená od Prahy méně než 20 km)
•
dotazy pouze na neprostorové vlastnosti (kolik lidí žije v Olomouci)
•
dotazy kombinující oboje vlastnosti (vypiš počty dětí všech majitelů pozemků sousedících s parcelou č. 10) Použití běžných relačních dotazovacích jazyků pro zpracování dotazů na prostorová
data je velmi obtížné, neboť tyto jazyky nemají pro prostorová data žádnou podporu (predikáty, operace) a neměly ani žádný vhodný datový typ (až do vzniku konceptu ADT) a tudíž data musela být ukládána do číselných a řetězcových proměnných, a proto musel uživatel přesně znát strukturu uložení prostorových dat. V některých komerčních systémech se ovšem tento způsob udržel do dneška jen s tím rozdílem, že dnes již obsahují specializované funkce a predikáty pro prostorové operace. Bylo tedy třeba navrhnout dotazovací jazyk, který by poskytoval jednoduché, intuitivní a snadno použitelné rozhraní pro dotazy i editaci obou druhů dat. Vzhledem k výše uvedenému se jako rozumné jevilo rozšířit funkcionalitu SQL o práci s prostorovými daty.
Tento jazyk byl navržen v r. 1994 J. Egenhoferem, aby odstranil nedostatky konvenčních databázových jazyků. Stejně jako v klasickém SQL se pracuje s příkazy ve formátu SELECT - FROM - WHERE, výsledky dotazů jsou relace. Spatial SQL neobsahuje funkcionalitu pro editování dat.
34
PROSTOROVÁ DOMÉNA
K doménám SQL byla přidána nová doména "spatial" (prostorový) pro zajištění vysoké úrovně abstrakce prostorových dat [28]. K této doméně patří řada prostorových operací a predikátů, které budou zmíněny později. Zmíněná doména se dělí ještě na 4 poddomény "spatial_0", "spatial_1", "spatial_2", "spatial_3" pro objekty příslušných dimenzí (tedy spatial_0 pro 0-rozměrné objekty - body, atd.). Atribut z domény spatial se nazývá spatial atribut (prostorový atribut) a relace s tímto atributem spatial relation (prostorová relace).
PROSTOROVÉ OPERACE
Prostorové operace můžeme chápat jako funkce na prostorových objektech. Můžeme je rozdělit na: •
Unární prostorové operátory přistupují k jedné prostorové položce prostorové relace. o
Topologické unární operátory - určují dimenzi, hranici a vnitřek objektu, tedy:
dimension - dimenze objektu (0 pro body, 1 pro přímky/úsečky atd.)
boundary - hranice objektu.
interior - celý objekt mimo svou hranici (doslovně "všechny části
objektu, které nejsou v jeho hranici") Tyto operátory mají specializované varianty pro jednotlivé dimenze (třeba plocha má definovány operace boundingNodes a boundingEdges - pro určení ohraničujících bodů / úseček), pro 1D a 2D objekty jsou definovány boundary,
boundingNodes,
boundingEdges,
interior,
interiorNodes, interiorEdges, interiorAreas. o
Druhá skupina unárních operátorů - aritmetické operace. Tyto závisí na dimenzi objektu.
o
lenght (délka) pro 1D objekty
area (plocha) pro 2D objekty
volume (objem) pro 3D objekty
Kombinací topologických a aritmetických vlastností lze získat složitější operátory:
perimeter (obvod) pro mnohoúhelník
extreme
coordinates
(extrémní
souřadnice),
(doplněk) a convex hull (konvexní obal)
35
complement
•
Binární prostorové operátory počítají hodnotu ze dvou prostorových položek prostorové relace. o
distance (vzdálenost) - výsledkem je nezáporné reálné číslo
o
direction (směr) - úhel udávající azimut; tyto mohou být porovnávány
a odečítány k zjištění úhlu jimi sevřeného. Na výsledky těchto operací lze používat standardní agregační funkce SQL (min, avg).
Prostorové operátory se zapisují v prefixové notaci - jako funkce (př. distance(potok.geometry, silnice.geometry)). Operátory se mohou vyskytnout
v SELECT klauzuli, či v libovolné WHERE klauzuli jako část neprostorového predikátu. Tedy mohou se v dotazech používat na stejných místech jako agregační funkce.
PROSTOROVÉ PREDIKÁTY
Prostorové predikáty (spatial relationships) jsou relace (v matematickém smyslu) mezi dvěma prostorovými atributy - jejich výsledkem je tedy Boolean hodnota a mohou být přímo použity jako predikáty v klauzuli WHERE. Tyto predikáty se zapisují stejně jako ostatní v SQL - infixově; jsou definovány přímo nad generalizovanou doménou spatial. •
Binární topologické predikáty jsou založeny na množině průniků hranic a vnitřků dvou objektů - tyto specifikace jsou nezávislé na dimenzi a predikáty mohou být použity na dva objekty libovolných dimenzí. o
disjoint (disjunktnost objektů)
o
meet
o
overlap
o
inside/contains
o
covers/coveredBy
o
equal (totožnost objektů)
Tyto predikáty byly do Spatial SQL začleněny pro zvýšení úrovně abstrakce, aby uživatel nemusel mít matematické znalosti. V závislosti na zvoleném uspořádání lze také používat predikáty left/right, north/south či over/under.
DEFINICE TABULEK S PROSTOROVÝMI DATY
Obdobně jako v klasickém SQL. Příklad 1. - definice tabulky mesta s řetězcovým atributem jmeno a prostorovým obsazenyProstor (zde město chápeme jako 2D objekt).
36
CREATE TABLE mesta (jmeno char(20) obsazenyProstor spatial_2);
Příklad 2. - Může být užitečné definovat město jako mnohoúhelník (obsazenyProstor) na podrobných mapách, nebo jako bod (poloha) na méně podrobných. CREATE TABLE city (jmeno char(20) obsazenyProstor spatial_2 poloha spatial_0);
VÝBĚR UKÁZÁNÍM – PREDIKÁT PICK
Predikát PICK umožňuje uživateli formulovat dotazy s referencí na prostorové objekty viditelné na obrazovce. Tento predikát může kvalifikovat každý prostorový atribut ve WHERE klausuli. Sémantika výběru závisí na prostorové dimenzi cíle - při odkazování na objekty vykreslené v 2D plánu. Cílem je buď 0 či 1-rozměrný objekt nejblíže ukázání a nebo 2D objekt, který místo ukázání obsahuje. Nejasnosti jsou řešeny dle toho, jaký typ objektu uživatel v dotazu používá. Jsou-li dva objekty požadovaného typu od ukázání stejně daleko (řídký případ), je uživateli nabídnut seznam možností, ze kterého může zvolit.
Příklad 1. - mapa států s hranicemi a velkými městy (tyto znázorněny body), uživatel se ptá na jméno města na které kliknul. SELECT jmeno FROM mesta WHERE poloha = PICK;
Příklad 2. - ukáže-li uživatel na stejné místo a zadá následující dotaz, dostane název příslušného státu. SELECT jmeno FROM staty WHERE poloha = PICK;
37
4. VSTUP A SPRÁVA GEOOBJEKTŮ 4.1 Vytvoření databáze (CREATE DATABASE) Prvním krokem při zakládání databáze je vytvoření nové prázdné prostorové databáze, do které později přibudou nové tabulky se záznamy, které můžeme vkládat, upravovat a dotazovat se na ně.
PostGIS: Existují dvě možnosti, jak vytvořit databázi v pgAdminIII. První možností je tlačítko pro SQL dotazy na liště nástrojů. Toto tlačítko není aktivní pokud neklikneme na některou již vytvořenou databázi.
Obr. 18: Prostředí pgAdminIII s aktivním tlačítkem pro SQL dotazy
Po kliknutí na toto tlačítko se otevře nové okno pro dotazování (Query), zde se zadá příkaz CREATE DATABASE. Druhou možností je kliknout pravým tlačítkem na Databáze ve Stromu objektů nebo na záložku Upravit – Nový objekt a zvolit NOVÁ DATABÁZE. V obou případech se otevře dialogové okno, ve kterém si lze navolit parametry nové databáze. Chceme vytvořit prostorovou databázi, která se bude jmenovat postgisdatabase, kódování bude UTF8 a bude vytvořena podle šablony template_postgis, která zaručí, že se jedná o prostorovou databázi a bude mít vytvořeny zásadní tabulky spatial_ref_sys a geometry_columns. Ukázka kódu, který lze zadat do okna pro SQL dotazování: PkCD: CREATE DATABASE postgisdatabase
WITH ENCODING='UTF8' TEMPLATE=template_postgis CONNECTION LIMIT=-1;
38
MyGIS: V MySQL Query Browser se databáze označují jako Schemata. Databázi lze vytvořit tak, že klikneme pravým tlačítkem do záložky Schemata a zvolíme CREATE NEW SCHEMA.
Obr. 19: Nabídka možností v záložce Schemata v nástroji MySQL Query Browser
Poté už stačí novou databázi jenom pojmenovat (mygisdatabase). MySQL nevytvoří do nového schématu metadatové tabulky geometry_columns a spatial_ref_sys. Tyto tabulky se vytvoří pokud do databáze importujeme shapefile nebo si je můžeme vytvořit sami (viz. kap. 4.2) Pokud vytváříme databázi (schéma) pomocí MySQL příkazového řádku zadáme příkaz: MkCD: CREATE DATABASE mygisdatabase;
SpatiaLite: Ve SpatiaLite musíme pro vytvoření databáze zvolit z nabídky FILES položku Creating a New (empty) SQLite DB a nebo tuto položku vybrat přímo z lišty nástrojů.
Obr. 20: Prostředí SpatiaLite se zvýrazněným tlačítkem pro vytvoření databáze
Poté už stačí novou databázi pouze pojmenovat (spatialitedatabase) a vybrat místo na disku, kam ji uložíme. Nově vytvořená databáze už obsahuje metadatové tabulky spatial_ref_sys a geometry_columns.
39
Z tohoto vyplývá, že pouze v PostGIS a MyGIS lze vytvořit databázi pomocí příkazu CREATE DATABASE. Ve SpatiaLite je databáze uložena jako samostatný soubor na disku (spatialitedatabase.sqlite). Nejdéle trvalo vytvoření databáze v PostGIS. Žádné velké časové rozdíly ve vytvoření databáze však v jednotlivých softwarech nejsou.
4.2 Vytvoření tabulky (CREATE TABLE) Předtím než jsou vkládány záznamy do databáze, je nutno si vytvořit tabulky, do kterých se budou záznamy ukládat a přiřadit datové typy jednotlivým atributům tabulky. Chceme vytvořit tabulky T1, T2, T3 a T4, které budou obsahovat atributy Name, ID a geometry. Atributu Name je přiřazen datový typ character (30) a atributu ID datový typ integer, který nesmí být prázdný (NOT NULL). To bude stejné pro všechny databáze. V PostGIS a SpatiaLite je atributu geometry přiřazen datový typ geometry. Toto lze provést i v MyGIS, ale pro ukázku byly vytvořeny tabulky (T1,T2,..) zvlášť s každým datovým typem geometrie (point, linestring, polygon, geometrycollection).
PostGIS: Pomocí pgAdminIII máme dvě možnosti vytvoření tabulky. První možností je tlačítko pro SQL dotazování na liště nástrojů.
Obr. 21: Vytvoření tabulky pomocí nástroje pgAdmin III
40
Tlačítko je aktivní jen pokud je označena databáze, kterou chceme editovat. Po kliknutí se otevře nové okno pro dotazování, zde je zadán příkaz CREATE TABLE. Obrázek č. 21 zobrazuje druhou možnost, což je rozbalit Schémata databáze, kliknout pravým tlačítkem na Tabulky a vybrat NOVÁ TABULKA. Otevře se nové okno, kde je možné, si nastavit potřebné parametry tabulky. Ukázka kódu, který lze zadat do okna pro SQL dotazování: PkCTt1: CREATE TABLE "T1"(
"Name" character(30), "ID" integer NOT NULL, geometry geometry, CONSTRAINT "T1_pkey" PRIMARY KEY ("ID") ) WITH (OIDS=FALSE);
MyGIS: Nástroj MySQLQuery Browser nabízí také dvě možnosti vytvoření tabulky. První možností je „Query Toolbar“, kde lze tabulku vytvořit pomocí SQL příkazu. Druhou možností je kliknout pravým tlačítkem na název databáze, ve výběru vpravo, do které má být tabulka přidána a zvolit CREATE NEW TABLE.
Obr. 22: Vytvoření tabulky pomocí MySQL Query Browseru
Otevře se nové okno (MySQL Table Editor), které je velice intuitivní a srozumitelné a zde tabulku jednoduše vytvoříme. Po potvrzení, že chceme tabulku vytvořit se objeví malé okno
41
s SQL kódem pro vytvoření tabulky. Ten můžeme jednoduše zkopírovat a uložit si ho třeba jako skript pro další použití. Ukázky kódů pro vytvoření tabulek s geometriemi (point, linestring, polygon, geometrycollection): MkCTt1: CREATE TABLE `mygisdatabase`.`t1` (
`Name` CHAR(30), `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `geometry` POINT, PRIMARY KEY(`ID`) ) ENGINE = MYISAM;
MkCTt2: CREATE TABLE `mygisdatabase`.`t2` (
`Name` CHAR(30), `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `geometry` LINESTRING, PRIMARY KEY(`ID`) ) ENGINE = MYISAM;
MkCTt3: CREATE TABLE `mygisdatabase`.`t3` (
`Name` CHAR(30), `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `geometry` POLYGON, PRIMARY KEY(`ID`) ) ENGINE = MYISAM;
MkCTt4: CREATE TABLE `mygisdatabase`.`t4` (
`Name` CHAR(30), `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `geometry` GEOMETRYCOLLECTION, PRIMARY KEY(`ID`) ) ENGINE = MYISAM;
42
SpatiaLite: Tabulku ve SpatiaLite lze vytvořit pouze pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Lze si to ale i trochu zjednodušit, pokud klikneme pravým tlačítkem na databázi a zvolíme CREATE NEW TABLE. Do okna pro SQL dotaz se přidá syntax nápověda pro tento příkaz. Ukázka kódu, který lze zadat do okna pro SQL dotazování: SkCTt1: CREATE TABLE "T1"(
"Name" character(30), "ID" integer NOT NULL, geometry geometry, CONSTRAINT "T1_pkey" PRIMARY KEY ("ID") );
Příkazy jsou ve všech třech databázích velmi podobné. V PostGIS je velmi důležité používat správné uvozovky - " (tedy dvojité, ne‘). V MyGIS se před názvem tabulky udává ještě název databáze (schematu), do kterého se tabulka uloží. Rychlost provedení příkazu v jednotlivých softwarech je velmi rychlá, zabere pár setin sekundy. Nejlépe propracované prostředí pro vytvoření tabulky má dle mého názoru MySQL Query Browser, který používá MySQL Table Editor.
Tyto tabulky jsou dále dostupné pro jakékoliv dotazování pomocí SQL, implementaci do databází a procesů založených na využití pouze jazyka SQL. Pokud chceme uložené záznamy využít v GIS, je přítomnost GDAL/OGR knihovny v softwaru nejčastějším řešením, které zajišťuje import a převedení do GIS formátu. Pro konkrétní chování je nezbytná existence
dalších
dvou
metadatových
tabulek:
SPATIAL_REF_SYS
a GEOMETRY_COLUMNS. V tabulce spatial_ref_sys jsou uložena číselná ID a textové popisy
souřadnicových
systémů
používaných
v
prostorové
databázi
geometry_columns obsahuje informace o sloupcích geometrie geoprvků. Ukázka kódů pro vytvoření metadatových tabulek v PostGIS: PkCTgeometry_columns: CREATE TABLE geometry_columns(
f_table_catalog character varying(256) NOT NULL, f_table_schema character varying(256) NOT NULL, f_table_name character varying(256) NOT NULL, f_geometry_column character varying(256) NOT NULL, coord_dimension integer NOT NULL, srid integer NOT NULL,
43
a
tabulka
"type" character varying(30) NOT NULL, CONSTRAINT geometry_columns_pk PRIMARY KEY ( f_table_catalog, f_table_schema, f_table_name, f_geometry_column) ) WITH (OIDS=TRUE);
PkCTspatial_ref_sys: CREATE TABLE spatial_ref_sys(
srid integer NOT NULL, auth_name character varying(256), auth_srid integer, srtext character varying(2048), proj4text character varying(2048), CONSTRAINT spatial_ref_sys_pkey PRIMARY KEY (srid) ) WITH (OIDS=FALSE);
Kódy pro vytvoření metadatových tabulek v MyGIS: MkCTgeometry_columns: CREATE TABLE geometry_columns (
F_TABLE_CATALOG varchar(256), F_TABLE_SCHEMA varchar(256), F_TABLE_NAME varchar(256), F_GEOMETRY_COLUMN varchar(256), COORD_DIMENSION int(11), SRID int(11), TYPE varchar(256)) TYPE = InnoDB;
MkCTspatial_ref_sys: CREATE TABLE spatial_ref_sys (
SRID int(11), AUTH_NAME varchar(256), AUTH_SRID int(11), SRTEXT varchar(2048)) TYPE = InnoDB;
Pro zobrazení vrstev (vytvořených v geodatabázi) v GIS softwaru (Janitor, QGIS), musí být vlastní prostorová tabulka zaevidována v metadatové tabulce geometry_columns 44
(viz. kapitoly 3.4.1, 3.4.2). Jeden záznam v metadatové tabulce je roven jedné prostorové tabulce.
4.3 Vložení záznamů (INSERT) Příkazem INSERT se vloží do tabulky nový záznam. Za názvem tabulky se nejprve zadává seznam názvů sloupců (není třeba vždy zadávat) a poté seznam vkládaných hodnot. Je možné vložit jeden nebo současně více řádků hodnot (PostGIS, MyGIS). V následujících ukázkách jsou vkládána data do tabulek vytvořených v předchozím kroku. Do každé databáze je do tabulek vložen bod, linie, polygon a kolekce. Kromě geometrických hodnot jsou vkládány hodnoty atributů Name a ID.
PostGIS: V pgAdminIII máme opět dvě možnosti vkládání záznamů. První možností je tlačítko pro SQL dotazování na liště nástrojů. To se zobrazí jen pokud je označena databáze, kterou chceme editovat. To je podobné jako při vytvoření tabulky. Po kliknutí se otevře nové okno pro dotazování, zde se zadá příkaz INSERT. Druhou možností je označit tabulku, do které chceme údaje vkládat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript INSERT. Opět se objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého jen doplníme hodnoty (VALUES) na místo otazníků. Ukázky kódů pro vkládání geoobjektů (bod, linie, polygon, kolekce) v PostGIS: PkINt1: INSERT INTO "T1"
VALUES ('bod1', 3, GEOMFROMTEXT('POINT(72 27)')); PkINt2: INSERT INTO "T2"("Name", "ID", geometry)
VALUES
('linie1',
4,
GEOMFROMTEXT('LINESTRING(6500
3500,
8000
3000)')), ('linie2', 5, GEOMFROMTEXT('LINESTRING(0 0,1 1,2 2,3 3,4 4)')); PkINt3: INSERT INTO "T3"("Name", "ID", geometry)
VALUES
('ctverec2',
2,
GEOMFROMTEXT('POLYGON((7000
2000,5500
2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
PkINt4: INSERT INTO "T4"("Name", "ID", geometry)
45
VALUES
('kolekce1',
6,
GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1
1), LINESTRING(0 4, 4 6, 7 2))'));
MyGIS: V MySQL Query Browser jsou záznamy vkládány přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP). Ukázky kódů pro vkládání geoobjektů (bod, linie, polygon, kolekce) v MyGIS: MkINt1: INSERT INTO t1
VALUES
('bod1',
3,
GEOMFROMTEXT('POINT(72
27)')),('bod2',
2,
GEOMFROMTEXT('POINT(70 40)'));
MkINt2: INSERT INTO t2 (Name, ID, geometry)
VALUES
('linie1',
4,
GEOMFROMTEXT('LINESTRING(6500
3500,
8000
3000)'));
MkINt3: INSERT INTO t3 (Name, ID, geometry)
VALUES
('ctverec2',
2,
GEOMFROMTEXT('POLYGON((7000
2000,5500
2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
MkINt4: INSERT INTO t4 (Name, ID, geometry)
VALUES
('kolekce1',
1,
GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1
1), LINESTRING(0 4, 4 6, 7 2))'));
Pozn. Pokud zadáváme tento příkaz pomocí MySQL příkazového řádku, je potřeba před název tabulky připsat název databáze, ve které se tabulka nachází a uvést názvy sloupců. (např. insert
into
spatialdatabase.t2
(Name,
ID,
geometry)
values
('linie1', 4, geomfromtext('linestring(6500 3500, 8000 3000)'));)
SpatiaLite: Hodnoty záznamů se vkládají do tabulky pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Ukázky kódů, které lze zadat do okna pro SQL dotazování: SkINt1: INSERT INTO "T1"
VALUES ('bod1', 3, GEOMFROMTEXT('POINT(72 27)'));
SkINt2: INSERT INTO "T2"("Name", "ID", geometry)
46
VALUES
('linie1',
4,
GEOMFROMTEXT('LINESTRING(6500
3500,
8000
3000)'));
SkINt3: INSERT INTO "T3"("Name", "ID", geometry)
VALUES
('ctverec2',
2,
GEOMFROMTEXT('POLYGON((7000
2000,5500
2000, 6500 3000, 6500 5000, 7000 5500, 8000 5000, 8500 4000, 8000 3000,8500 2500, 7000 2000))'));
SkINt4: INSERT INTO "T4"("Name", "ID", geometry)
VALUES
('kolekce1',
6,
GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(1
1), LINESTRING(0 4, 4 6, 7 2))'));
Příkazy jsou opět ve všech třech databázích velmi podobné. V PostGIS a SpatiaLite je důležité používat dvojité uvozovky pro název tabulky a názvy atributů, které neobsahují geometrii. Pro textové hodnoty vkládané do tabulky se používají jednoduché uvozovky. V MyGIS se názvy tabulek a atributů do uvozovek nedávají, ale stejně jako v PostGIS a SpatiaLite se používají jednoduché uvozovky pro vkládání textových hodnot. Ve všech třech databázích se příkazy ukončují středníkem. Pomocí funkce konverze formátu geometrie GEOMFROMTEXT se převede hodnota řetězce, ve WKT podobě, do interního formátu geometrie.
4.4 Odstranění záznamů (DELETE) DELETE je syntakticky nejjednodušším příkazem. Je užíván pro mazání záznamů z tabulky. Všechny záznamy vybrané pomocí WHERE se po zadání příkazu DELETE odstraní. Není nutné zde zadávat sloupce, protože se beztoho odstraní celý záznam [2]. Pokud použijeme příkaz DELETE bez podmínky WHERE, odstraní se z tabulky všechny záznamy a tuto akci není možné vrátit zpět. Zůstane pouze tabulka se všemi názvy sloupců atd. Chceme-li odstranit i samotnou tabulku, použijeme příkaz DROP TABLE.
PostGIS: Pomocí pgAdminIII existují opět dvě možnosti mazání záznamů. První možnost je stejná jako pří vytváření tabulky a vložení záznamů, tedy pomocí SQL dotazovacího okna spustitelného pomocí tlačítka na liště nástrojů. Druhou možností je označit tabulku, ze které chceme údaje mazat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript
47
DELETE. Opět se objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého se doplní hodnoty. Celou tabulku můžeme odstranit příkazem DROP TABLE nebo ji označit, kliknout na ni pravým tlačítkem a vybrat ODSTRANIT. Ukázka kódu pro mazání v PostGIS: PkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea' AND file_lok='mchu71_p';
MyGIS: V MySQL Query Browser mažeme záznamy stejně jako byly vkládány, tedy přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP). Celou tabulku můžeme odstranit kliknutím pravým tlačítkem na vybranou tabulku a vybráním DROP TABLE nebo zadáním příkazu DROP TABLE do oblasti pro dotazy v Query Toolbaru. Ukázka kódu pro mazání v MyGIS: MkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea' AND file_lok='mchu71_p';
SpatiaLite: Záznamy se z tabulky mažou stejně jako vkládají, tedy pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Celou tabulku lze odstranit příkazem DROP TABLE nebo tento příkaz vyvolat kliknutím pravým tlačítkem na vybranou tabulku a výběrem DROP TABLE. Ukázka kódu, který lze zadat do okna pro SQL dotazování: SkDE: DELETE FROM obojzivelnici
WHERE id_tax='Hyla arborea' AND file_lok='mchu71_p';
4.5 Změna obsahu záznamů (UPDATE) Pomocí příkazu UPDATE lze měnit obsah polí existujícího záznamu. UPDATE mění hodnoty uvedených sloupců ve všech řádcích, které splňují podmínku. Pouze sloupce, které mají být změněny, musí být uvedeny v klauzuli SET. Sloupce, které nejsou výslovně upravené, si ponechávají své předchozí hodnoty.
48
PostGIS: Opět existují dvě možnosti změny záznamů pomocí pgAdminIII. První možností je tlačítko pro SQL dotazování na liště nástrojů. To je podobné jako u všech předchozích příkazů. Po kliknutí se otevře nové okno pro dotazování, zde se zadá příkaz pro UPDATE záznamu. Druhou možností je označit tabulku, do které chceme údaje vkládat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript UPDATE. Opět se nám objeví okno pro dotazování, ale bude již obsahovat skript pro příkaz, do kterého jen doplníme hodnoty. Ukázka kódu pro změnu atributovou: PkUPatr: UPDATE "T1"
SET "Name"='bodik' WHERE "ID"=3;
Aktualizovala se tabulka T1. Byla nastavena hodnota bodik pro atribut Name pro záznam, který má atribut ID=3. Ukázky pro změnu geometrickou (změnu tvaru): 1) celý tvar PkUPtvar: UPDATE "T1"
SET geometry=GEOMFROMTEXT('POINT(82 30)') WHERE "ID"=3;
V tabulce T1 byla změněna hodnota atributu geometry pro záznam s atributem ID=3.
2) jeden lomový bod PkUPlombod: UPDATE "T2"
SET geometry=GEOMFROMTEXT('LINESTRING(6565 3545, 8000 3000)') WHERE "ID"=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
MyGIS: V MySQL Query Browser lze editovat záznamy přímo nástrojem Edit, který je umístěn dole na liště (černá tužka), a který se musí aktivovat. Vybereme pole, změníme záznam a potvrdíme změny (Apply changes). Po dokončení editace se nástroj musí zpět deaktivovat. Další možnost, jak editovat, je napsat kód do Query Toolbar okna a potvrdit EXECUTE. Ukázka kódu pro atributovou změnu:
49
MkUPatr: UPDATE t2
SET Name='carka' WHERE geometry='LINESTRING(6500 3500, 8000 3000)';
Aktualizovala se tabulka T2. Byla nastavena hodnota carka pro atribut Name pro záznam, který má atribut geometry= LINESTRING(6500 3500, 8000 3000). Ukázky pro změnu geometrickou (změnu tvaru): 1) celý tvar MkUPtvar: UPDATE t4
SET geometry=GEOMFROMTEXT('GEOMETRYCOLLECTION(POINT(3 3), LINESTRING(1 5, 5 7, 8 3))') WHERE ID=1;
V tabulce T4 byla změněna hodnota atributu geometry pro záznam s atributem ID=1.
2) jeden lomový bod MkUPlombod: UPDATE t2
SET geometry=GEOMFROMTEXT('LINESTRING(6500 3500, 8008 3003)') WHERE ID=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
SpatiaLite: Záznamy tabulky se mění stejně jako vkládají a mažou, pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Další možností je editovat záznamy přímo v tabulce, kterou je možné zobrazit kliknutím pravým tlačítkem na tabulku, která má být změněna a zvolit EDIT TABLE ROWS. Takto se dají editovat pouze textové záznamy. Ukázka kódu pro atributovou změnu, který lze zadat do okna pro SQL dotazování: SkUPatr: UPDATE "T3"
SET "Name"='polygon22' WHERE "ID"=2;
Aktualizovala se tabulka T3. Byla nastavena hodnota polygon22 pro atribut Name pro záznam, který má atribut ID=2. Ukázky pro změnu geometrickou (změnu tvaru): 1) celý tvar SkUPtvar: UPDATE "T3"
50
SET
geometry=GEOMFROMTEXT('POLYGON((7007
2002,5505
2002,
6505
3003, 6505 5005, 7007 5505, 8008 5005, 8505 4004, 8008 3003,8505 2505, 7007 2002))') WHERE "Name"='polygon22';
V tabulce T3 byla změněna hodnota atributu geometry pro záznam s atributem Name= polygon22.
2) jeden lomový bod SkUPlombod: UPDATE "T2"
SET geometry=GEOMFROMTEXT('LINESTRING(6555 3555, 8000 3000)') WHERE "ID"=4;
V tabulce T2 byla změněna hodnota atributu geometry pro záznam s atributem ID=4.
Pozn. Editovány jsou tvary, které byly výše vloženy.
V MyGIS není třeba psát uvozovky k názvu tabulky a názvům atributů v podmínce. Příkazy v PostGIS a SpatiaLite jsou stejné. Provedení příkazů zabere několik desetin sekundy. To platí pro všechny softwary.
4.6 Dotazování (SELECT) SQL příkaz SELECT vrací sadu záznamů. Získává žádný nebo více řádků z jedné nebo více tabulek v databázi. Ve většině aplikací je SELECT nejčastěji užívaný příkaz. SELECT má mnoho volitelných klauzulí: WHERE - určuje, které řádky načíst. GROUP BY - seskupuje řádky sdílející obsah tak, že agregační funkce může být použita pro každou skupinu. HAVING - vybírá mezi skupinami definovanými GROUP BY. ORDER BY – určuje pořadí, jak se řádky vrací. V ukázkových kódech byly použity některé základní geometrické funkce. Při vstupu dat se pomocí funkce konverze formátu geometrie GEOMFROMTEXT převedla hodnota řetězce, ve WKT podobě, do interního formátu geometrie. V opačném případě se pomocí funkce AsText převede z interního formátu do WKT. Další možné převedení z interního formátu je pomocí funkce AsBinary, která převádí do WKB formátu. Funkce Dimension vrací
51
vnitřní rozměr hodnoty geometrie. Funkce GeometryType vrací název typu geometrie, jenž je instance členem a funkce SRID vrací číslo, které označuje prostorový referenční systém. Tři poslední jmenované funkce patří do kategorie společných funkcí pro všechny typy geometrie. Pro datový typ linestring byly použity funkce: NumPoints, která vrací počet bodů na linii, dále funkce StartPoint a EndPoint, jenž zobrazí hodnoty počátečního a koncového bodu na linii a funkce Length(GLength), která vypočítá délku linie. Datový typ polygon zastupuje funkce Area, která vypočítá rozlohu objektu a datový typ geometrycollection zastupuje funkce NumGeometries, která vrací počet geometrických objektů obsažených v kolekci. Tyto funkce jsou používány k analyzování prostorových dat.
PostGIS: Jako v předchozích případech máme v pgAdminIII dvě možnosti dotazování na záznamy. První možností je tlačítko pro SQL dotazování na liště nástrojů. Druhou možností je označit tabulku, ze které chceme údaje vybírat, kliknout na ni pravým tlačítkem a z nabídky vybrat Skripty – Skript SELECT. Objeví se okno pro dotazování, ale bude již obsahovat jednoduchý skript pro příkaz, do kterého stačí doplnit hodnoty. Ukázky kódů dotazování pomocí SELECT s některými prostorovými funkcemi: PkSE1: SELECT * FROM "silnice_chkobk" ORDER BY "length";
Tento příkaz vybere vše z tabulky silnice_chkobk a seřadí podle atributu length.
Obr. 23: Výsledek dotazu označeného jako PkSE1
PkSE2: SELECT id_tax, lokalita, file_lok, x, y, AsText(the_geom)
FROM "obojzivelnici";
Vybere z tabulky obojzivelnici atributy id_tax, lokalita, file_lok, x, y. Atribut the_geom vybere a pomocí prostorové funkce AsText, která ho zobrazí ve formátu WKT.
52
Obr. 24: Výsledek dotazu označeného jako PkSE2
PkSE3:
SELECT
id_tax,
lokalita,
file_lok,
x,
y,
AsText(the_geom),
dat_zap FROM "obojzivelnici" WHERE "dat_zap">'2002-10-14';
Z tabulky obojzivelnici vybere atributy id_tax, lokalita, file_lok, x, y, the_geom s pomocí prostorové funkce AsText, která ho zobrazí ve formátu WKT a dat_zap s podmínkou, že dat_zap je větší než 2002-10-14.
Obr. 25: Výsledek dotazu označeného jako PkSE3
PkSE4: SELECT trida_sil, cislo_sil, NumPoints(the_geom),
Length(the_geom), length, Dimension(the_geom), GeometryType(the_geom) FROM "silnice_chkobk" ORDER BY Length(the_geom) DESC LIMIT 10;
Příkaz vybere atributy trida_sil, cislo_sil, the_geom s prostorovou funkcí NumPoints, která vrací počet vrcholů na geometrickém objektu, the_geom s funkcí Length, jenž vrací délku objektu v mapových jednotkách, length, the_geom s funkcí Dimension, která vrací počet rozměrů a the_geom s funkcí GeometryType, která vrací typ třídy geometrie. Tyto atributy vybere z tabulky silnice_chkobk a bude je řadit pomocí výsledků prostorové funkce Length atributu the_geom, sestupně prvních deset záznamů.
53
Obr. 26: Výsledek dotazu označeného jako PkSE4
PkSE5: SELECT count(*), kategorie
FROM "topo" GROUP BY kategorie;
Příkaz vybere celkový počet jednotlivých kategorií z tabulky topo a seskupí je podle druhu kategorie.
Obr. 27: Výsledek dotazu označeného jako PkSE5
PkSE6: SELECT trida_sil, cislo_sil, Length(the_geom)
FROM "silnice_chkobk" GROUP BY trida_sil, cislo_sil, Length(the_geom) HAVING Length(the_geom)>5000;
Tento příkaz vybere atributy trida_sil, cislo_sil a the_geom s prostorovou funkcí Length, která vrací délku objektů z tabulky silnice_chkobk a seskupí atributy trida_sil, cislo_sil a the_geom s funkcí Length mající atribut the_geom s funkcí Length větší než 5000.
54
Obr. 28: Výsledek dotazu označeného jako PkSE6
MyGIS: V MySQL Query Browser jsou záznamy vybírány přes „Query Toolbar“. Query Toolbar obsahuje tři navigační tlačítka (GO BACK, NEXT, REFRESH), oblast pro dotazy, kde se zapisují jednotlivé kódy a dvě akční tlačítka (EXECUTE a STOP). Ukázky kódů dotazování pomocí SELECT s některými prostorovými funkcemi: MkSE1: SELECT * FROM silnice_chkobk ORDER BY trida_sil;
Vybere vše z tabulky silnice_chkobk a seřadí podle atributu trida_sil.
Obr. 29: Výsledek dotazu označeného jako MkSE1
55
MkSE2: SELECT Name, ID, AsBinary(geometry)
FROM t2;
Vybere z tabulky T2 atributy Name, ID. Atribut geometry vybere a pomocí funkce AsBinary, která ho zobrazí ve formátu WKB. Bohužel, binární zobrazení není podporováno.
Obr. 30: Výsledek dotazu označeného jako MkSE2
MkSE3: SELECT Name, AsText(StartPoint(geometry)),
AsText(EndPoint(geometry)) FROM t2;
Z tabulky T2 vybere atribut Name a atribut geometry, který pomocí prostorových funkcí StartPoint a EndPoint určí první a poslední bod geometrie geoobjektu a zobrazí je pomocí funkce AsText ve formátu WKT.
Obr. 31: Výsledek dotazu označeného jako MkSE3
MkSE4: SELECT area, Area(SHAPE), perimeter, level, kategorie
FROM topo WHERE kategorie='les';
Vybere z tabulky topo atributy area, SHAPE s prostorovou funkcí Area, která vypočítá rozlohu geoobjektů, perimeter, level a kategorie s podmínkou, že záznam má atribut kategorie roven hodnotě les.
Obr. 32: Výsledek dotazu označeného jako MkSE4
56
MkSE5: SELECT Name, ID, NumGeometries(geometry),
GeometryType(geometry) FROM t4;
Z tabulky T4 vybere atributy Name, ID a atribut geometry s funkcí NumGeometries, která určí počet typů geometrií obsažených v kolekci. Pomocí funkce GeometryType zobrazí typ geometrie, což bude kolekce.
Obr. 33: Výsledek dotazu označeného jako MkSE5
MkSE6: SELECT id_tax, lokalita
FROM obojzivelnici GROUP BY id_tax HAVING lokalita ='7071-41';
Vybere z tabulky obojzivelnici atributy id_tax, lokalita. Seskupí záznamy podle atributu id_tax a současně musí být atribut lokalita rovna hodnotě 7071-41.
Obr. 34: Výsledek dotazu označeného jako MkSE6
SpatiaLite: Záznamy tabulky se vybírají pomocí kódu, který se zadá do okna pro SQL dotaz a provede tlačítkem Execute SQL statement. Ukázky kódů, které lze zadat do okna pro SQL dotazování: SkSE1: SELECT * FROM obojzivelnici ORDER BY id_tax;
Vybere vše z tabulky obojzivelnici a seřadí podle atributu id_tax.
Obr. 35: Výsledek dotazu označeného jako SkSE1
57
SkSE2:
SELECT
id_tax,
lokalita,
file_lok,
x,
y,
AsText(geometry),
dat_zap, SRID(geometry) FROM obojzivelnici;
Vybere z tabulky obojzivelnici atributy id_tax, lokalita, file_lok, x, y, dat_zap. Atribut geometry vybere a pomocí funkce AsText ho zobrazí ve formátu WKT a pomocí funkce SRID zobrazí číslo projekčního systému.
Obr. 36: Výsledek dotazu označeného jako SkSE2
SkSE3: SELECT trida_sil, cislo_sil, NumPoints(Geometry),
GLength(Geometry), length, Dimension(Geometry), GeometryType(Geometry) FROM silnice_chkobk ORDER BY GLength(Geometry) DESC LIMIT 10;
Příkaz vybere atributy trida_sil, cislo_sil, Geometry s funkcí NumPoints, která vrací počet vrcholů na geometrickém objektu, Geometry s funkcí GLength, jenž vrací délku objektu v mapových jednotkách, length, Geometry s funkcí Dimension, která vrací počet rozměrů a Geometry s funkcí GeometryType, která vrací typ třídy geometrie. Tyto atributy vybere z tabulky silnice_chkobk a bude je řadit pomocí výsledků funkce GLength atributu Geometry, sestupně prvních deset záznamů.
Obr. 37: Výsledek dotazu označeného jako SkSE3
58
SkSE4: SELECT count(*), GeometryType(geometry)
FROM topo GROUP BY GeometryType(geometry);
Příkaz vybere celkový počet jednotlivých typů tříd geometrie z tabulky topo a seskupí je podle typu geometrie.
Obr. 38: Výsledek dotazu označeného jako SkSE4
SkSE5: SELECT area, Area(geometry), perimeter, level, kategorie
FROM topo WHERE kategorie='les';
Vybere z tabulky topo atributy area, geometry s prostorovou funkcí Area, která vypočítá rozlohu geoobjektů, perimeter, level a kategorie s podmínkou, že záznam má atribut kategorie roven hodnotě les.
Obr. 39: Výsledek dotazu označeného jako SkSE5
SkSE6: SELECT cislo_sil, trida_sil, length
FROM silnice_chkobk GROUP BY length HAVING length > 1000;
Tento příkaz vybere z tabulky silnice_chkobk atributy cislo_sil, trida_sil a length. Seskupí hodnoty podle atributu length, který má hodnotu větší než 1000.
59
Obr. 40: Výsledek dotazu označeného jako SkSE6
Příkazy SELECT jsou ve všech třech databázích téměř stejné. V PostGIS je nutné dávat názvy tabulek a názvy atributů v podmínce WHERE do dvojitých uvozovek. Ve všech třech databázích se textové hodnoty atributů uvozují jednoduchými uvozovkami.
60
5. DISKUZE Jednotlivé programy a knihovny zmíněné v této bakalářské práci bylo nutné instalovat, a to vždy rozdílným způsobem. Prostorová nadstavba PostGIS byla sice součástí instalace databázového systému PostgreSQL, ale bylo třeba ji do tohoto programu přidat pomocí aplikace Stack Builder. Po spuštění této aplikace jsem vybral z nabídky Spatial Extensions PostGIS. Dále bylo nutné zvolit server, ze kterého se nadstavba stáhla. Poté už jen stačilo tuto nadstavbu pouze nainstalovat. Na rozdíl od PostGIS, MyGIS byl přímo součástí instalace MySQL, a tudíž nebylo potřeba jej doinstalovávat. Při instalaci těchto dvou databází se zadává heslo, kterým se později přihlašuje k databázím. Toto heslo je používáno i při připojení ke geodatabázím skrze programy Janitor a Quantum GIS. Oproti předchozím databázím pro spuštění SpatiaLite stačilo stáhnout jediný exe soubor, který se nemusel nikam instalovat a stačilo jej pouze spustit. U tohoto softwaru se žádné heslo nezadává. Klíčovou činností této bakalářské práce a tedy i oblastí s největšími problémy, bylo zadávání příkazů pomocí jazyka SQL. Největší problémy nastaly při zadávání příkazů SELECT. V softwaru SpatiaLite se po zadání příkazu stávalo, že se místo tabulky s výsledky zobrazil pouze jeden řádek se zprávou, ve které bylo napsáno: SQL dotaz vrátil prázdnou výslednou tabulku. Toto není chyba. V ukázkových příkladech jsem proto zvolil takové kódy, které nevracely prázdnou tabulku. Při použití geometrické funkce AsBinary, která zobrazí geometrii objektu v binární podobě nastal problém v tom, že ve většině programů s dotazováním se výsledek zobrazí jako prázdné čtverečky nebo jiné symboly. V softwaru Janitor nelze zobrazit vytvořená data v databázi MySQL, a to i po vložení hodnot do tabulky geometry_columns pomocí příkazu INSERT (MkINgeometry_columns). Nabízené vrstvy se nedají označit a zobrazují se jako zašedlé čtverečky s otazníkem. Ostatní importované shapefily se dají bez problémů zobrazit.
61
6. ZÁVĚR Tato bakalářská práce se zabývá popisem stávajících prostorových rozšíření nekomerčních databází s přímým využitím v GIS. Práce obsahuje přehled stávajících (výrazných) řešení prostorových nadstaveb - PostGIS pro PostgreSQL, MyGIS pro MySQL, SpatiaLite pro SQLite a JanGeoDB. Na začátku práce je vysvětlen pojem databáze a ostatní pojmy z oblasti databází. Databáze může být viděna jako jeden nebo více souborů uložených na nějakém vnějším paměťovém zařízení, jako je například disk. Geodatabáze je databáze navržená pro ukládání, dotazování a manipulaci s geografickou informací a prostorovými daty. Je také známá jako prostorová databáze. V rámci prostorové databáze je s prostorovými daty zacházeno jako s jakýmkoli jiným typem dat. Vektorová data mohou být uložena jako bod, linie nebo polygon datové typy a mohou mít související souřadnicový systém. Záznam geodatabáze může používat datový typ geometrie pro reprezentaci umístění objektu ve fyzickém světě a další standardní databázové datové typy pro uložení atributů objektu. Některé geodatabáze mohou obsahovat podporu také pro ukládání rastrových dat. Mnoho geodatabází má vlastní funkce, které umožňují manipulovat a dotazovat se na prostorová data pomocí SQL. Nicméně k prostorovým datům v některých geodatabázích lze přistupovat pouze prostřednictvím speciálního klientského softwaru. Pro PostgreSQL byl tímto softwarem pgAdminIII, pro MySQL to byl MySQL Query Browser a pro SQLite to byl SpatiaLite – GUI. Z těchto tří softwarů bych vyzdvihl jako nejvíce propracovaný pgAdminIII, který obsahuje veliké množství nástrojů a možností pro tvorbu geodatabází a velice dobře si rozumí s prostorovou nadstavbou PostGIS. Trvání provedení operací není nijak dlouhé. Většina příkazů proběhne okamžitě, jiné zaberou několik sekund. Toto závisí na velikosti dat. Důležité je zde psát správně příkazový kód, který si potrpí na správné uvozovky. PostGIS lze také využít v GIS softwarech Janitor a QuantumGIS. Na druhé místo bych postavil SpatiaLite, který sice neobsahuje tolik možností jako pgAdminIII, ale pro nenáročné uživatele je určitě dostačující. Trvání operací je opět velmi rychlé. Výhodou tvorby geodatabáze v tomto softwaru je, že výsledná databáze je uložena na disku jako samostatný soubor. Třetí místo patří dle mého názoru MySQL Query Browseru, který je na první pohled velice intuitivní a jednoduchý, ale práce s ním na rozdíl od předchozích, není moc pohodlná. Průběh operací opět záleží na velikosti dat, ale většinou proběhnou okamžitě.
62
Další softwarová řešení, zmíněná v této práci jsou kvalitními pomocníky při tvorbě databází. Nejvíce bych doporučil QuantumGIS (QGIS) a FWTools. QGIS jsem použil pro zobrazování vrstev vytvořených v PostGIS a SpatiaLite, a také pro importování shapefilů do databáze PostgreSQL. FWTools je balíček, který obsahuje několik užitečných nástrojů pro práci s geodaty. Komunikace s databázemi probíhá pomocí jazyka SQL. Testované příkazy CREATE, INSERT, DELETE, UPDATE a SELECT jsou popsány pro každý software zvlášť a vždy na konci každého testovaného příkazu jsou vyhodnoceny rozdíly v příkazech v jednotlivých databázích.
63
7. SUMMARY This thesis describes the spatial extensions of the existing non commercial databases for direct use in GIS. The work contains an overview of the current (major) solutions of the spatial extensions - PostGIS for PostgreSQL, MyGIS for MySQL, SpatiaLite for SQLite and JanGeoDB. At the beginning of this work is to explain the concept of databases and other concepts of databases. The database can be viewed as one or more files stored on an external storage device such as a disk. DBMS (DataBase Management System) is a collection of programs that manage the database structure and controls access to data stored in the database. Geodatabase is a database designed for storing, querying and manipulation of geographic information and spatial data. It is also known as a spatial database. Within a spatial database with spatial data is treated as any other type of data. Vector data can be stored as point, line or polygon data types and may have associated coordinate system. Record geodatabase can use the geometry data type to represent the placement of the object in the physical world and other standard database data types to store attributes of an object. Some geodatabases may also include support for storing raster data. Many geodatabases have their own functions to manipulate and query of spatial data using SQL. However, the spatial data in some geodatabases can be accessed only by the special client software. PostgreSQL has been that software pgAdminIII for MySQL was MySQL Query Browser and SpatiaLite was for SQLite. Of the three software would like to highlight the most sophisticated pgAdminIII, which contains a large number of tools and options for creating geodatabases and can very well mean the PostGIS spatial extension. Duration of operations is not long. Most order will take place immediately, others take a few seconds. This depends on the size of the data. Important here is the command to write the code correctly, who enjoy good quotes. PostGIS can also be used in GIS softwares QuantumGIS and Janitor. On the second I put SpatiaLite which, while not containing as many options as pgAdminIII, but for less demanding users is certainly sufficient. Duration of operations is again very fast. Advantage of creating geodatabases in this software is that the resulting database is stored on disk as a file. Third place belongs to my opinion, MySQL Query Browser, which is at first glance very intuitive and simple, but work with it, unlike the previous is not very comfortable. The operations again depending on data size, but usually take place immediately.
64
Other software solutions mentioned in this work are high-quality accessories to create databases. I picked up most QuantumGIS (QGIS) and FWTools. QGIS I used to show layers made in PostGIS and SpatiaLite and also to import shapefile into PostgreSQL. FWTools is a package that contains several useful tools for manipulating geographic data. Communication with the database is through SQL. SQL is the standard nonprocedural relational query language, supported by a majority of the available database systems. SQL is the acronym of words Structured Query Language. Tested orders CREATE, INSERT, DELETE, UPDATE, and SELECT are described separately for each software and at the end of each test command are evaluated differences in orders from individual databases.
KEY WORDS: database, geodatabase, spatial, command, geometry, data, extension, information.
65
8. SEZNAM POUŽITÉ LITERATURY [1] - DOBEŠOVÁ, Zdena. Databázové sytémy v GIS. 1. vydání. Olomouc : Univerzita Palackého v Olomouci, 2004. 76 s. ISBN 80-244-0891-0. [2] - KOFLER, Michael; ÖGGL, Bernd. PHP 5 a MySQL 5 : Průvodce webového programátora. Vydání první. Brno : Computer Press, a.s., 2007. 608 s. ISBN 978-80-2511813-9. [3] - MITCHELL, Tyler. Web Mapping Illustrated. First Edition. Sebastopol, CA : O'Reilly Media, Inc., 2005. 337 s. ISBN 0-596-00865-1. [4] - RIGAUX, Philippe; SCHOLL, Michel; VOISARD, Agnes. Spatial Databases : with application to gis. San Francisco, CA : Morgan Kaufmann Publishers, 2002. 410 s. ISBN 155860-588-6. [5] - ROUBÍNEK, Jiří . Geografické a datové modelování. [s.l.], 2007. 80 s. Diplomová práce. Univerzita Karlova v Praze. [6] - VOŽENÍLEK, Vít. Diplomové práce z geoinformatiky. Vydavatelství Univerzity Palackého v Olomouci, 2002. 31 s.
Internetové zdroje [7] - BLOB In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 31. 3. 2010 [cit. 2010-05-14]. Dostupné z WWW:
. [8] - FWTools In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 12. 2. 2010 [cit. 2010-05-14]. Dostupné z WWW: . [9] - GDAL [online]. 2010 [cit. 2010-05-14]. GDAL - Geospatial Data Abstraction Library. Dostupné z WWW: . [10] - GDAL In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 17. 10. 2009 [cit. 2010-05-14]. Dostupné z WWW: . [11] - Geodatabase In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 2010 [cit. 2010-05-14]. Dostupné z WWW: .
66
[12] - GeoWikiCZ [online]. 2009, 31. 3. 2010 [cit. 2010-05-14]. SpatiaLite. Dostupné z WWW: . [13] - Janitor [online]. 2005 [cit. 2010-05-14]. JANITOR - systém pro analýzu a syntézu dat. Dostupné z WWW: . [14] - Janitor In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 1. 5. 2009 [cit. 2010-05-14]. Dostupné z WWW: . [15] - MySQL In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 13. 5. 2010 [cit. 2010-05-14]. Dostupné z WWW: . [16] - OGR [online]. 2010 [cit. 2010-05-14]. OGR Simple Feature Library. Dostupné z WWW: . [17] - PostGIS [online]. 2010 [cit. 2010-05-14]. PostGIS 1.5.1 Manual. Dostupné z WWW: . [18] - PostGIS In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 13. 8. 2009 [cit. 2010-05-14]. Dostupné z WWW: . [19] - PostgreSQL [online]. 2010 [cit. 2010-05-14]. PostgreSQL: About. Dostupné z WWW: . [20] - PgAdmin [online]. 2010 [cit. 2010-05-14]. PgAdmin: PostgreSQL administration and managment tools . Dostupné z WWW: . [21] - Quantum GIS [online]. 2009 [cit. 2010-05-14]. About QGIS. Dostupné z WWW: . [22] - SEEMANN, Pavel. Free software GIS [online]. [s.l.], 2008. 19 s. Semestrální práce. České vysoké učení technické v Praze. Dostupné z WWW: . [23] - Simple Features In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 12. 12. 2009 [cit. 2010-05-14]. Dostupné z WWW: . [24] - SKŘIVAN, Jaromír. Internal.cz [online]. 04. 08. 2000 [cit. 2010-05-14]. Databáze a jazyk SQL. Dostupné z WWW: . [25] - SQLite In Wikipedia : the free encyclopedia [online]. St. Petersburg (Florida) : Wikipedia Foundation, , 27. 3. 2010 [cit. 2010-05-14]. Dostupné z WWW: . 67
[26] - SQLite [online]. 2010 [cit. 2010-05-14]. SQLite Home Page. Dostupné z WWW: . [27] - STĚHULE, Pavel. PostgreSQL [online]. 2010 [cit. 2010-05-14]. PostgreSQL. Dostupné z WWW: . [28] - TROCH, Josef. Spatial SQL (Prostorové SQL) [online]. 18.2.2002 [cit. 2010-05-14]. Spatial SQL (Prostorové SQL). Dostupné z WWW: .
68
PŘÍLOHY
SEZNAM PŘÍLOH Příloha 1.: Rastrové formáty podporované GDAL Příloha 2.: Vektorové formáty podporované OGR
Příloha 1. – Rastrové formáty podporované GDAL Arc/Info ASCII Grid
Golden Software ASCII Grid
ADRG/ARC Digitilized Raster Graphics (.gen/.thf)
Golden Software Binary Grid
Arc/Info Binary Grid (.adf)
Golden Software Surfer 7 Binary Grid
AIRSAR Polarimetric
GSC Geogrid
Magellan BLX Topo (.blx, .xlb)
TIFF / BigTIFF / GeoTIFF (.tif)
Bathymetry Attributed Grid (.bag)
GXF - Grid eXchange File
Microsoft Windows Device Independent Bitmap
Hierarchical Data Format Release 4 (HDF4)
(.bmp)
Hierarchical Data Format Release 5 (HDF5)
BSB Nautical Chart Format (.kap)
Erdas Imagine (.img)
VTP Binary Terrain Format (.bt)
Image Display and Analysis (WinDisp)
CEOS (Spot for instance)
ILWIS Raster Map (.mpr,.mpl)
DRDC COASP SAR Processor Raster
Intergraph Raster
TerraSAR-X Complex SAR Data Product
USGS Astrogeology ISIS cube (Version 2)
Convair PolGASP data
USGS Astrogeology ISIS cube (Version 3)
Spot DIMAP (metadata.dim)
JAXA PALSAR Product Reader (Level 1.1/1.5)
ELAS DIPEx
Japanese DEM (.mem)
DODS / OPeNDAP
JPEG JFIF (.jpg)
First Generation USGS DOQ (.doq)
JPEG2000 (.jp2, .j2k)
New Labelled USGS DOQ (.doq)
NOAA Polar Orbiter Level 1b Data Set (AVHRR)
Military Elevation Data (.dt0, .dt1, .dt2)
Erdas 7.x .LAN and .GIS
ERMapper Compressed Wavelets (.ecw)
FARSITE v.4 LCP Format
ESRI .hdr Labelled
Daylon Leveller Heightfield
Erdas Imagine Raw
In Memory Raster
NASA ELAS
Vexcel MFF
ENVI .hdr Labelled Raster
Vexcel MFF2
Epsilon - Wavelet compressed images
Multi-resolution Seamless Image Database
ERMapper (.ers)
Meteosat Second Generation
Envisat Image Product (.n1)
EUMETSAT Archive native (.nat)
EOSAT FAST Format
NLAPS Data Format
FIT
NITF
FITS (.fits)
NetCDF
Fuji BAS Scanner Image
Northwood/VerticalMapper Classified Grid Format
Generic Binary (.hdr Labelled)
.grc/.tab
Oracle Spatial GeoRaster
Northwood/VerticalMapper Numeric Grid Format
GSat File Format
.grd/.tab
Graphics Interchange Format (.gif)
OGDI Bridge
WMO GRIB1/GRIB2 (.grb)
PCI .aux Labelled
GMT Compatible netCDF
PCI Geomatics Database File
GRASS Rasters
PCRaster
NASA Planetary Data System
SGI Image Format
Portable Network Graphics (.png)
Standard Raster Product (ASRP/USRP)
Netpbm (.ppm,.pgm)
SRTM HGT Format
R Object Data Store
Terragen Heightfield (.ter)
Rasterlite - Rasters in SQLite DB
Terralib
Swedish Grid RIK (.rik)
EarthWatch/DigitalGlobe .TIL
Raster Matrix Format (*.rsw, .mtw)
TerraSAR-X Produkt
Raster Product Format/RPF (a.toc)
USGS ASCII DEM (.dem)
RadarSat2 XML (product.xml)
GDAL Virtual (.vrt)
Idrisi Raster
OGC Web Coverage Server
SAGA GIS Binary format
WKTRaster
SAR CEOS
OGC Web Map Server
ArcSDE Raster
X11 Pixmap (.xpm)
USGS SDTS DEM (*CATD.DDF)
Příloha 2. – Vektorové formáty podporované OGR Arc/Info Binary Coverage
INGRES
Arc/Info .E00 (ASCII) Coverage
KML
Atlas BNA
Mapinfo File
AutoCAD DXF
Microstation DGN
Comma Separated Value (.csv)
Memory
DODS/OPeNDAP
MySQL
ESRI Personal GeoDatabase
Oracle Spatial
ESRI ArcSDE
ODBC
ESRI Shapefile
OGDI Vectors
FMEObjects Gateway
PCI Geomatics Database File
GeoJSON
PostgreSQL
Géoconcept Export
EPIInfo .REC
GeoRSS
S-57 (ENC)
GML
SDTS
GMT
SQLite/SpatiaLite
GPX
UK .NTF
GRASS
U.S. Census TIGER/Line
GPSTrackMaker (.gtm, .gtz)
VFK data
Informix DataBlade
VRT - Virtual Datasource
INTERLIS
X-Plane/Flighgear aeronautical data