首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 11g 空間資料入門:SDO_GEOMETRY 型別結構與核心屬性詳解

     編輯:Oracle 資料庫基礎

SDO_GEOMETRY 型別定義

CREATE TYPE SDO_GEOMETRY AS OBJECT (
  SDO_GTYPE    NUMBER,        -- 幾何類型與維度
  SDO_SRID     NUMBER,        -- 空間參考系統 ID (EPSG 代碼)
  SDO_POINT    SDO_POINT_TYPE,-- 點幾何體專用 (X, Y, Z)
  SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY, -- 元素資訊陣列 (多邊形環、線串起點等)
  SDO_ORDINATES SDO_ORDINATE_ARRAY,  -- 座標陣列 (X1,Y1, X2,Y2, ...)

  MEMBER FUNCTION GET_GTYPE RETURN NUMBER DETERMINISTIC
  -- 更多成員函數:GET_DIMS, GET_LRS_DIM, ST_IsValid 等
);

核心屬性深度解析

SDO_GTYPE:幾何類型碼(4 位數字 DLTT)

  • D:維度(2=二維, 3=三維)
  • L:LRS 線性參考維度(0=無, 1=有 M 值)
  • TT:幾何類型
    • 00 = 未知/空
    • 01 = 點
    • 02 = 線串
    • 03 = 多邊形
    • 04 = 多點集合
    • 05 = 多線串集合
    • 06 = 多邊形集合
    • 07 = 幾何集合

範例:2003 = 二維多邊形;3302 = 三維含 LRS 線串。

SDO_SRID:空間參考系統

對應 MDSYS.CS_SRS 表中的 SRID。常用:8307 (WGS 84 經緯度)、3857 (Web Mercator)、32651 (WGS 84 UTM Zone 51N)。NULL 表示無座標系統(笛卡兒平面)。

SDO_POINT:點幾何體快捷儲存

CREATE TYPE SDO_POINT_TYPE AS OBJECT (X NUMBER, Y NUMBER, Z NUMBER);
-- 單點幾何體可直接填 SDO_POINT,SDO_ELEM_INFO/SDO_ORDINATES 留 NULL
INSERT INTO poi VALUES (1, 'Taipei 101',
  SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(121.5645, 25.0338, NULL), NULL, NULL));

SDO_ELEM_INFO / SDO_ORDINATES:複雜幾何體編碼

SDO_ELEM_INFO 為三元組陣列 (offset, etype, interpretation):

  • offset:在 SDO_ORDINATES 中的起始位置(1-based)
  • etype:元素類型(1=點, 2=線串, 1003/2003=外環/內環多邊形)
  • interpretation:直線/圓弧/複合曲線解讀方式

SDO_ORDINATES 為扁平化座標陣列 VARRAY(1048576) OF NUMBER。

建表與空間索引範例

CREATE TABLE parks (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(100),
  geom SDO_GEOMETRY
);

-- 插入矩形多邊形 (外環 1003, 逆時針)
INSERT INTO parks VALUES (1, 'DaAn Park',
  SDO_GEOMETRY(2003, 8307, NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1),
    SDO_ORDINATE_ARRAY(121.53,25.03, 121.55,25.03, 121.55,25.04, 121.53,25.04, 121.53,25.03)));

-- 建立空間索引(必須)
CREATE INDEX parks_spatial_idx ON parks(geom)
  INDEXTYPE IS MDSYS.SPATIAL_INDEX_V2
  PARAMETERS ('LAYER_GTYPE=POLYGON SDO_RTR_PCTFREE=0');

-- 空間查詢:範圍內的公園
SELECT name FROM parks
WHERE SDO_RELATE(geom,
  SDO_GEOMETRY(2003,8307,NULL,
    SDO_ELEM_INFO_ARRAY(1,1003,1),
    SDO_ORDINATE_ARRAY(121.52,25.02, 121.56,25.02, 121.56,25.05, 121.52,25.05, 121.52,25.02)),
  'MASK=ANYINTERACT') = 'TRUE';

後續學習方向

  • 空間運算子:SDO_FILTER(主過濾)、SDO_RELATE(拓撲關係)、SDO_NN(最近鄰)、SDO_WITHIN_DISTANCE(距離緩衝)
  • 幾何函數:SDO_GEOM.SDO_AREA、SDO_LENGTH、SDO_BUFFER、SDO_UNION、SDO_INTERSECTION
  • LRS 線性參考:里程樁、路網事件定位
  • 3D/點雲/網格:SDO_PC/SDO_TIN 型別
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved