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 33 3.6.1 Spatial SQL (Prostorové SQL) 34 4. VSTUP A SPRÁVA GEOOBJEKTŮ 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 z http://postgis.refractions.net/download/ [18]. Dostupný 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>gdalwin32-1.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>gdalwin32-1.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 o 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. Druhá skupina unárních operátorů - aritmetické operace. Tyto závisí na dimenzi objektu. 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), complement (doplněk) a convex hull (konvexní obal) 35
Binární prostorové operátory počítají hodnotu ze dvou prostorových položek prostorové relace. o o distance (vzdálenost) - výsledkem je nezáporné reálné číslo 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 o o o o o disjoint (disjunktnost objektů) meet overlap inside/contains covers/coveredby 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