Difference between revisions of "SDO GEOMETRY"
m (→Atribut SDO_POINT) |
m (→Atribut SDO_POINT) |
||
Line 79: | Line 79: | ||
NULL, | NULL, | ||
NULL); | NULL); | ||
+ | |||
+ | =====Atribut SDO_ELEM_INFO===== | ||
+ | definuje použití různé délky pole čísel. Ukazuje, jak interpretovat souřadnice z atributu SDO_ORDINATES. | ||
+ | Je sestaven trojicí (SDO_STARTING_OFFSET, SDO_ETYPE, SDO_INTERPRETATION). | ||
+ | |||
+ | SDO_STARTING_OFFSET - indikuje počáteční pozici v poli SDO_ORDINATES hodnot daného elementu. První element má vždy hodnotu 1 (nikdy 0). | ||
+ | |||
+ | Například: | ||
+ | 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 byls 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 [http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28400/sdo_objrelschema.htm#BGHDGCCE]. | ||
+ | |||
+ | 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===== | ||
xxxxxxxxxxxxxxxxx | xxxxxxxxxxxxxxxxx | ||
Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad [[Parcely]] | Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad [[Parcely]] |
Revision as of 12:34, 1 August 2014
Contents
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 .
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 použití různé délky pole čísel. Ukazuje, jak interpretovat souřadnice z atributu SDO_ORDINATES.
Je sestaven trojicí (SDO_STARTING_OFFSET, SDO_ETYPE, SDO_INTERPRETATION).
SDO_STARTING_OFFSET - indikuje počáteční pozici v poli SDO_ORDINATES hodnot daného elementu. První element má vždy hodnotu 1 (nikdy 0).
Například:
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 byls 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
xxxxxxxxxxxxxxxxx
Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad Parcely