PROSTOROVÉ DOTAZOVACÍ JAZYKY (Maroš Kasinec, Jakub Kúdela)
ÚVOD dotazovací jazyk hlavní prostředek interakce s databází klíčoví požadavek SŘBD (DBMS) SQL populární, komerční dotazovací jazyk pro relační SŘBD (Relational DBMS) založen na formálním dotazovacím jazyku Relační algebre snadno uživatelný, intuitivní a univerzální
MOTIVACE prostorové SŘBD (Spatial DBMS) příklad rozšiřitelného SŘBD (Extensible DBMS) pracují s prostorovými i neprostorovými daty je zapotřebí najít rozšíření SQL pro prácí s prostorovými daty
CÍLE PREZENTACE požadavky na prostorové rozšíření SQL představení OGIS pro rozšíření SQL o geoprostorové data standard: Open Geodata Interchange Standard konsorcium: Open Geospatial Consortium (OGC) založeno největšími výrobci softwaru v snahe formulovat průmyslový standard pro interoperabilitu mezi geografickými informačnými systémami pozn.: prezentace se soustředí pouze na negrafické prostorové rozšíření SQL
POŽADAVKY NA PROSTOROVÉ ROZŠÍŘENÍ SQL potřebujeme pracovat s komplexními daty mnohoúhelníky, čáry, body relační SŘBD zaměřen na práci pouze s jednoduchými datovými typy má svá omezení pro efektivní manipulování s komplexními daty řešení č.1: prostorová data uložit prostřednictvím blobů SQL neumí zpracovávat takto uložená data zpracování prostorových dat je na odpovědnosti v aplikačním kódu napsaném v hostitelském jazyce (neestetické řešení) řešení č.2: hybridní systém užívající implementaci GIS prostorové atributy jsou uloženy v souborech OS a tedy neumožňují standardní databázové služby jako dotazování, indexování a řízení souběžného přístupu
POŽADAVKY NA PROSTOROVÉ ROZŠÍŘENÍ SQL objektově-relační SŘBD (object-relational DBMS) podpora strukturovaných uživatelsky definovaných typů možnost definování typů pro práci s komplexními daty podpora v standardu SQL:1999 (SQL 3) řešení č.3: využití SQL:1999 pro práci s prostorovými daty nabízí vyšší abstrakci pro prostorové data s využitím objektověorientovaných konceptů a abstraktních datových typů (ADT) abstraktní datový typ je uživatelsky definovaný typ s asociovanými funkcemi
PŘÍKLAD ŘEŠENÍ Č.3 S VYUŽITÍM STANDARDU SQL:1999 mějme databázi pozemků uložených v řadě mnohoúhelníků užitečným ADT v našem případě by byl mnohoúhelník s asociovanou funkcí přilehlé, která by po aplikací na dva pozemky určila, zda dané pozemky sdílejí hranici datový typ mnohoúhelník je abstraktní protože koncový uživatel nepotřebuje vědět implementační detaily asociovaných funkcí koncovému uživateli vystačí znalost rozhraní, v našem případě existence funkce přilehlé a datové typy na jejím vstupu a výstupu
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA standard OGIS je založen na geometrickém datovém modelu základem je třída Geometry, geometrický objekt, z níž se nedá vytvořit instance a specifikuje prostorový referenční systém aplikovatelný na všechny její podtřídy čtyři hlavní podedené podtřídy základní třídy Geometry jsou Point, Curve, Surface a GeometryCollection
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA každá třída má svou množinu asociovaných funkcí, které pracují s instancemi dané třídy operace standardu OGIS je možné rozdělit do tří kategorií základní operace aplikovatelné na všechny geometrické datové typy například SpatialReference vrací systém souřadnic na kterém se daný geometrický objekt nachází příkladem běžného referenčního systému může být systém zeměpisné šířky a délky nebo univerzální transverzální Mercatorův systém souřadnic (UTM) topologické / množinové operace operace testující topologické vztahy mezi geometrickými objekty například Intersect testuje zda mají dané geometrické objekty nenulový průnik operace prostorové analýzy například Distance vrací nejkratší vzdálenost mezi dvěma objekty
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA základní operace SpatialReference Envelope Export IsEmpty IsSimple Boundary vrací systém souřadnic geometrického objektu vrací minimální ortogonální ohraničující obdélník geometrického objektu k danému geometrickému objektu vrací objekt v jiné reprezentaci vrací TRUE pokud je reprezentace geometrického objektu prázdná vrací TRUE pokud je geometrický objekt bez vnitřních průsečíků vrací hranici geometrického objektu
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA topologické / množinové operace Equal Disjoint Intersect Touch Cross Within Contains Overlap vrací TRUE pokud jsou hranice a vnitřky geometrických objektů shodné vrací TRUE pokud se hranice a vnitřky geometrických objektů neprotínají vrací TRUE pokud mají geometrické objekty nenulový průnik vrací TRUE pokud se hranice geometrických objektů protínají ale vnitřky ne vrací TRUE pokud povrch protíná vnitřek geometrického objektu v křivce vrací TRUE pokud se vnitřek objektu neprotíná s vnějškem jiného vrací TRUE pokud geometrický objekt obsahuje jiný objekt vrací TRUE pokud mají vnitřky geometrických objektů nenulový průnik
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA operace prostorové analýzy Distance Buffer ConvexHull Intersection Union Difference SymmDiff vrací nejkratší vzdálenost mezi dvěma geometrickými objekty vrací geometrický objekt, který se skládá ze všech bodů, jejichž vzdálenost od daného objektu je menší nebo rovna specifikované hodnotě vrací nejmenší konvexní nadmnožinu ohraničující geometrický obejkt vrací geometrický průsečík dvou geometrických objektů vrací geometrické sjednocení dvou geometrických objektů vrací maximální geometrickou podmnožinu daného objektu, která neprotíná jiný geometrický objekt vrací všechny geometrické podmnožiny dvou objektů ve kterých se neprotínají
STANDARD OGIS PRO ROZŠÍŘENÍ SQL O GEOPROSTOROVÁ DATA specifikace standardu OGIS má svá omezení standard je omezen na objektový model prostoru v rámci objektového modelu je standard omezen na dotazy typu selekce, projekce a sjednocení údajně nedostatek podpory pro agregační funkce ve formě klauzulí typu GROUP BY a HAVING hlavní záměr standardu OGIS se vztahuje pouze na základní topologické a metrické prostorové vztahy, proto existuje nedostatek podpory pro celou řadu metrických operací a to hlavně pro ty, které jsou postavené na predikátu Direction (např.: severně, jižně, vlevo, vpředu)
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS předpokládejme, že máme k dispozici SQL rozšířené o standard OGIS (jeho datové typy a operace), zde je databáze Svět nad kterou budeme dotazy vykonávat: CREATE TABLE Stát( Název varchar (30), Kont varchar (30), Hlav varchar (30), Obyv Integer, HDP Number, Tvar Polygon); CREATE TABLE Řeka( Název varchar (30), Pramen varchar (30), Délka Number, Tvar LineString); CREATE TABLE Město( Název varchar (30), Stát varchar (30), Obyv Integer, Tvar Point);
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.1: najdi názvy všech států, které sousedí s USA SELECT FROM WHERE S1.Název AS "Sousedi USA" Stát S1, Stát S2 Touch(S1.Tvar, S2.Tvar) = 1 AND S2.Název = "USA" komentář: predikát Touch vrací TRUE pokud se hranice geometrických objektů protínají ale vnitřky ne hezká vlastnost topologických operací Standardu OGIS je, že operace zůstávají invariantní po mnoha geometrických transformacích volba souřadnicového systému pro databázi Svět neovlivní výsledky topologických operací
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.2: pro všechny řeky najdi státy přes které protékají SELECT Ř.Název, S.Název FROM Řeka Ř, Stát S WHERE Cross(Ř.Tvar, S.Tvar) = 1 komentář: predikát Cross vrací TRUE pokud povrch protíná vnitřek geometrického objektu v křivce nejčastěji se používá na zkoumání průniku mezi dvojicemi geometrických objektů typu LineString a Polygon (náš případ) nebo párem objektů typu LineString
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.3: pro každou řeku najdi město které je k ní nejblíže SELECT Ř1.Název, M1.Název FROM Řeka Ř1, Město M1 WHERE Distance(Ř1.Tvar, M1.Tvar) < ( SELECT Distance(Ř2.Tvar, M2.Tvar) FROM Řeka Ř2, Město M2 WHERE M1.Název <> M2. Název) komentář: binární operace Distance vrací nejkratší vzdálenost mezi dvěma geometrickými objekty, je definována pro libovolnou kombinaci geometrických objektů
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.4: řeka St. Lawrence zásobuje vodou každé město, které je od ní vzdáleno nanejvýš o 300 km, která města to jsou? SELECT FROM WHERE M.Název Řeka Ř, Město M Ř.Název = "St. Lawrence" AND Overlap(M.Tvar, Buffer(Ř.Tvar, 300)) = 1 komentář: operace Buffer vrací geometrický objekt, který se skládá ze všech bodů, jejichž vzdálenost od daného objektu je menší nebo rovna specifikované hodnotě v druhém argumentu
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.5: vypiš název a plochu každého státu SELECT FROM S.Název, Area(S.Tvar) AS "Plocha" Stát S komentář: funkce Area je aplikovatelná pouze na geometrické objekty typu Polygon nebo MultiPolygon výpočet plochy ve funkci Area závisí od souřadnicového systému databáze Svět pokud je Tvar jednotlivých položek tabulky Stát vyjádřen v zeměpisné šířce a délce a je zavolána jedna z funkcí: Area, Distance nebo Length, tak je během výpočtu provedena mezitím transformace souřadnic
UKÁZKA SQL DOTAZOVÁNÍ NAD STANDARDEM OGIS dotaz č.6: pro každý stát vypiš vzdálenost hlavního města od rovníku SELECT FROM WHERE M.Název, Distance(M.Tvar, Point(0, M.y)) Stát S, Město M S.Hlav = M.Název komentář: Point(0, M.y) reprezentuje bod na rovníku se stejnou zeměpisnou délkou jakou má město aktuálně inštanciované v M
ZÁVĚR standard OGIS doporučuje množinu operace nad priestorovýi datovými typy, které jsou považovány za důležité SQL: 1999 je standardem pro objektově-relační rozšíření SQL, není specifický ohledně GIS nebo prostorových databází, spíše se zaměřuje na obecné objektově-relační databáze, poskytuje však prostředky pro implementaci standardu OGIS
DĚKUJI ZA POZORNOST