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