SDO GEOMETRY

From Wikivyuka
Revision as of 12:42, 1 August 2014 by Dur30 (talk | contribs) (Atribut SDO_ELEM_INFO)

Jump to: navigation, search

SDO_Geometry

Databázový server Oracle je rozšířen o objektový prostorový datový typ s názvem SDO_GEOMETRY. Prefix SDO pochází z doby, kdy Oracle spolupracoval s Canadian Hydrographic Service a tehdejší změny v jádru Oracle vedly k označení "Spatial Data Option" (SDO). Jedním z atributů tohoto objektu je geometrie prostorového prvku, která může být tvořena základním geometrickým elementem - bodem, úsečkou, křivkou, kruhem nebo polygonem, případně jejich kombinacemi. V dané tabulce je možné mít neomezený počet sloupců s prostorovými daty.

Oracle Spatial definuje objektový typ SDO_GEOMETRY s následujícími atributy:

CREATE TYPE sdo_geometry AS OBJECT (
 SDO_GTYPE NUMBER, 
 SDO_SRID NUMBER,
 SDO_POINT SDO_POINT_TYPE,
 SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,
 SDO_ORDINATES SDO_ORDINATE_ARRAY);

Struktura a základní metody u objektu SDO_Geometry je vidět na třídním diagramu SDOGeom.png.

Je nutné vnímat "skladbu" tohoto objektu. Při zadávání dat potřebujeme znát význam atributů, které určují geometrii či koordinační (souřadnicový) systém. Dále jsou definovány datové typy SDO_POINT_TYPE, SDO_ELEM_INFO_ARRAY, SDO_ORDINATE_ARRAY použité v definici SDO_GEOMETRY:

CREATE TYPE sdo_point_type AS OBJECT (
  X NUMBER,
  Y NUMBER,
  Z NUMBER);
CREATE TYPE sdo_elem_info_array AS VARRAY (1048576) of NUMBER;
CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;

Sloupec, který je definován pomocí datového typu SDO_GEOMETRY lze vnímat jako vrstvu, v níž jsou obsaženy prostorové prvky nesoucí informace o své geometrii, mohou být vztažené k určitému souřadnicovému systému a jsou určeny souřadnicemi, kterými je prvek lokalizován.

Význam a možnosti použití jednotlivých atributů objektového typu SDO_GEOMETRY objasní jejich popis.

Atribut SDO_GTYPE

SDO_GTYPE je datového typu NUMBER. Atribut je tvořen 4 číselným kódem, kterým je určen geometrický typ prostorového prvku. Typ geometrie koresponduje se specifikací modelu "Geometry Object Model" definovanou organizací OGC jako OGIS - Simple Features for SQL specification, blíže [1]. Kód je označován jako dltt, kde

d – určuje počet dimenzí (2, 3 nebo 4),
l – vykazuje spojení na LRS (lineární referenční systém), pro 3 nebo 4 dimenzionální hodnoty. 
V případě geometrie bez LRS nebo při akceptaci nastavení Spatial je ponechána hodnota 0,
tt – lze chápat jako číselník geometrií Oracle, kde jsou definovány hodnoty 00 – 09, 10 a jsou rezervovány pro další rozšíření.

Seznam útvarů je vypsán v tabulce Geometrické typy. Podrobně viz [2].

Například, pokud budeme zadávat pomocí INSERT data, pak označení různých geometrií bude vypadat takto:

2001 dvoudimenzionální bod
3001 třídimenzionální bod
2002 dvoudimenzionální linie nebo křivka
2003 dvoudimenzionální polygon nebo povrch
2004 kolekce (Geometry is a heterogeneous collection of elements. COLLECTION is a superset that includes all other types.)
2005 multipoint (Geometry has one or more points. (MULTIPOINT is a superset of POINT.)) 

V jednom sloupci dat s typem SDO_GEOMETRY je nutno dodržet prvky se stejnou dimenzí, není tedy možné míchat dvou a třídimenzionální geometrie. Pro zjištění obsažených informací je možné použít metody pro navrácení hodnot jednotlivých částí datového typu SDO_GTYPE: GET_DIMS, GET_LRS_DIM, a GET_GTYPE.

Atribut SDO_SRID

SDO_SRID je typu NUMBER a jeho číselná hodnota (kód SRID) slouží jako identifikátor prostorového referenčního systému, se kterým je asociována geometrie. Je-li hodnota atributu SDO_SRID NULL, pak geometrie prvku není asociována k žádnému souřadnicovému systému. Má-li atribut SDO_SRID jinou hodnotu než null, pak kód SRID musí být uveden mezi hodnotami systémové tabulky (číselníku) MDSYS.CS_SRS. Stejná hodnota SRID se pak uvádí do patřičného sloupce při vkládaní informací do tabulky s metadaty USER_SDO_GEOM_METADATA.

Například:

SDO_SRID(WGS 84) = 8307

Pokud budeme chtít vytvořit prostorový index, všechny prvky geometrií musí stejný SDO_SRID. Všechny geometrie daného sloupce musí mít stejnou hodnotu SDO_SRID.

Atribut SDO_POINT

Definuje (geo)objekt typu bod pomocí objektového typu SDO_POINT_TYPE (dle dříve uvedených dimenzí). Dle dimenze je pak uveden počet souřadnic. Každá koordináta je zadána datovým typem NUMBER.

CREATE TYPE sdo_point_type AS OBJECT (
  X NUMBER,
  Y NUMBER,
  Z NUMBER);

Platí pravidlo – body se ukládají uvedením souřadnic v atributu SDO_POINT, zatímco atributy SDO_ELEM_INFO a SDO_ORDINATES mají uvedenu hodnotu NULL, jinak Spatial funkce nefungují správně. Jedná se tedy o navzájem disjunktní množiny hodnot - buď jsou uvedeny hodnoty u atributu SDO_POINT nebo jsou vyplněny hodnoty u atributů SDO_ELEM_INFO a SDO_ORDINATES.

Hodnoty atributů při zadání bodu

SDO_GEOMETRY(
     2001,
     NULL,
     SDO_POINT_TYPE(10, 20, NULL),
     NULL,
     NULL);
Atribut SDO_ELEM_INFO

Definuje hodnoty pomocí datového typu SDO_ELEM_INFO_ARRAY, tj. v poli čísel se objevují hodnoty v případě geoobjektu jiného typu než je bod. Ukazuje, jak interpretovat souřadnice z atributu SDO_ORDINATES. Je sestaven trojicí (SDO_STARTING_OFFSET, SDO_ETYPE, SDO_INTERPRETATION). kde význam jednotlivých hodnot vede k přesnému popisu geometrie geobjektu.

Hodnota uvedena na pozici SDO_STARTING_OFFSET indikuje počáteční pozici v poli SDO_ORDINATES, která má uloženy hodnoty koordinát daného elementu. První element má vždy hodnotu 1 (nikdy 0).

Například je-li pole koordinát

SDO_ORDINATES = (2,4, 4,3, 10,3, 13,5, 13,9, 11,13, 5,13, 2,11, 2,4, 7,5, 7,10, 10,10, 10,5, 7,5).
Element, který by byl sestaven ze dvou částí, bude mít začátek pole koordinát na pozici 1 a druhá část složeného prvku může mít definovánu hodnotu jako 19. Hodnota první souřadnice tohoto elementu má pak první souřadnici 7.

SDO_ETYPE - indikuje typ elementu, viz [3].

SDO_ETYPE indikuje dvě základní skupiny prvků - jednoduché a složené. U hodnot 1, 2, 1003, a 2003 jsou předpokládány jednoduché elementy, Jsou definovány pomocí jedné trojice hodnot, uvedené v SDO_ELEM_INFO array.

Jednoduché elementy: Pro SDO_ETYPE hodnoty 1003 a 2003, první číslice indikuje exterior (1) nebo interior (2) - viz příklad:

1003: exterior polygon ring (must be specified in counterclockwise order)

2003: interior polygon ring (must be specified in clockwise order)

Složené elementy: SDO_ETYPE s hodnotami 4, 1005, 2005, 1006, a 2006 představují složené elementy. Jsou obsaženy v alespoň jednom záhlaví trojice, s řadou trojic, které patří k složenému prvku. Pro 4-místný typ SDO_ETYPE hodnotu, první číslice označuje exterrior (1) nebo interior (2):

1005: polygon vymezující "vnějšek" (hodnoty jeho koordinát musí být uvedeny v pořadí proti směru hodinových ručiček

2005: polygon s vnitřním obsahem (specifikace hodnot jde po směru hodin)

1006: vnějsí povrch, který se skládá z jednoho nebo více polygonálních "kruhů"

2006: vnitřní jednolitý povrch

1007: jednolitý element

Prvky složeného prvku jsou souvislé. Poslední bod jedné části složeného prvku je prvním bod další části. Bod se neopakuje.

SDO_INTERPRETATION - význam je závislý na tom, zda je v SDO_ETYPE zadán jednoduchý nebo složený element.

Například:

Máme SDO_ETYPE jako složený element (4, 1005, or 2005), pak SDO_INTERPRETATION specifikuje z kolika trojic hodnot jsou složeny jednotlivé elementy.
Atribut SDO_ORDINATES

SDO_ORDINATES

definuje použití pole proměnlivé délky (až 1048576) typu NUMBER, kde jsou uloženy souřadnice, tvořící hranice prostorového objektu. Použití je spojeno s SDO_ELEM_INFO. Hodnoty v poli jsou uspořádány dle dimenze.

Například:

Polygon, jehož hranice je tvořena čtyřmi dvoudimensionálními body je uložen takto: 
{X1, Y1, X2, Y2, X3, Y3, X4, Y4, X1, Y1}. 
Polygon, jehož hranice je tvořena čtyřmi třídimensionálními body je uložen takto: 
{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}.

xxxxxxxxxxxxxxxxx

Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad Parcely