基於SDO_GEOMETRY的ST_GEOMETRY
Oracle Spatial雖然使用了SDO_GEOMETRY類型作為幾何對象的儲存,不過它也提供了另外的一種類型ST_GEOMETRY,同時在此基礎上還提供了一些符合OGC Simple Features Access
規範的操作。
首先讓我們來看一下這個ST_GEOMETRY的定義:
CREATE OR REPLACE
TYPE ST_GEOMETRY AS OBJECT (
GEOM SDO_GEOMETRY,
MEMBER FUNCTION GET_SDO_GEOM RETURN SDO_GEOMETRY DETERMINISTIC,
…
)
可見,Oracle Spatial的ST_GEOMETRY事實上還是通過對SDO_GEOMETRY的封裝實現的。因此,我們可以通過最簡單的建構函式來構造一個ST_GEOMETRY對象:
ST_GEOMETRY(geom SDO_GEOMETRY);
或者,也可以使用具體的ST_GEOMETRY類型來構造,比如用ST_POINT來構造一個點,你會發現內部Oracle Spatial還是根據參數產生了一個SDO_GEOMETRY對象存放了起來:
SQL> select st_point(1,1) from dual;
ST_POINT(1,1)(GEOM(SDO_GTYPE, SDO_SRID, SDO_POINT(X, Y, Z), SDO_ELEM_INFO, SDO_ORDINATES))
------------------------------------------------------------------------------------------------------------------------
ST_POINT(SDO_GEOMETRY(2001, NULL, SDO_POINT_TYPE(1, 1, NULL), NULL, NULL))
因此,表面上看Oracle Spatial中與OGC規範相關的主要就包括三部分(見圖 2):兩張記錄幾何欄位和空間參考的系統資料表、一些ST打頭的物件類型和一些OGC打頭的空間操作函數。但是,由於ST_GEOMETRY使用的是SDO_GEOMETRY進行儲存,因此這些SDO相關的內容也會被使用到。
圖
2 Oracle Spatial中與OGC規範相關的內容