Difference between revisions of "SDO GEOMETRY"

From Wikivyuka
Jump to: navigation, search
m (Atribut SDO_SRID)
m (Atribut SDO_SRID)
Line 60: Line 60:
  
 
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.
 
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=====  
 
=====Atribut SDO_POINT=====  

Revision as of 12:26, 1 August 2014

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, přesněji 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);

Při zadávání bodu musí být SDO_ELEM_INFO a SDO_ORDINATES obě definovány hodnotou null, jinak Spatial funkce nefungují správně.

Například zadání bodu

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

xxxxxxxxxxxxxxxxx

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