Arcgis創建SDE_Geometry、SDO_Geometry的區別

先初略的瞭解下SDE_Geometry和SDO_Geometry的區別:

1. SDO_GEOMETRY
        Oracle Spatial在MDSYS模式下定義了一系列幾何類型、函數來支持空間數據的存儲和使用,最爲人耳熟能詳的就是SDO_GEOMETRY這種類型——當然,ArcSDE也可以使用這種類型進行存儲。Oracle Spatial並沒有像ArcGIS那樣有一套從桌面到數據庫到服務器到開發包的全方位GIS產品體系,因此向Oracle中加載數據相比用ArcGIS要麻煩得多,同時也沒有那麼多的數據源格式的支持。Oracle本身則提供了一個工具shp2sdo[1],可以幫助你導入Shapefile到Oracle Spatial中。

        Oracle Spatial雖然使用了SDO_GEOMETRY類型作爲幾何對象的存儲,不過它也提供了另外的一種類型ST_GEOMETRY,同時在此基礎上還提供了一些符合OGCSimple Features Access規範的操作。


2.SDE_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相關的內容也會被使用到。


3、ArcGIS支持的

       從ArcSDE的Post Installation就可以看到,ArcSDE支持多種數據存儲方式,不但支持ESRI自身的ST_GEOMETRY,也支持BLOB和SDO_GEOMETRY類型。

      

ArcSDE中的ST_GEOMETRY和Oracle Spatial中基於SDO_GEOMETRY的ST_GEOMETRY完全是不相干的兩個東西。首先讓我們來看一下ArcSDE中ST_GEOMETRY類型的定義:

CREATE OR REPLACE

Type st_geometry Authid current_user AS object

(entity integer,numpts integer,minx float(64),

miny float(64),maxx float(64),maxy float(64),

minz float (64),maxz float(64),minm float(64),

maxm float(64),area float(64),len float(64),

srid integer,points blob,

constructor Function st_geometry(geom_str clob,srid number) Return self AS result deterministic,

member Function st_area Return number,

member Function st_len Return number,

member Function st_length Return number,

member Function st_entity Return number,

member Function st_numpts Return number,

member Function st_minx Return number,

member Function st_maxx Return number,

member Function st_miny Return number,

member Function st_maxy Return number,

member Function st_minm Return number,

member Function st_maxm Return number,

member Function st_minz Return number,

member Function st_maxz Return number,

member Function st_srid Return number,

static Function get_release Return number) NOT final;

可見,一個ST_GEOMETRY中包含了一個幾何對象的x、y、z、m座標的範圍、空間參考id、實體個數和點個數、幾何對象的面積和長度、具體的節點座標等信息。其中,節點座標屬性points比較特殊,這是一個blob類型的值。

讓我們打開ST_GEOMETRY類型的構造函數就可以發現,事實上對幾何對象的構造是通過ST_GEOMETRY_SHAPELIB_PKG這個包進行處理的,而這個包事實上會調用ESRI的ST_SHAPELIB這個外部動態鏈接庫,我們可以看一下ST_GEOMETRY_SHAPELIB_PKG包裏的geometryfromtext這個存儲過程,這個過程在ST_GEOMETRY的構造函數中被調用了。

4、Arcgis10.1的.net創建FeatureClass

      調用IFeatureWorkspace 類成員CreateFeatureClass,創建的Geometry類型可在Config.Keyword中指定。

     

     在創建FeatureClass過程中,若不指定Config.Keyword,默認使用Oracle Spatial中的DEFAULTS類型ST_Geometry(到Oracle Spatial中查看默認導入的Feature Class表數據,Shape顯示SDE.ST_GEOMETRY)。在使用CreateFeatureClass時,不建議Config.Keyword使用默認值。

    說明:從ArcGIS 9.3開始,新的ArcSDE eodatabases for Oracle 會默認使用ST_Geometry 方式來存儲空間數據。它實現了SQL3規範中的用戶自定義類型(user-defined data types),允許用戶使用ST_Geometry類型創建列來存儲諸如界址點,街道,地塊等空間數據。

     備註:此文章中的Oracle Spatial的SDO_Geometry、ST_Geometry的相關內容,從ArcSDE vs. Oracle Spatial


發佈了64 篇原創文章 · 獲贊 9 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章