ArcSDE vs. Oracle Spatial 2

來源:互聯網
上載者:User
I. 幾何對象
· Oracle Spatial
1. SDO_GEOMETRY

Oracle Spatial在MDSYS模式下定義了一系列幾何類型、函數來支援空間資料的儲存和使用,最為人耳熟能詳的就是SDO_GEOMETRY這種類型——當然,ArcSDE也可以使用這種類型進行儲存。讓我們首先來看一下SDO_GEOMETRY的定義:

CREATE OR REPLACE

TYPE SDO_GEOMETRY AS OBJECT (

SDO_GTYPE NUMBER,

SDO_SRID NUMBER,

SDO_POINT SDO_POINT_TYPE,

SDO_ELEM_INFO SDO_ELEM_INFO_ARRAY,

SDO_ORDINATES SDO_ORDINATE_ARRAY,

MEMBER FUNCTION GET_GTYPE

RETURN NUMBER DETERMINISTIC,

MEMBER FUNCTION GET_DIMS

RETURN NUMBER DETERMINISTIC,

MEMBER FUNCTION GET_LRS_DIM

RETURN NUMBER DETERMINISTIC)

ALTER TYPE SDO_GEOMETRY

ADD MEMBER FUNCTION GET_WKB RETURN BLOB DETERMINISTIC,

ADD MEMBER FUNCTION GET_WKT RETURN CLOB DETERMINISTIC,

ADD MEMBER FUNCTION ST_CoordDim RETURN SMALLINT DETERMINISTIC,

ADD MEMBER FUNCTION ST_IsValid RETURN INTEGER DETERMINISTIC,

ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN CLOB,

srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,

ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkt IN VARCHAR2,

srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT,

ADD CONSTRUCTOR FUNCTION SDO_GEOMETRY(wkb IN BLOB,

srid IN INTEGER DEFAULT NULL) RETURN SELF AS RESULT

CASCADE

其中的SDO_GTYPE屬性是一個4位的NUMBER類型對象,這個4位的數字表示了這個幾何對象的類型,讓我們來看看這4個數字如何來約定幾何類型。

這4個數位形式為“DLTT”,其中D代表維數,可以取值為2、3、4;L代表線性參考,如果沒有取值為0;TT代表幾何類型,取值為00到09,這00到09的取值也是有講究的,下表就是不同值對應的幾何類型:

DL00

UNKNOWN_GEOMETRY

未知類型

DL01

POINT

DL02

LINE or CURVE

線/曲線

DL03

POLYGON or SURFACE

面/曲面

DL04

COLLECTION

其它任何幾何類型的集合

DL05

MULTIPOINT

POINT的集合

DL06

MULTILINE or MULTICURVE

LINE or CURVE的集合

DL07

MULTIPOLYGON or MULTISURFACE

POLYGON or SURFACE的集合

DL08

SOLID

實體,由若干個三維閉合的表面組成

DL09

MULTISOLID

SOLID的集合


1 SDO_GTYPE的約定

SDO_GEOMETRY中的SDO_SRID屬性代表了幾何對象的座標系統,它要麼是空,要麼是一個在SDO_COORD_REF_SYS中定義的SRID值,比如我們最熟悉的4326等等。

SDO_GEOMETRY中的SDO_POINT屬性是一個SDO_POINT_TYPE類型的對象,這個類型很簡單:

CREATE OR REPLACE

TYPE SDO_POINT_TYPE AS OBJECT (

X NUMBER,

Y NUMBER,

Z NUMBER)

其實,SDO_POINT_TYPE類型對象就代表了一個點,而在SDO_GEOMETRY中,只有當SDO_ELEM_INFO和SDO_ORDINATES屬性都為空白的時候,這個SDO_POINT屬性才會被解析。事實上,從下面我們可以看到,SDO_ELEM_INFO和SDO_ORDINATES屬性才是一般存放幾何對象的地方。但是,Oracle建議如果是一個空間表中只有點資料,那麼使用SDO_POINT進行儲存會提高效能。不得不說,Oracle在這個地方的定義實在是有點不太優雅。

SDO_GEOMETRY的SDO_ELEM_INFO和SDO_ORDINATES屬性分別是SDO_ELEM_INFO_ARRAY和SDO_ORDINATE_ARRAY類型,這兩個類型都是存放NUMBER的數組。SDO_ELEM_INFO和SDO_ORDINATES屬性是要配合起來解析的:

SDO_ELEM_INFO指定了在SDO_ORDINATES屬性中儲存的座標形式應當如何解釋,依次每3個值一組,每個組代表一個“Element”,每組中的3個值分別是: SDO_STARTING_OFFSET、SDO_ETYPE、SDO_INTERPRETATION,SDO_STARTING_OFFSET代表了從SDO_ORDINATES中開始解析的座標序號;SDO_ETYPE和SDO_INTERPRETATION則配合起來解析(又一對需要配合起來解析屬性!):

SDO_ETYPE

SDO_INTERPRETATION

含義

0

任意值

不支援的類型,比如曲線和樣條曲線

1

1

1

0

有向點,除了實際點的座標,還包含虛擬指向方向

1

N>1

有n個點的點集

2

1

直線

2

2

圓弧構成的多段線,1、2、3點構成第一個圓弧,3、4、5點構成第二個圓弧…

1003或2003

1

多邊形,最後一個點必須和第一個點相同以閉合

1003或2003

2

圓弧構成的多邊形,1、2、3點構成第一個圓弧,3、4、5點構成第二個圓弧…

1003或2003

3

矩形,包含兩個點:左下角和右上方

1003或2003

4

圓形,包含3個在圓上的點

4

N>1

複合線,有些線段是直線,有些線段是圓弧

1005或2005

N>1

複合多邊形,有些線段是直線,有些線段是圓弧


2 SDO_ELEM_INFO的含義

SDO_ORDINATES屬性相對就簡單一點了,它就是記錄所有點座標的數組,具體如何解析和SDO_ETYPE有關,注意,對於多邊形來說,外環座標點應按逆時針排列,內環座標點應按順時針排列,且都需要閉合。Btw:SDO_ORDINATE的最大大小為1,048,576,因此,一個SDO_GEOMETRY對象最大的頂點數: 二維點524,288個,三維點349,525個,四維點262,144個。

OK,到此為止,Oracle Spatial對於SDO_GEOMETRY類型的描述算是基本結束了,是不是有點讓你感到混沌、還帶上一點戰戰兢兢的感覺?希望下面的這個圖可以讓你稍微減輕一點這種感覺:

圖 1 SDO_GEOMETRY的描述

聯繫我們

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