Oracle Spatial 簡介
首先Oracle 支持自定義的數據類型你可以用數組結構體或者帶有構造函數功能函數的類來定義自己的對象類型這樣的對象類型可以用於屬性列的數據類型也可以用來創建對象表而Oracle Spatial也正是基於此種特性所開發的一套空間數據處理系統
Spatial 的自定義數據類型有很多都在MDSYS方案下經常使用的是SDO_GEOMETRY類型SDO_GEOMETRY表示一個幾何對象可以是點線面多點多線多面或混合對象
Spatial 在此數據類型的基礎上實現了R樹空間索引和四叉樹空間索引還以sql函數的形式實現了多種空間分析功能
Oracle Spatial 使用
將SDO_GEOMETRY數據類型作為數據表的一個列
CREATE TABLE cola_markets (
mkt_id NUMBER PRIMARY KEY
name VARCHAR()
shape MDSYSSDO_GEOMETRY);
填寫空間元數據
INSERT INTO USER_SDO_GEOM_METADATA
VALUES (
cola_markets
shape
MDSYSSDO_DIM_ARRAY( X grid
MDSYSSDO_DIM_ELEMENT(X )
MDSYSSDO_DIM_ELEMENT(Y )
)
NULL SRID
);
創建空間索引
CREATE INDEX cola_spatial_idx
ON cola_markets(shape)
INDEXTYPE IS MDSYSSPATIAL_INDEX;
至此空間數據表的創建才算正式完成
插入空間數據空間數據的插入要
INSERT INTO cola_markets VALUES(
cola_b
MDSYSSDO_GEOMETRY(
dimensional polygon
NULL
NULL
MDSYSSDO_ELEM_INFO_ARRAY() one polygon (exterior polygon ring)
MDSYSSDO_ORDINATE_ARRAY( )
)
);
空間分析查詢示例
Return the topological difference of two geometries
SELECT SDO_GEOMSDO_DIFFERENCE(c_ashape mdiminfo c_cshape mdiminfo)
FROM cola_markets c_a cola_markets c_c user_sdo_geom_metadata m
WHERE mtable_name = COLA_MARKETS AND lumn_name = SHAPE
AND c_aname = cola_a AND c_cname = cola_c;
From:http://tw.wingwit.com/Article/program/Oracle/201311/17948.html