Difference between revisions of "SDO GEOMETRY"

From Wikivyuka
Jump to: navigation, search
m (Atribut SDO_GTYPE)
m (Atribut SDO_SRID)
 
(25 intermediate revisions by the same user not shown)
Line 1: Line 1:
====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.
  
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.
+
=====Atribut SDO_GEOMETRY=====
  
 
Oracle Spatial definuje objektový typ SDO_GEOMETRY s následujícími atributy:
 
Oracle Spatial definuje objektový typ SDO_GEOMETRY s následujícími atributy:
Line 51: Line 51:
 
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.
 
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.
  
xxxxxxxxxxxxxxxxx
+
=====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.
 +
 
 +
Vypsáním obsahu systémového číselníku, kde je zaveden i S-JTSK. (The table MDSYS.CS_SRS contains a list of each SRID and it's associated coordinate system information.)
 +
 
 +
select * from cs_srs;
 +
 
 +
Dotazem pak zjistíme, kterou verzi S-JTSK chceme použít:
 +
 
 +
select * from cs_srs where cs_name like 'S-%';
 +
 
 +
=====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. ve variabilním poli se objevují hodnoty NUMBER v případě geoobjektu jiného typu než je bod. Ukazuje, jak interpretovat souřadnice geometrického popisu v 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.
 +
 
 +
*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).
 +
 
 +
*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 pak definovány pomocí jedné trojice hodnot, uvedené v SDO_ELEM_INFO array. Element, který by byl sestaven z více částí (compound element), má uvedeny hodnoty 4, 1005, 2005, 1006, and 2006. Například u elementu ze dvou částí, bude mít začátek pole koordinát na pozici 1 a druhá část složeného prvku bude definovánu číselnou podle počtu koordinát prvního elementu.
 +
 
 +
''Jednoduché elementy:'' Pro SDO_ETYPE hodnoty 1003 a 2003, první číslice indikuje exterior - vnější hranici(1) nebo interior - vnitřní hranici(2):
 +
 
 +
1003: exterior polygon ring (hodnoty koordinát musí být zadány proti směru hodinových ručiček)
 +
2003: interior polygon ring (hodnoty koordinát musí být zadány ve směru hodinových ručiček)
 +
 
 +
''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 exterior (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í bod další části. Bod se neopakuje.
 +
 +
*SDO_INTERPRETATION je významově závislý na tom, zda je v SDO_ETYPE zadán jednoduchý nebo složený element.  Máme-li v SDO_ETYPE složený element (4, 1005, 2005, 1006 nebo 2006), pak SDO_INTERPRETATION specifikuje z kolika trojic hodnot jsou složeny jednotlivé elementy. Je-li ukládaný element jednoduchý (hodnoty 1, 2, 1003, 2003), pak SDO_INTERPRETATION může obsahovat informaci o hranici polygonu - zda je složena ze segmentů tvořených přímými liniemi či oblouky apod.
 +
 
 +
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)
 +
pak záleží na uvedené hodnotě SDO_ETYPE, o jakou geometrii půjde.
 +
 
 +
Bude-li SDO_ETYPE = 2003, pak je to jednoduchý polygon. Bude-li se SDO_ELEM_INFO sestávat ze dvou trojic hodnot, pak na druhé a páté pozici může být uvedeno SDO_ETYPE = 1003 a SDO_ETYPE = 2003, pak se jedná o polygon s dírou.
 +
 
 +
=====Atribut 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, viz popis. 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 pak uložen takto:
 +
{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}.
 +
 
 +
=====Příklady geometrických tvarů=====
 +
 
 +
(1,1003,4) kruh - definován třemi body
 +
(1,1003,3) jeden obdélník, typ 1003 - exterior polygon ring, 3 znamená obdélník(rectangle)
 +
(1,1003,1) jeden polygon, polygon 1003 - exterior polygon ring - vnější polygon,  s body definovanými proti směru hodinových ručiček
  
Příklad vytvoření tabulky s prostorovými daty, včetně tvorby prostorového indexu: příklad [[Parcely]]
+
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu]

Latest revision as of 09:44, 10 April 2015

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.

Atribut SDO_GEOMETRY

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.

Vypsáním obsahu systémového číselníku, kde je zaveden i S-JTSK. (The table MDSYS.CS_SRS contains a list of each SRID and it's associated coordinate system information.)

select * from cs_srs;

Dotazem pak zjistíme, kterou verzi S-JTSK chceme použít:

select * from cs_srs where cs_name like 'S-%';
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. ve variabilním poli se objevují hodnoty NUMBER v případě geoobjektu jiného typu než je bod. Ukazuje, jak interpretovat souřadnice geometrického popisu v 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.

  • 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).
  • 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 pak definovány pomocí jedné trojice hodnot, uvedené v SDO_ELEM_INFO array. Element, který by byl sestaven z více částí (compound element), má uvedeny hodnoty 4, 1005, 2005, 1006, and 2006. Například u elementu ze dvou částí, bude mít začátek pole koordinát na pozici 1 a druhá část složeného prvku bude definovánu číselnou podle počtu koordinát prvního elementu.

Jednoduché elementy: Pro SDO_ETYPE hodnoty 1003 a 2003, první číslice indikuje exterior - vnější hranici(1) nebo interior - vnitřní hranici(2):

1003: exterior polygon ring (hodnoty koordinát musí být zadány proti směru hodinových ručiček)
2003: interior polygon ring (hodnoty koordinát musí být zadány ve směru hodinových ručiček)

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 exterior (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í bod další části. Bod se neopakuje.

  • SDO_INTERPRETATION je významově závislý na tom, zda je v SDO_ETYPE zadán jednoduchý nebo složený element. Máme-li v SDO_ETYPE složený element (4, 1005, 2005, 1006 nebo 2006), pak SDO_INTERPRETATION specifikuje z kolika trojic hodnot jsou složeny jednotlivé elementy. Je-li ukládaný element jednoduchý (hodnoty 1, 2, 1003, 2003), pak SDO_INTERPRETATION může obsahovat informaci o hranici polygonu - zda je složena ze segmentů tvořených přímými liniemi či oblouky apod.

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)

pak záleží na uvedené hodnotě SDO_ETYPE, o jakou geometrii půjde.

Bude-li SDO_ETYPE = 2003, pak je to jednoduchý polygon. Bude-li se SDO_ELEM_INFO sestávat ze dvou trojic hodnot, pak na druhé a páté pozici může být uvedeno SDO_ETYPE = 1003 a SDO_ETYPE = 2003, pak se jedná o polygon s dírou.

Atribut 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, viz popis. 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 pak uložen takto: 
{X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4, X1, Y1, Z1}.
Příklady geometrických tvarů
(1,1003,4) kruh - definován třemi body
(1,1003,3) jeden obdélník, typ 1003 - exterior polygon ring, 3 znamená obdélník(rectangle)
(1,1003,1) jeden polygon, polygon 1003 - exterior polygon ring - vnější polygon,  s body definovanými proti směru hodinových ručiček

Hlavní stránka předmětu