GIS Spatial SQL Dotazy nad prostorovými daty 11 požadavků na prostorový dotazovací jazyk Prostorové operace Prostorové predikáty Příklad užití GIS 1
Spatial SQL Potřeba vhodného jazyka pro kladení dotazů v prostorových databázích vedla k různým řešením tohoto problému. Při bližším zkoumání zjistíme, že při dotazování existují tři typy dotazů: prostorové dotazy (pouze prostorové vlastnosti) Vypiš města vzdálená více než 50 km od Ostravy. atributové dotazy (pouze na neprostorové vlastnosti) Kolik lidí žije v Moravskoslezském kraji? kombinované dotazy (jsou zahrnuty obě složky) Vypiš všechny typy hnojiv použité na pozemcích sousedících s pozemkovým blokem 510786. GIS 2
Spatial SQL Klasické relační dotazovací jazyky není vhodné použít není zde podpora pro prostorová data (chybí predikáty i operace). Některé GIS obsahují funkce pro nahrazení takových operací. Řešením se jeví rozšíření funkcionality SQL o práci s prostorovými daty. GIS 3
Spatial SQL požadavky M. J. Egenhofer v roce 1994 specifikoval 11 požadavků na prostorový dotazovací jazyk, které standardní dotazovací jazyky nesplňovaly Prostorový ADT (abstraktní geometrický datový typ "Spatial" s vhodnými operacemi a vztahy (aby uživatel nepotřeboval znát přesnou strukturu ukládání prostorových dat). Grafická presentace výsledku (presentace výsledku dotazu v grafické formě včetně vizualizace příslušných neprostorových dat nejpřirozenější forma k analýze prostorových dat). GIS 4
Spatial SQL požadavky Kombinování výsledku možnost kombinování výsledku dotazu s výsledky jednoho či více předchozích dotazů. Kontext pro grafickou presentaci je často nezbytné zobrazování kontextu informací, které nebyly explicitně vyžádány, ale jsou nezbytné k interpretaci výsledku dotazu v prostorovém umístění. (Příklad: hledám li v mapě Ostravu, je nutno ji mít zobrazenu s okolím, nikoli jako zobrazení tečky s nápisem Ostrava na bílé ploše). GIS 5
Spatial SQL požadavky Ověřování obsahu kontrolní mechanismus k ověření obsahu kresby zjištění, jakému dotazu odpovídá kresba kvůli kombinování výsledku. Výběr ukázáním použití výsledku předchozího dotazu ukázáním pro referenci v příštím dotazu typicky myší. Manipulace se zobrazováním rozlišení prostorových objektů a jejich částí pomocí nastavování atributu jejich grafické presentace barva, vzorek,... GIS 6
Spatial SQL požadavky Vysvětlivky popisující legenda k jednotlivým druhům zobrazovaných objektů jako na mapě. Popisky labels k jednotlivým objektům (pro pochopení kresby) a možnost vybrání objektu, které mají být popsány dotazovacím jazykem. Volba měřítka možnost volby libovolného měřítka zobrazení dotazu. Vymezení oblasti nástroje k omezení oblasti zájmu uživatele, nad kterou se bude provádět další dotaz/y. GIS 7
Spatial SQL požadavky Oddělení dotazovacích a zobrazovacích (presentačních) instrukcí. Výsledky dotazu jsou často prezentovány graficky uživatel má mít možnost upravovat parametry vizuální složky. Zabudováním takových instrukcí přímo do dotazovacího jazyka by se jazyk stal příliš složitým a obtížně použitelným. Řešení rozdělit každou instrukci do několika menších (typově různých) instrukcí. Rozlišujeme 3 typy instrukcí. GIS 8
Spatial SQL instrukce Vlastní uživatelský dotaz (user query) popis množiny dat, která se mají zobrazit. Dotazy pro rozdělení výsledku (display queries) dotazu do množin, z nichž každá bude zobrazena jiným způsobem (různé barvy apod.). Vlastní popis jak zobrazit data (display description). 3 typy instrukcí se spojí do dvou jazyků vlastního dotazovacího a presentačního. GIS 9
Spatial SQL práce s instrukcemi Uživatel nastaví parametry zobrazovacího prostředí(zobrazovací instrukce). Uživatel pokládá dotazy (výsledky se zobrazují dle předchozího nastavení, zobrazovací prostředí se nemění). Uživatel (případně) změní parametry zobrazovacího prostředí (ale zobrazovaný obsah se nezmění). GIS 10
Spatial SQL Prezentační jazyk udává, jak zobrazit výsledky dotazu ( ukaž hotely z výsledku dotazu jako hranaté čtverečky ) včetně možnosti použít výrazy podobné klasickým dotazům pro detailní popis( ukaž budovy z výsledku dotazu, přitom hospody označ červeně a obchody fialově ). Dotazovací jazyk bude sloužit jako část prezentačního jazyka. GIS 11
Spatial SQL Návrh Egenhofera z roku 1994 odstraňuje výše uvedené nedostatky konvenčních DB jazyků Pracuje s příkazy ve formátu SELECT FROM WHERE stejně jako v klasickém SQL, výsledky dotazu jsou relace. Spatial SQL neobsahuje funkcionalitu pro editování dat. GIS 12
Spatial SQL SQL je rozšířeno o prostorovou doménu. Zajišťuje se tak vysoká úroveň abstrakce prostorových dat, realizace pomocí řady prostorových operací a predikátů. Spatial atribut (prostorový atribut) atribut z domény spatial Spatial relation (prostorová relace) relace s tímto atributem GIS 13
Spatial SQL prostorové operace Jsou definovány jako funkce na prostorových objektech. Unární prostorové operátory přistupují k jedné prostorové položce prostorové relace topologické + aritmetické. Topologické unární operátory určují dimenzi, hranici a vnitřek objektu: 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"). GIS 14
Spatial SQL prostorové operace Topologické operátory mají specializované varianty pro jednotlivé dimenze. Například 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. GIS 15
Spatial SQL prostorové operace Aritmetické operace unární operátory, závisí na dimenzi objektu: lenght (délka) pro 1D objekty area (plocha) pro 2D objekty volume (objem) pro 3D objekty GIS 16
Spatial SQL prostorové operace Kombinací topologických a aritmetických vlastností lze získat složitější operátory : Například: perimeter (obvod) pro mnohoúhelník, extreme coordinates (extrémní souřadnice), complement (doplněk). convex hull (konvexní obal). GIS 17
Spatial SQL prostorové operace Binární prostorové operátory počítají hodnotu ze 2 prostorových položek prostorové relace. Například: distance (vzdálenost) výsledkem je nezáporné reálné číslo, direction (směr) úhel udávající azimut. Na výsledky těchto operací je možné použít standardní agregační funkce SQL (min, avg). GIS 18
Spatial SQL prostorové operace Prostorové operátory se zapisují v prefixové notaci jako funkce. Například: distance(potok.geometry, silnice.geometry) Operátory se mohou vyskytnout v kaluzulích SELECT nebo WHERE jako část neprostorového predikátu. Používají se v dotazech na stejných místech jako agregační funkce. GIS 19
Spatial SQL prostorové predikáty Prostorové predikáty (spatial relationships) jsou relace (v matematickém smyslu) mezi dvěma prostorovými atributy. Výsledkem je Boolean hodnota. Mohou být použity jako predikáty v klauzuli WHERE. Zapisují se infixově; jsou definovány přímo nad generalizovanou doménou spatial. GIS 20
Spatial SQL prostorové predikáty Binární topologické predikáty jsou založeny na množině průniku hranic a vnitřku dvou objektů. Specifikace jsou nezávislé na dimenzi a predikáty mohou být použity na 2 objekty libovolných dimenzí: disjoint (disjunktnost objektu), meet (sousednost), overlap (překrývání), inside/contains (obsahování), covers/coveredby (překrytí), equal (totožné objekty). GIS 21
Spatial SQL prostorové predikáty GIS 22
Spatial SQL prostorové predikáty Začlenění predikátů do Spatial SQL bylo požadováno nutností zvýšit úroveň abstrakce.uživatelé se obejdou bez větších matematických znalostí. Je li použito uspořádání, pak je možné používat predikáty: left/right, north/south, over/under. GIS 23
Definice tabulek s prostorovými daty Podobné jako v klasickém SQL. Definice tabulky mesta s retězcovým atributem jmeno a prostorovým obsazenyprostor. mesto chápeme jako 2D objekt. CREATE TABLE mesta (jmeno CHAR(20) obsazenyprostor spatial_2); GIS 24
Definice tabulek s prostorovými daty Definice tabulky mesta s dvojím chápáním jeho dimenze. Prostorovým obsazenyprostor jako mnohoúhelníku, poloha jako bod. CREATE TABLE mesta (jmeno CHAR(20) obsazenyprostor spatial_2 poloha spatial_0); GIS 25
Predikát PICK výběr ukázáním Predikát PICK možnost formulovat dotazy s referencí na prostorové objekty viditelné na obrazovce. Lze jím 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 může být cílem 0 či 1 rozměrný objekt nejblíže ukázání a nebo 2D objekt, který místo ukázání obsahuje. GIS 26
Predikát PICK výběr ukázáním Nejasnosti jsou řeseny dle toho, jaký typ objektu uživatel v dotazu používá. Jsou li 2 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. GIS 27
Predikát PICK výběr ukázáním Například: Máme k dispozici mapu států s hranicemi a velkými městy (zde jako body). Uživatel se dotazuje na jméno města, na které kliknul. SELECT jmeno FROM mesta WHERE poloha = PICK; GIS 28
Predikát PICK výběr ukázáním V případě, že uživatel klikne na stejné místo, a zadá jiný dotaz, výsledkem je název státu. SELECT jmeno FROM staty WHERE poloha = PICK; GIS 29
GPL (Graphical presentation language) Spatial SQL obsahuje i oddělený presentační (zobrazovací) jazyk GPL pro manipulaci s grafickou presentací výsledku dotazu. Klíčovým pojmem je zde zobrazovací prostředí (graphical environment), které obsahuje nastavení způsobu, jak zobrazovat položené dotazy. V průběhu zpracovávání dotazu jsou tyto informace spojeny s uživatelským dotazem, aby podle nich mohl být vyrenderován výsledek. GIS 30
GPL (Graphical presentation language) Pokud uživatel zobrazovací prostředí nezmění pomocí GPL instrukce, každý dotaz produkuje výsledek (mapu) zobrazený stejným stylem. GPL je možno chápat jako nadmnožinu SQL. SQL dotazy jsou používány pro specifikaci, k čemu se vlastní GPL instrukce vztahuje. GIS 31
GPL (Graphical presentation language) GPL obsahuje instrukce: SET k nastavení konkrétních parametrů zobrazení CANCEL ke zrušení parametrů SHOW ukáže aktuální hodnotu daného parametru GIS 32
GPL (Graphical presentation language) GPL obsahuje modifikátory: PERMANENT příslušné SET/CANCEL se uloží pro příští práci se systémem. IMMEDIATELY podle změny se překreslí aktuální výsledek dotazu (jinak jsou parametry použity až pro další dotaz). GIS 33
GPL (Graphical presentation language) GPL obsahuje i parametry pro nastavení zobrazovacího módu (display mode), grafické prezentace(graphical presentation), měřítko (scale), výřez (window), kontext (spatial context), zjištění obsahu kresby (examination of content). GIS 34
Spatial SQL ukázka Je dána geografická databáze ČR obsahující: města (tabulka mesta), ulice (tabulka ulice), pozemky (tabulka pozemky), budovy (tabulka budovy), údaje o městské hromadné dopravě (tabulka mhd). Prostorový atribut zmíněných tabulek je vždy poloha. GIS 35
Spatial SQL příklad Zadání: zobrazit mapu Naší ulice v Ostravě, včetně všech pozemků, budov. Obytné budovy červeně, komerční budovy zeleně, hranice pozemku černou čarou, ulice širší 6m zobrazit šrafovaně. GIS 36
Spatial SQL příklad Nastavení černé barvy hranic pozemku. (GPL) SET LEGEND COLOR black FOR SELECT boundary(poloha) FROM pozemky; GIS 37
Spatial SQL příklad Obytné budovy červeně, komerční budovy zeleně. (GPL) SET LEGEND COLOR red, green FOR SELECT obytne.poloha, komercni.poloha FROM obytne budovy, komercni budovy WHERE komercni.typ="komercni" and obytne.typ="obytny"; GIS 38
Spatial SQL příklad Šrafování ulic širších než 6 m. (GPL) SET LEGEND PATTERN cross hatched FOR SELECT interior(poloha) FROM ulice WHERE sirka > 6; GIS 39
Spatial SQL příklad Nastavení výřezu jako obal všech ulic v Ostravě. (GPL) SET WINDOW SELECT poloha FROM ulice WHERE mesta.jmeno="ostrava"; GIS 40
Spatial SQL příklad Nastavení kontextu ulic pro zobrazení přilehlých pozemků a budov pro každou dotazovanou ulici a jmen ulic. (GPL) SET CONTEXT FOR ulice.poloha SELECT pozemky.poloha, budovy.poloha, ulice.jmeno FROM ulice, pozemky, budovy; GIS 41
Spatial SQL příklad Nastavení módu pro vykreslování nové mapy. (GPL) SET MODE new; Tím je ukončeno vše pro zobrazovací prostředí. Budeme pokládat konkrétní dotaz na Naši ulici. GIS 42
Spatial SQL příklad Vykresli ulici "Naši" v Ostravě. (Spatial SQL) SELECT ulice.poloha FROM ulice, mesta WHERE mesta.jmeno="ostrava" and ulice.jmeno="naše" and ulice.poloha INSIDE mesto.poloha; GIS 43
Spatial SQL příklad Nastavíme mód pro zvýraznení výsledku následujícího dotazu. (GPL) SET MODE highlight; GIS 44
Spatial SQL příklad Zvýraznění budovy na adrese "Naše 15". (Spatial SQL) SELECT budovy.poloha FROM budovy WHERE adresa="naše 15"; GIS 45
Spatial SQL Třídy prostorových datových typů GIS 46