Oracle Spatial-元数据及SDO_GEOMETRY
一、空間表的元數據
將表的SDO_GEOMETRY列的所有對象作為一個空間層。Spatial需要對所有空間對象進行驗證、創建索引和查詢。此時需要為圖層指定適當的元數據,該數據包含如下信息:維度、維度邊界、容差、坐標系。每個圖層的上述信息填充到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,則沒有指定坐標系統,如果SDO_SRID不為null,那么它的值必須在在MDSYS.CS_SRS表中的 SRID 列有對應的值。
| MDSYS.CS_SRS表 | ||
| 列名 | 類型 | 列名描述 |
| CS_NAME | VARCHAR2(68) | 坐標系統名稱 |
| SRID | NUMBER(38) | 空間參考ID,為唯一值。1-999999為spatial使用的空間參考,1000000以后為用戶自定義 |
| AUTH_SRID | NUMBER(38) | 可選的SRID,是個外鍵。另一個坐標系統的SRID |
DIMEINFO屬性:
SQL>DESCRIBE? SDO_DIM_ARRAY
屬性的數據類型是MDSYS.SDO_DIM_ARRAY它是一個可變長的SDO_DIM_ELEMENT類型的數組。其大小由維度決定,對于一個二維幾何體,則包行兩個SDO_DIM_ELEMENT。
SDO_DIM_ELEMENT包含如下屬性:
SDO_DIMNAME表示該維度的名稱,比如x,y
SDO_LB和SDO_UB 維度的上限和下限,比如經度SDO_LB-180 SDO_UB 180.偉度經度SDO_LB-90 SDO_UB 90.
SDO_TOLERANCE,容差值,比如A和B兩點相差0.5,則認為是同一位置。
二、SDO_GEOMETRY數據類型
用數組,結構體或帶有構造函數,功能函數的類來定義自己的對象類型。這樣的對象類型能用于屬性列的數據類型,也能用來創建對象表。而oracle spatial也正是基于此種特性所研發的一套空間數據處理系統.
spatial 的自定義數據類型有非常多,都在mdsys方案下,經常使用的是sdo_geometry類型。
sdo_geometry表示一個幾何對象,能是點、線、面、多點、多線、多面或混合對象。
spatial 在此數據類型的基礎上,實現了r樹空間索引和四叉樹空間索引,還以sql函數的形式實現了多種空間分析功能。
GEOLOC 定義結構如下:
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:用四個數字定義了所有的形狀
第一位:維數如二維、三維對應的2和3
第二位:定義了LRS。一般是0;
最后兩位: 定義了地理對象的類型。現在使用從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:定義了空間坐標參考系統。NULL為笛卡爾坐標系。
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也可定義單個的點,SDO_POINT的定義:
??? CREATE TYPE sdo_point_type AS OBJECT (X NUMBER,Y NUMBER,Z NUMBER); 如果是二維,Z為NULL。
??? 如果幾何類型為點類型的話,SDO_ELEM_INFO和SDO_ORDINATES對應的值都為Null,SDO_POINT不為空。其它情況下,SDO_POINT會被Spatial所忽略即設為Null。如果這個層只有點對象,那么推薦你將其保存在SDO_POINT屬性中。
(3)、SDO_ELEM_INFO:定義了如何理解SDO_ORDINATES中的坐標字符串屬性。
第一個數:SDO_STARTING_OFFSET
第二個數:SDO_ETYPE?
第三個數:SDO_INTERPRETATION
a、SDO_STARTING_OFFSET:聲明了組成當前幾何片段的第一個坐標在SDO_ORDINATES數組中的坐標序號。
????? 坐標序號是從1開始起算的而非從0開始。這里的SDO_ORDINATES就是sdo_geometry 中的坐標序列,
????? 坐標序列是已逗號隔開的數字,具體的計算如:sdo_ordinate_array(1,4,6,7,8,9)中如果以'6'開始幾何片段的話,
????? 坐標序號SDO_STARTING_OFFSET=3。
b、SDO_ETYPE :聲明元素的類型。可結合 SDO_STARTING_OFFSET和SDO_ETYPE 表來理解.
c、SDO_INTERPRETATION:可結合 SDO_STARTING_OFFSET和SDO_ETYPE 表來理解.
| SDO_ETYPE | SDO_INTERPRETATION | 組合含義 |
| 1 | 任何數(n) | 無 |
| 1 | 1 | 普通單點 |
| 1 | n | 多點 |
| 2 | 1 | 直線段組成的多義線 |
| 2 | 2 | 曲線段組成的多義線 |
| 1003或者2003 | 1 | 系列直線段組成的多邊形 |
| 1003或者2003 | 2 | 系列曲線段組成的多邊形 |
| 1003或者2003 | 3 | 矩形 |
| 1003或者2003 | 4 | 圓 |
| 4 | n(n>1) | 直線段和曲線段組成的復雜多義線 |
| 1005或者2005 | n(n>1) | 直線段和曲線段組成的復雜多邊形 |
說明:
SDO_ETYPE 值 = 1, 2, 1003,或2003,說明幾何為簡單的幾何類型。可以全部按SDO_ELEM_INFO 屬性單元[即三個以逗號隔開的數]來理解sdo_ordinate_array中的坐標序列。
SDO_ETYPE 值 = 1003 ,假如幾何類型為面,則表示為外多邊形環(以逆時針順序)?
SDO_ETYPE 值 = 2003 ,假如幾何類型為面,則表示為內多邊形環(以順時針順序)
SDO_ETYPE 值 = 4,1005或2005,說明幾何為組合元素,往往第一個三數字組不是SDO_ELEM_INFO 屬性單元,而是為了說明組合元素的信息。
SDO_ORDINATES:幾何圖形所有頂點列表。定義為 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。比如構造一條直線A,B直線,其中A點坐標X0,Y0。B坐標X1,Y1,則SDO_ORDINATES存儲的順序是X0,Y0,X1,Y1。
總結
以上是生活随笔為你收集整理的Oracle Spatial-元数据及SDO_GEOMETRY的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ST_Geometry操作报ora-01
- 下一篇: 优化mysql slave的同步速度