Oracle Spatial-中繼資料及SDO_GEOMETRY

來源:互聯網
上載者:User

一、空間表的中繼資料

將表的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。

參考列子:


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.