王云帆
(太原理工大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,山西太原030024)
Oracle Spatial空間數(shù)據(jù)存儲管理技術(shù)的應(yīng)用研究
王云帆
(太原理工大學(xué)計算機(jī)科學(xué)與技術(shù)學(xué)院,山西太原030024)
通過論述Oracle Spatial空間數(shù)據(jù)模型,對Oracle Spatial的特點進(jìn)行探討,結(jié)合Oracle數(shù)據(jù)庫在空間數(shù)據(jù)方面的特性,應(yīng)用數(shù)據(jù)庫技術(shù)實現(xiàn)空間數(shù)據(jù)管理與操作,以及空間數(shù)據(jù)查詢、分析、轉(zhuǎn)換等功能。
Oracle Spatial;空間數(shù)據(jù)存儲;空間數(shù)據(jù)庫
Oracle Spatial是Oracle數(shù)據(jù)庫為實現(xiàn)快速、高效地存取、分析空間數(shù)據(jù)而將相關(guān)函數(shù)和過程集成在一起的專用組件。它以對象關(guān)系數(shù)據(jù)模型作為存取和管理空間信息的基礎(chǔ),應(yīng)用面向?qū)ο蟛僮骷夹g(shù)將存儲在Oracle Spatial中的多種元素信息相關(guān)聯(lián),以便進(jìn)行拓?fù)浞治雠c其他操作。它為數(shù)據(jù)庫管理系統(tǒng)管理空間數(shù)據(jù)提供了完全開放的體系結(jié)構(gòu)。其提供的各種功能在數(shù)據(jù)庫服務(wù)器內(nèi)完全集成。用戶通過SQL定義和操縱空間數(shù)據(jù),可以訪問標(biāo)準(zhǔn)的Oracle特性,如靈活的n層體系結(jié)構(gòu)、對象功能、Java存儲過程以及強(qiáng)健的數(shù)據(jù)庫管理工具等,從而具有了保證數(shù)據(jù)的完整性、可恢復(fù)性和安全性等特性,而在基于文件的或復(fù)合的傳統(tǒng)GIS、WebGIS體系結(jié)構(gòu)中幾乎不可能獲得這些特性。
1.存儲模型
Oracle Spatial在空間數(shù)據(jù)模型方面,其結(jié)構(gòu)如圖1所示。
圖1 Oracle Spatial的空間數(shù)據(jù)幾何學(xué)存儲模型
圖1中,空間圖層是具有相同屬性集的多種幾何體的集合,而幾何體是空間要素的集合,由對象元素的有序集組成,對象元素則是幾何體的基本組成單元。
Oracle Spatial以點、線、多邊形3種幾何類型為基本對象元素來抽象描繪現(xiàn)實世界的各種地物。另外,作為一種對象關(guān)系型數(shù)據(jù)庫,它還引入了圓弧、圓環(huán)、優(yōu)化矩形、復(fù)合線串、復(fù)合多邊形這些圖形作為基本對象元素(可看作由點、線、多邊形3種最基本的類型的混合而組成的,如圖2所示)。這種模型的優(yōu)點在于與用戶的交互過程中只需處理涉及的層,因而能夠?qū)τ脩舻男枨笞鞒隹焖俜磻?yīng)。
圖2 部分Oracle Spatial支持的基本對象元素及對應(yīng)幾何學(xué)圖形
2.基于SDO_GEOMETRY的對象數(shù)據(jù)類型
為實現(xiàn)對空間數(shù)據(jù)的存取、索引、分析等操作,在Oracle Spatial的對象關(guān)系模式中,定義了一種空間對象類型MDSYS.SDO_GEOMETRY,該類型和其他數(shù)據(jù)類型一樣可以單獨存儲于數(shù)據(jù)庫表的某一列中。該類型的結(jié)構(gòu)定義如下
其中各個參數(shù)的含義如下:
1)SDO_TYPE定義了存儲在SDO_GEOMETRY對象中的基本幾何體類型(如點、線、面等),SDO_ GTYPE的值是一個4位數(shù),格式為“ditt”。其中,d表示維數(shù)(如二維、三維或四維);i表示一個三維線性參考系中幾何體的線性參考系測量維的值(默認(rèn)為0);tt表示幾何體的類型(00到07表示了8種目前常用的幾何類型,08到99以備將來使用)。如SDO_GTYPE取值2003則表示二維的多邊形。表1是SDO_GTYPE的有效取值說明。
表1 SDO_GTYPE說明
2)SDO_SRID表示了空間對象所在的坐標(biāo)系統(tǒng),即空間參照系統(tǒng)。Oracle遵照OpenGIS規(guī)范定義了一組數(shù)字來表示不同的坐標(biāo)系統(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ù),當(dāng)SDO_ELEM_INFO與SDO_ ORDINATES不為空時,SDO_POINT被忽略。
SDO_POINT的數(shù)據(jù)類型為對象類型 SDO_ POINT_TYPE,如果用戶具有DBA角色,那么可利用視圖ALL_SOURCE或DBA_SOURCE來執(zhí)行下面的查詢進(jìn)而了解SDO_POINT_TYPE對象類型的定義。
此外,如果用戶直接以用戶MDSYS登錄數(shù)據(jù)庫,也可以用視圖USER_SOURCE來查詢抽象數(shù)據(jù)類型的結(jié)構(gòu)定義。
4)SDO_ELEM_INFO描繪了存儲在 SDO_ GEOMETRY對象中存儲各基本元素的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)類型為SDO_ELEM_INFO_ARRAY變長數(shù)組類型,同樣也可以按照上面介紹的方法來查詢其定義。
5)SDO_ORDINATES對象類型用來存儲空間對象的坐標(biāo)值,其數(shù)據(jù)類型也是一個變長數(shù)組類型SDO_ORDINATE_ARRAY。
SDO_ORDINATE_ARRAY變長數(shù)組由幾何體元素的坐標(biāo)組成,而這些坐標(biāo)的存儲方式在SDO_ ELEM_INFO_ARRAY中已經(jīng)進(jìn)行了預(yù)定義。
1.空間數(shù)據(jù)特征
Oracle Spatia是順應(yīng)GIS數(shù)據(jù)存儲與管理的需求而發(fā)展起來的,是在關(guān)系數(shù)據(jù)庫管理系統(tǒng)上增加MDSYS.SDO_GEOMETRY對象數(shù)據(jù)類型和對應(yīng)的空間數(shù)據(jù)管理函數(shù),從而實現(xiàn)對空間數(shù)據(jù)提供存儲和管理服務(wù)。利用Oracle Spatial可以在單個數(shù)據(jù)庫實例中實現(xiàn)非結(jié)構(gòu)化、有嵌套關(guān)系的空間、屬性數(shù)據(jù)的統(tǒng)一存儲和管理。它將同一圖層的空間對象存儲在同一張關(guān)系表中,屬性數(shù)據(jù)則作為普通的關(guān)系表列進(jìn)行存儲,當(dāng)涉及空間數(shù)據(jù)時使用對象模型,并將其作為一列存儲于關(guān)系表中。為了加速對空間信息的查詢,Oracle Spatial將空間索引功能引入數(shù)據(jù)庫引擎,這是一項重要特性。Oracle Spatial為建立空間數(shù)據(jù)的索引提供了基于線性四叉樹(Quad-tree)的索引方案和基于參照樹(R-tree)的索引方案,用戶可以根據(jù)需求任意選擇。一般的,當(dāng)為外部地理數(shù)據(jù)建立了空間數(shù)據(jù)表之后就可以建立空間索引。Oracle Spatial利用Oracle的可擴(kuò)展性框架將空間索引創(chuàng)建和查詢處理的接口與SQL引擎緊密集成,且索引創(chuàng)建和維護(hù)的語法只是對CREATE、ALTER及DROP語句的擴(kuò)展。
實體之間的空間關(guān)系是以與它們關(guān)聯(lián)的幾何體的位置為基礎(chǔ)的,而最普通的空間關(guān)系是以拓?fù)浜途嚯x準(zhǔn)則為基礎(chǔ)的。歐幾里得空間中兩個對象A和B之間的二元拓?fù)潢P(guān)系是以兩個對象A與B在它們內(nèi)部、邊界和外部如何相互作用為基礎(chǔ)的。這稱為兩個對象間拓?fù)潢P(guān)系的9相交模型,它們對A和B提供了相互之間的排他性和完全的覆蓋,這些關(guān)系是包含、被包含、覆蓋、被覆蓋、分離、相等、重疊和接觸。對于決定兩對象間拓?fù)潢P(guān)系的9相交模型,Oracle Spatial能夠完全支持,而其他關(guān)系都能夠通過對上述8種關(guān)系進(jìn)行組合而推導(dǎo)出來。
2.Oracle Spatial與ArcSDE的比較
ArcSDE是Esri推出的一種空間數(shù)據(jù)管理方法,它利用GIS計算模式和關(guān)系數(shù)據(jù)庫的優(yōu)勢,較好地解決了海量數(shù)據(jù)(大型數(shù)據(jù)庫)、多用戶共享、快速響應(yīng)的要求,在全球范圍內(nèi)得到了廣泛的應(yīng)用。
Oracle Spatial和ArcSDE雖然出自兩個不同的軟件公司,但卻有著相似的目標(biāo),都是為了能更好地滿足用戶對空間數(shù)據(jù)管理和使用的需要,但兩種技術(shù)還是存在一些差別。
1)兩者定位不同。Oracle Spatial強(qiáng)調(diào)的是使Oracle DBMS所管理的數(shù)據(jù)“空間化”,實際上是在原來的數(shù)據(jù)庫模型上增加了對ADT(抽象數(shù)據(jù)類型)、用戶自定義數(shù)據(jù)類型(包含對象類型)的支持,并進(jìn)行了空間數(shù)據(jù)模型的擴(kuò)展;而ArcSDE則更著重于空間數(shù)據(jù)的應(yīng)用,它所提供的API函數(shù)可供MapObjects、ArcView、Visual C++、Visual Basic、Java調(diào)用,方便了二次開發(fā),而非數(shù)據(jù)庫的空間化。
2)Oracle Spatial的對象相關(guān)VARRAY方式是所謂的“白箱”,即數(shù)據(jù)所包裹的內(nèi)容是可以直接訪問和操縱的;而ArcSDE的方式是所謂的“黑箱”,客戶端不能在數(shù)據(jù)庫表一級直接作底層數(shù)據(jù)對象結(jié)構(gòu)中的內(nèi)容,而是以對象形式對數(shù)據(jù)進(jìn)行管理的?!鞍紫洹钡暮锰幨瞧淇蛻舳说氖跈?quán)用戶可以直接通過SQL訪問數(shù)據(jù)。
3)在安裝Oracle DBMS時,只要在安裝向?qū)У奶崾鞠逻x擇支持Oracle Spatial之后基本不再需要其他的配置工作;由于ArcSDE采用的是C/S計算模式,故一般要在服務(wù)器端和客戶端分別安裝ArcSDE套件,并做必要的配置工作,相比而言,多了一些維護(hù)工作。
1.空間操作符和函數(shù)
標(biāo)準(zhǔn)SQL不具備操作空間數(shù)據(jù)的能力,因此Oracle Spatial對標(biāo)準(zhǔn)SQL進(jìn)行了擴(kuò)充,提供了完整的空間數(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ù)的索引、大地測量坐標(biāo)、空間索引分區(qū)以及線性參考等新特性的支持,在性能上比以前有了大幅提高。
2.應(yīng)用示例
下面以一個簡單的示例來介紹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ù)共享、分布式處理、網(wǎng)絡(luò)通信、開放式開發(fā)、并發(fā)控制、網(wǎng)絡(luò)化集成、跨平臺運行及數(shù)據(jù)安全恢復(fù)機(jī)制方面的問題。Oracle Spatial空間數(shù)據(jù)操作與標(biāo)準(zhǔn)SQL操作類似,易于使用,這使得以O(shè)racle Spatial為服務(wù)器端的空間數(shù)據(jù)、屬性數(shù)據(jù)和元數(shù)據(jù)得到統(tǒng)一管理,為空間數(shù)據(jù)的管理和利用帶來方便。
[1] 何原榮,李全杰,傅文杰.Oracle Spatial空間數(shù)據(jù)庫開發(fā)應(yīng)用指南[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ù)庫的學(xué)習(xí)。