王云帆
(太原理工大學計算機科學與技術學院,山西太原030024)
Oracle Spatial空間數(shù)據(jù)存儲管理技術的應用研究
王云帆
(太原理工大學計算機科學與技術學院,山西太原030024)
通過論述Oracle Spatial空間數(shù)據(jù)模型,對Oracle Spatial的特點進行探討,結合Oracle數(shù)據(jù)庫在空間數(shù)據(jù)方面的特性,應用數(shù)據(jù)庫技術實現(xiàn)空間數(shù)據(jù)管理與操作,以及空間數(shù)據(jù)查詢、分析、轉換等功能。
Oracle Spatial;空間數(shù)據(jù)存儲;空間數(shù)據(jù)庫
Oracle Spatial是Oracle數(shù)據(jù)庫為實現(xiàn)快速、高效地存取、分析空間數(shù)據(jù)而將相關函數(shù)和過程集成在一起的專用組件。它以對象關系數(shù)據(jù)模型作為存取和管理空間信息的基礎,應用面向對象操作技術將存儲在Oracle Spatial中的多種元素信息相關聯(lián),以便進行拓撲分析與其他操作。它為數(shù)據(jù)庫管理系統(tǒng)管理空間數(shù)據(jù)提供了完全開放的體系結構。其提供的各種功能在數(shù)據(jù)庫服務器內完全集成。用戶通過SQL定義和操縱空間數(shù)據(jù),可以訪問標準的Oracle特性,如靈活的n層體系結構、對象功能、Java存儲過程以及強健的數(shù)據(jù)庫管理工具等,從而具有了保證數(shù)據(jù)的完整性、可恢復性和安全性等特性,而在基于文件的或復合的傳統(tǒng)GIS、WebGIS體系結構中幾乎不可能獲得這些特性。
1.存儲模型
Oracle Spatial在空間數(shù)據(jù)模型方面,其結構如圖1所示。

圖1 Oracle Spatial的空間數(shù)據(jù)幾何學存儲模型
圖1中,空間圖層是具有相同屬性集的多種幾何體的集合,而幾何體是空間要素的集合,由對象元素的有序集組成,對象元素則是幾何體的基本組成單元。
Oracle Spatial以點、線、多邊形3種幾何類型為基本對象元素來抽象描繪現(xiàn)實世界的各種地物。另外,作為一種對象關系型數(shù)據(jù)庫,它還引入了圓弧、圓環(huán)、優(yōu)化矩形、復合線串、復合多邊形這些圖形作為基本對象元素(可看作由點、線、多邊形3種最基本的類型的混合而組成的,如圖2所示)。這種模型的優(yōu)點在于與用戶的交互過程中只需處理涉及的層,因而能夠對用戶的需求作出快速反應。

圖2 部分Oracle Spatial支持的基本對象元素及對應幾何學圖形
2.基于SDO_GEOMETRY的對象數(shù)據(jù)類型
為實現(xiàn)對空間數(shù)據(jù)的存取、索引、分析等操作,在Oracle Spatial的對象關系模式中,定義了一種空間對象類型MDSYS.SDO_GEOMETRY,該類型和其他數(shù)據(jù)類型一樣可以單獨存儲于數(shù)據(jù)庫表的某一列中。該類型的結構定義如下


其中各個參數(shù)的含義如下:
1)SDO_TYPE定義了存儲在SDO_GEOMETRY對象中的基本幾何體類型(如點、線、面等),SDO_ GTYPE的值是一個4位數(shù),格式為“ditt”。其中,d表示維數(shù)(如二維、三維或四維);i表示一個三維線性參考系中幾何體的線性參考系測量維的值(默認為0);tt表示幾何體的類型(00到07表示了8種目前常用的幾何類型,08到99以備將來使用)。如SDO_GTYPE取值2003則表示二維的多邊形。表1是SDO_GTYPE的有效取值說明。

表1 SDO_GTYPE說明
2)SDO_SRID表示了空間對象所在的坐標系統(tǒng),即空間參照系統(tǒng)。Oracle遵照OpenGIS規(guī)范定義了一組數(shù)字來表示不同的坐標系統(tǒng),并存儲在表MDSYS.CS_SRS中。如果SDO_SRID的值不為空,那么它一定可以從表MDSYS.CS_SRS中的SIRD字段中找到,并且這個值還必須插入到空間元數(shù)據(jù)視圖USER SDO_GEOM_METADATA的SRID字段中。
3)SDO_POINT只用于在SDO_GEOMETRY對象中存儲點數(shù)據(jù),當SDO_ELEM_INFO與SDO_ ORDINATES不為空時,SDO_POINT被忽略。
SDO_POINT的數(shù)據(jù)類型為對象類型 SDO_ POINT_TYPE,如果用戶具有DBA角色,那么可利用視圖ALL_SOURCE或DBA_SOURCE來執(zhí)行下面的查詢進而了解SDO_POINT_TYPE對象類型的定義。

此外,如果用戶直接以用戶MDSYS登錄數(shù)據(jù)庫,也可以用視圖USER_SOURCE來查詢抽象數(shù)據(jù)類型的結構定義。
4)SDO_ELEM_INFO描繪了存儲在 SDO_ GEOMETRY對象中存儲各基本元素的數(shù)據(jù)結構,數(shù)據(jù)類型為SDO_ELEM_INFO_ARRAY變長數(shù)組類型,同樣也可以按照上面介紹的方法來查詢其定義。
5)SDO_ORDINATES對象類型用來存儲空間對象的坐標值,其數(shù)據(jù)類型也是一個變長數(shù)組類型SDO_ORDINATE_ARRAY。
SDO_ORDINATE_ARRAY變長數(shù)組由幾何體元素的坐標組成,而這些坐標的存儲方式在SDO_ ELEM_INFO_ARRAY中已經進行了預定義。
1.空間數(shù)據(jù)特征
Oracle Spatia是順應GIS數(shù)據(jù)存儲與管理的需求而發(fā)展起來的,是在關系數(shù)據(jù)庫管理系統(tǒng)上增加MDSYS.SDO_GEOMETRY對象數(shù)據(jù)類型和對應的空間數(shù)據(jù)管理函數(shù),從而實現(xiàn)對空間數(shù)據(jù)提供存儲和管理服務。利用Oracle Spatial可以在單個數(shù)據(jù)庫實例中實現(xiàn)非結構化、有嵌套關系的空間、屬性數(shù)據(jù)的統(tǒng)一存儲和管理。它將同一圖層的空間對象存儲在同一張關系表中,屬性數(shù)據(jù)則作為普通的關系表列進行存儲,當涉及空間數(shù)據(jù)時使用對象模型,并將其作為一列存儲于關系表中。為了加速對空間信息的查詢,Oracle Spatial將空間索引功能引入數(shù)據(jù)庫引擎,這是一項重要特性。Oracle Spatial為建立空間數(shù)據(jù)的索引提供了基于線性四叉樹(Quad-tree)的索引方案和基于參照樹(R-tree)的索引方案,用戶可以根據(jù)需求任意選擇。一般的,當為外部地理數(shù)據(jù)建立了空間數(shù)據(jù)表之后就可以建立空間索引。Oracle Spatial利用Oracle的可擴展性框架將空間索引創(chuàng)建和查詢處理的接口與SQL引擎緊密集成,且索引創(chuàng)建和維護的語法只是對CREATE、ALTER及DROP語句的擴展。
實體之間的空間關系是以與它們關聯(lián)的幾何體的位置為基礎的,而最普通的空間關系是以拓撲和距離準則為基礎的。歐幾里得空間中兩個對象A和B之間的二元拓撲關系是以兩個對象A與B在它們內部、邊界和外部如何相互作用為基礎的。這稱為兩個對象間拓撲關系的9相交模型,它們對A和B提供了相互之間的排他性和完全的覆蓋,這些關系是包含、被包含、覆蓋、被覆蓋、分離、相等、重疊和接觸。對于決定兩對象間拓撲關系的9相交模型,Oracle Spatial能夠完全支持,而其他關系都能夠通過對上述8種關系進行組合而推導出來。
2.Oracle Spatial與ArcSDE的比較
ArcSDE是Esri推出的一種空間數(shù)據(jù)管理方法,它利用GIS計算模式和關系數(shù)據(jù)庫的優(yōu)勢,較好地解決了海量數(shù)據(jù)(大型數(shù)據(jù)庫)、多用戶共享、快速響應的要求,在全球范圍內得到了廣泛的應用。
Oracle Spatial和ArcSDE雖然出自兩個不同的軟件公司,但卻有著相似的目標,都是為了能更好地滿足用戶對空間數(shù)據(jù)管理和使用的需要,但兩種技術還是存在一些差別。
1)兩者定位不同。Oracle Spatial強調的是使Oracle DBMS所管理的數(shù)據(jù)“空間化”,實際上是在原來的數(shù)據(jù)庫模型上增加了對ADT(抽象數(shù)據(jù)類型)、用戶自定義數(shù)據(jù)類型(包含對象類型)的支持,并進行了空間數(shù)據(jù)模型的擴展;而ArcSDE則更著重于空間數(shù)據(jù)的應用,它所提供的API函數(shù)可供MapObjects、ArcView、Visual C++、Visual Basic、Java調用,方便了二次開發(fā),而非數(shù)據(jù)庫的空間化。
2)Oracle Spatial的對象相關VARRAY方式是所謂的“白箱”,即數(shù)據(jù)所包裹的內容是可以直接訪問和操縱的;而ArcSDE的方式是所謂的“黑箱”,客戶端不能在數(shù)據(jù)庫表一級直接作底層數(shù)據(jù)對象結構中的內容,而是以對象形式對數(shù)據(jù)進行管理的。“白箱”的好處是其客戶端的授權用戶可以直接通過SQL訪問數(shù)據(jù)。
3)在安裝Oracle DBMS時,只要在安裝向導的提示下選擇支持Oracle Spatial之后基本不再需要其他的配置工作;由于ArcSDE采用的是C/S計算模式,故一般要在服務器端和客戶端分別安裝ArcSDE套件,并做必要的配置工作,相比而言,多了一些維護工作。
1.空間操作符和函數(shù)
標準SQL不具備操作空間數(shù)據(jù)的能力,因此Oracle Spatial對標準SQL進行了擴充,提供了完整的空間數(shù)據(jù)操作函數(shù),使得用戶可以直接在SQL語句中使用這些函數(shù)。但這些函數(shù)僅限于在Oracle數(shù)據(jù)庫平臺上使用。
Oracle Spatial提供多個函數(shù)/運算符用以操縱空間數(shù)據(jù),包括SDO_WITHIN_DISTANCE、SDO_FILTER、SDO_NN、SDO_GEOM.UNION()、SDO_GEOM.DIFFERENCE()、SDO_GEOM.INTERSECT()、SDO_ GEOM.LEGNTH()、SDO_GEOM.AREA()等。
在Oracle Spatial中,還提供了對空間聚合、基于函數(shù)的索引、大地測量坐標、空間索引分區(qū)以及線性參考等新特性的支持,在性能上比以前有了大幅提高。
2.應用示例
下面以一個簡單的示例來介紹Oracle Spatial的基本操作。如圖3所示。

圖3 可樂的興趣區(qū)域


至此,利用Oracle Spatial完成了空間數(shù)據(jù)存儲和管理操作。
Oracle Spatial作為Oracle數(shù)據(jù)庫中的一個GIS組件,通過提供一個對象數(shù)據(jù)類型SDO_GEOMETRY、索引功能和多個針對SDO_GEOMETRY的函數(shù)、運算符等,能夠在Oracle數(shù)據(jù)庫中實現(xiàn)對空間數(shù)據(jù)的存取、索引、分析等操作。采用Oracle Spatial存儲、管理空間數(shù)據(jù),易于解決數(shù)據(jù)共享、分布式處理、網絡通信、開放式開發(fā)、并發(fā)控制、網絡化集成、跨平臺運行及數(shù)據(jù)安全恢復機制方面的問題。Oracle Spatial空間數(shù)據(jù)操作與標準SQL操作類似,易于使用,這使得以Oracle Spatial為服務器端的空間數(shù)據(jù)、屬性數(shù)據(jù)和元數(shù)據(jù)得到統(tǒng)一管理,為空間數(shù)據(jù)的管理和利用帶來方便。
[1] 何原榮,李全杰,傅文杰.Oracle Spatial空間數(shù)據(jù)庫開發(fā)應用指南[M].北京:測繪出版社,2008.
On the Application of Oracle Spatial Spatial Data Memory Management Technique
WANG Yunfan
0494-0911(2011)06-0076-04
P208
B
2011-04-06
王云帆(1990—),男,北京人,本科生,主要從事空間數(shù)據(jù)庫的學習。