ArcSDE vs. Oracle Spatial 6

來源:互聯網
上載者:User
· ArcSDE

從ArcSDE的Post Installation就可以看到,ArcSDE支援多種資料存放區方式,不但支援ESRI自身的ST_GEOMETRY,也支援BLOB和SDO_GEOMETRY類型。

圖 3 ArcSDE支援的儲存格式

1. ST_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的建構函式中被調用了:

Procedure geometryfromtext (shptxt IN clob,

…,

points IN Out blob )

AS

language c

name "GeometryFromText"

library st_shapelib

WITH CONTEXT

parameters (

CONTEXT,

shptxt ociloblocator, shptxt Indicator short,

…,

points ociloblocator, points Indicator short

);

再具體一點,比如我們建立了一個ST_POINT對象,我們可能比較關心在Oracle的層面到底上發生了些什麼事情?比如我們通過SQL執行了這樣一條語句:

SQL> select sde.st_point(1,1,0) from dual;

顯然,它會調用ST_POINT的建構函式,這個建構函式大體是這個樣子的:

constructor Function st_point(pt_x number,pt_y number,srid number)

Return self AS result

IS

…;

Begin

…;

geom_clob := 'POINT('||pt_x||' '||pt_y||')';

SDE.st_geometry_shapelib_pkg.geometryfromtext(geom_clob,spref_r.srid,spref_r.x_offset,spref_r.y_offset,spref_r.xyunits, spref_r.z_offset,spref_r.z_scale,spref_r.m_offset,spref_r.m_scale, spref_r.Definition,geom_type,shape.numpts,shape.entity,shape.minx,shape.miny, shape.maxx,shape.maxy,shape.minz,shape.maxz,shape.minm,shape.maxm, shape.area,shape.len,shape.points);

…;

End;

這個建構函式做了2件事情:一是通過參數構造了一個WKT[1]
表述的幾何對象字串;二是通過調用ST_SHAPELIB連結庫實現了從字串到幾何對象的轉化,返回的一系列值構成了ST_POINT對象。最後存在Oracle中的實際上是二進位對象:

SQL> select sde.st_point(1,1,0) from dual;

SDE.ST_POINT(1,1,0)(ENTITY, NUMPTS, MINX, MINY, MAXX, MAXY, MINZ, MAXZ, MINM, MAXM, AREA, LEN, SRID, POINTS)

------------------------------------------------------------------------------------------------------------------------

ST_POINT(1, 1, 1, 1, 1, 1, NULL, NULL, NULL, NULL, 0, 0, 0, '0C0000000100000080A8B3D7AB1780A8B3D7AB17')

[1]
http://en.wikipedia.org/wiki/Well-known_text

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.