Oracle Spatial-元数据及SDO_GEOMETRY
一、空間表的元數(shù)據(jù)
將表的SDO_GEOMETRY列的所有對(duì)象作為一個(gè)空間層。Spatial需要對(duì)所有空間對(duì)象進(jìn)行驗(yàn)證、創(chuàng)建索引和查詢。此時(shí)需要為圖層指定適當(dāng)?shù)脑獢?shù)據(jù),該數(shù)據(jù)包含如下信息:維度、維度邊界、容差、坐標(biāo)系。每個(gè)圖層的上述信息填充到USER_SDO_GEOM_METADATA字典試圖中。
SQL>DESCRIBE? USER_SDO_GEOM_METADATA
| USER_SDO_GEOM_METADATA視圖 | ||
| 列名 | 類型 | 列名描述 |
| TABLE_NAME | VARCHAR2() | |
| COLUMN_NAME | VARCHAR2() | |
| SRID | NUMBER | |
| DIMINFO | MDSYS.SDO_DIM_ARRAY | 偉度信息 |
| | | |
SRID屬性:SRID是空間參考系ID。如果SDO_SRID為null,則沒(méi)有指定坐標(biāo)系統(tǒng),如果SDO_SRID不為null,那么它的值必須在在MDSYS.CS_SRS表中的 SRID 列有對(duì)應(yīng)的值。
| MDSYS.CS_SRS表 | ||
| 列名 | 類型 | 列名描述 |
| CS_NAME | VARCHAR2(68) | 坐標(biāo)系統(tǒng)名稱 |
| SRID | NUMBER(38) | 空間參考ID,為唯一值。1-999999為spatial使用的空間參考,1000000以后為用戶自定義 |
| AUTH_SRID | NUMBER(38) | 可選的SRID,是個(gè)外鍵。另一個(gè)坐標(biāo)系統(tǒng)的SRID |
DIMEINFO屬性:
SQL>DESCRIBE? SDO_DIM_ARRAY
屬性的數(shù)據(jù)類型是MDSYS.SDO_DIM_ARRAY它是一個(gè)可變長(zhǎng)的SDO_DIM_ELEMENT類型的數(shù)組。其大小由維度決定,對(duì)于一個(gè)二維幾何體,則包行兩個(gè)SDO_DIM_ELEMENT。
SDO_DIM_ELEMENT包含如下屬性:
SDO_DIMNAME表示該維度的名稱,比如x,y
SDO_LB和SDO_UB 維度的上限和下限,比如經(jīng)度SDO_LB-180 SDO_UB 180.偉度經(jīng)度SDO_LB-90 SDO_UB 90.
SDO_TOLERANCE,容差值,比如A和B兩點(diǎn)相差0.5,則認(rèn)為是同一位置。
二、SDO_GEOMETRY數(shù)據(jù)類型
用數(shù)組,結(jié)構(gòu)體或帶有構(gòu)造函數(shù),功能函數(shù)的類來(lái)定義自己的對(duì)象類型。這樣的對(duì)象類型能用于屬性列的數(shù)據(jù)類型,也能用來(lái)創(chuàng)建對(duì)象表。而oracle spatial也正是基于此種特性所研發(fā)的一套空間數(shù)據(jù)處理系統(tǒng).
spatial 的自定義數(shù)據(jù)類型有非常多,都在mdsys方案下,經(jīng)常使用的是sdo_geometry類型。
sdo_geometry表示一個(gè)幾何對(duì)象,能是點(diǎn)、線、面、多點(diǎn)、多線、多面或混合對(duì)象。
spatial 在此數(shù)據(jù)類型的基礎(chǔ)上,實(shí)現(xiàn)了r樹空間索引和四叉樹空間索引,還以sql函數(shù)的形式實(shí)現(xiàn)了多種空間分析功能。
GEOLOC 定義結(jié)構(gòu)如下:
CREATE TYPE sdo_geometry AS OBJECT (
??? SDO_GTYPE NUMBER,
??? SDO_SRID NUMBER,
??? SDO_POINT SDO_POINT_TYPE,
??? SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,
??? SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);
)
(1)、SDO_GTYPE:用四個(gè)數(shù)字定義了所有的形狀
第一位:維數(shù)如二維、三維對(duì)應(yīng)的2和3
第二位:定義了LRS。一般是0;
最后兩位: 定義了地理對(duì)象的類型?,F(xiàn)在使用從00到07??????????
Value? Geometry Description?
00???? UNKNOWN_GEOMETRY Spatial ignores this value?
01???? POINT A single point element?
02???? LINE or CURVE Contains one line string element that may be linear, curved or both
03???? POLYGON Contains one polygon element with or without other polygon elements in it
04???? COLLECTION A heterogeneous collection of elements?
05???? MULTIPOINT Contains one or more points?
06???? MULTILINE or MULTICURVE Contains one or more line string elements?
07???? MULTIPOLYGON Contains multiple polygon elements that maybe disjoint
比如一條線的SDO_GTYPE:2002
(2)、SDO_SRID:定義了空間坐標(biāo)參考系統(tǒng)。NULL為笛卡爾坐標(biāo)系。
If SDO_SRID is null, no coordinate system is associated with the geometry.?
If SDO_SRID is not null, it must contain a value from the SRID column of the SDO_COORD_REF_SYS table,
and this value must be inserted into the SRID column of the USER_SDO_GEOM_METADATA view.
All geometries in a geometry column must have the same SDO_SRID value.
(3)、SDO_POINT:Oracle Spatial也可定義單個(gè)的點(diǎn),SDO_POINT的定義:
??? CREATE TYPE sdo_point_type AS OBJECT (X NUMBER,Y NUMBER,Z NUMBER); 如果是二維,Z為NULL。
??? 如果幾何類型為點(diǎn)類型的話,SDO_ELEM_INFO和SDO_ORDINATES對(duì)應(yīng)的值都為Null,SDO_POINT不為空。其它情況下,SDO_POINT會(huì)被Spatial所忽略即設(shè)為Null。如果這個(gè)層只有點(diǎn)對(duì)象,那么推薦你將其保存在SDO_POINT屬性中。
(3)、SDO_ELEM_INFO:定義了如何理解SDO_ORDINATES中的坐標(biāo)字符串屬性。
第一個(gè)數(shù):SDO_STARTING_OFFSET
第二個(gè)數(shù):SDO_ETYPE?
第三個(gè)數(shù):SDO_INTERPRETATION
a、SDO_STARTING_OFFSET:聲明了組成當(dāng)前幾何片段的第一個(gè)坐標(biāo)在SDO_ORDINATES數(shù)組中的坐標(biāo)序號(hào)。
????? 坐標(biāo)序號(hào)是從1開始起算的而非從0開始。這里的SDO_ORDINATES就是sdo_geometry 中的坐標(biāo)序列,
????? 坐標(biāo)序列是已逗號(hào)隔開的數(shù)字,具體的計(jì)算如:sdo_ordinate_array(1,4,6,7,8,9)中如果以'6'開始幾何片段的話,
????? 坐標(biāo)序號(hào)SDO_STARTING_OFFSET=3。
b、SDO_ETYPE :聲明元素的類型。可結(jié)合 SDO_STARTING_OFFSET和SDO_ETYPE 表來(lái)理解.
c、SDO_INTERPRETATION:可結(jié)合 SDO_STARTING_OFFSET和SDO_ETYPE 表來(lái)理解.
| SDO_ETYPE | SDO_INTERPRETATION | 組合含義 |
| 1 | 任何數(shù)(n) | 無(wú) |
| 1 | 1 | 普通單點(diǎn) |
| 1 | n | 多點(diǎn) |
| 2 | 1 | 直線段組成的多義線 |
| 2 | 2 | 曲線段組成的多義線 |
| 1003或者2003 | 1 | 系列直線段組成的多邊形 |
| 1003或者2003 | 2 | 系列曲線段組成的多邊形 |
| 1003或者2003 | 3 | 矩形 |
| 1003或者2003 | 4 | 圓 |
| 4 | n(n>1) | 直線段和曲線段組成的復(fù)雜多義線 |
| 1005或者2005 | n(n>1) | 直線段和曲線段組成的復(fù)雜多邊形 |
說(shuō)明:
SDO_ETYPE 值 = 1, 2, 1003,或2003,說(shuō)明幾何為簡(jiǎn)單的幾何類型。可以全部按SDO_ELEM_INFO 屬性單元[即三個(gè)以逗號(hào)隔開的數(shù)]來(lái)理解sdo_ordinate_array中的坐標(biāo)序列。
SDO_ETYPE 值 = 1003 ,假如幾何類型為面,則表示為外多邊形環(huán)(以逆時(shí)針順序)?
SDO_ETYPE 值 = 2003 ,假如幾何類型為面,則表示為內(nèi)多邊形環(huán)(以順時(shí)針順序)
SDO_ETYPE 值 = 4,1005或2005,說(shuō)明幾何為組合元素,往往第一個(gè)三數(shù)字組不是SDO_ELEM_INFO 屬性單元,而是為了說(shuō)明組合元素的信息。
SDO_ORDINATES:幾何圖形所有頂點(diǎn)列表。定義為 CREATE TYPE sdo_ordinate_array AS VARRAY (1048576) of NUMBER;
The SDO_ORDINATES attribute is defined using a varying length array (1048576) of NUMBER type
that stores the coordinate values that make up the boundary of a spatial object。比如構(gòu)造一條直線A,B直線,其中A點(diǎn)坐標(biāo)X0,Y0。B坐標(biāo)X1,Y1,則SDO_ORDINATES存儲(chǔ)的順序是X0,Y0,X1,Y1。
總結(jié)
以上是生活随笔為你收集整理的Oracle Spatial-元数据及SDO_GEOMETRY的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ST_Geometry操作报ora-01
- 下一篇: 优化mysql slave的同步速度