摘 要:文章探討Oracle數(shù)據(jù)庫系統(tǒng)中對空間數(shù)據(jù)存儲的解決方案,并介紹針對對象-關(guān)系模型下空間數(shù)據(jù)的存儲和管理,著重討論基于Oracle9i的GIS 空間分析和基于MapX的GIS 空間分析,并就這兩種方式的空間分析的性能進(jìn)行比較。
關(guān)鍵詞: MapX;空間索引;對象-關(guān)系模型;空間分析
1 MapX與 Oracle9i 簡介
MapX是MapInfo公司向用戶提供的具有強(qiáng)大地圖分析功能的ActiveX控件產(chǎn)品。由于它是一種基于Windows操作系統(tǒng)的標(biāo)準(zhǔn)控件,因而能支持絕大多數(shù)標(biāo)準(zhǔn)的可視化開發(fā)環(huán)境如Visual C++、Visual Basic、Delphi、PowerBuilder等。編程人員在開發(fā)過程中可以選用自己最熟悉的開發(fā)語言,輕松地將地圖功能嵌入到應(yīng)用中,并且可以脫離MapInfo的軟件平臺運行。 [1] [5]
Oracle Spatial 是部署企業(yè)范圍的空間信息系統(tǒng)和基于 web 以及基于位置的無線應(yīng)用程序的基礎(chǔ)。它為位置信息提供數(shù)據(jù)管理,這些信息包括道路網(wǎng)絡(luò)、無線服務(wù)邊界以及地理編碼的客戶地址,它們正在推動著新興的在線、移動以及車載遠(yuǎn)程信息處理市場領(lǐng)域創(chuàng)新性的產(chǎn)品開發(fā)。[2]
2 Oracle Spatial的對象-關(guān)系模型
Oracle Spatial是針對存儲在oracle8i或Oracle9i中的空間元素集合提供的一種SQL的模式來完成存儲、輸出,修改和查詢的功能。
Oracle支持兩種表現(xiàn)空間元素的機(jī)制和模型:
(1)關(guān)系式模型。用多行記錄和字段類型為Number的一張表來表示一個空間實體。
(2)對象-關(guān)系模型(Object-Relational Model)。這種模型使用數(shù)據(jù)庫表,表中有一個為MDSYS_GEOMETRYD的字段,用一行記錄來存儲一個空間實體。
Oracle Spatial的對象-關(guān)系模型實現(xiàn)方法由一組對象數(shù)據(jù)類型,一種類型的索引方法以及在這些類型上的操作符組成。
一個空間實體用一行具有SDO_GEOMETRY字段的記錄來存儲,具體存儲為對象類型??臻g索引的創(chuàng)建和維護(hù)由基本的SQL語句完成。這樣一來,原來需用多行,多列存儲的空間實體,使用Oracle Spatial的對象-關(guān)系模型,只需要一行記錄就可以完成存儲。大大方便了應(yīng)用系統(tǒng)的數(shù)據(jù)處理,維護(hù)等操作。
3 三、MapX與Oracle空間分析函數(shù)的比較
Oracle公司向Mapinfo公司提供了一種比ODBC更底層的數(shù)據(jù)接口OCI,通過此接口可以直接向Oracle數(shù)據(jù)庫存取Mapinfo空間地圖。MapX通過OCI和Oracle9i建立同步連接,而通過ODBC和其他數(shù)據(jù)庫建立連接。
3.1 緩沖區(qū)生成的比較
在MapX中,緩沖區(qū)的生成有兩種方法:FeatureFactory.BufferFeatures方法和Buffer函數(shù)。
在Oracle中,生成緩沖區(qū)的函數(shù)為SDO_BUFFER。
下面是分別以哈爾濱市區(qū),賓縣,和尚志為圖元,做緩沖試驗,distance值分別為5 km,10 km,15 km,25 km,35 km,45 km時,MapX和Oracle所用時間(單位:秒)如下:
哈爾濱市區(qū):MapX所用時間:0.4687,0.5625,0.6406,0.7500,0.8
125,0.9218
Oracle所用時間:4.9531,2.3437,1.8437,1.2656,0.9687,0.8125
賓縣:MapX所用時間:1.5313,2.5000,3.0468,4.0468,4.6250,
5.1250
Oracle所用時間:11.7031,6.6875,4.6718,2.8125,2.5781,2.3125
尚志:MapX所用時間:7.2656,7.9687,8.5781,12.2812,12.5312,
14.5468
Oracle所用時間:50.1562,21.9062,17.8906,8.1875,8.2968,7.07
81
3.2 拓?fù)洳樵兊谋容^
MapX中的拓?fù)洳樵兾覀円訪ayer.Serachwithdistance為例,在Oracle中的拓?fù)洳樵兾覀円院瘮?shù):SDO_WITHIN_DISTANCE為例。
下面是以黑龍江全省水系分布圖為底圖做實驗,以松花江一段為指定空間對象,分別查詢其周圍20km,30km,50km,100km,300km,500km,600km范圍內(nèi)的所有水系時,分別基于MapX 和Oracle查詢所用的時間(單位:秒)如下:
MapX所用時間:0.0468,0.1406,0.2812,0.6562,3.4687,3.7968,
3.9687
Oracle所用時間:0.0468,0.3437,0.5937,1.2031,8.6875,13.328
1,12.7656
4 結(jié)束語
Oracle spatial以O(shè)racle9i獨特的對象關(guān)系-模型作為存儲、管理空間地物的基礎(chǔ),使用面向?qū)ο蟛僮鞯脑戆汛鎯υ贠racle Spatial中的多種元素信息相關(guān)聯(lián),以進(jìn)行拓?fù)浞治雠c其它操作。利用Oracle Spatial可以在單個數(shù)據(jù)庫實例中,實現(xiàn)非結(jié)構(gòu)化、有嵌套關(guān)系的空間、屬性數(shù)據(jù)的統(tǒng)一存儲和管理。
在基于Oracle9i的GIS 空間分析和基于MapX的GIS 空間分析的比較中,在以O(shè)racle數(shù)據(jù)庫作為MapX底層數(shù)據(jù)庫,以大地坐標(biāo)系為坐標(biāo)系統(tǒng),空間索引為R-tree時,在生成緩沖區(qū)的實驗中,MapX生成緩沖區(qū)所用時間隨著distance值的增大而增大,而Oracle中函數(shù)SDO_GEOM.SDO_BUFFER生成緩沖區(qū)所用時間隨著distance 值的增大而減小。對同一圖元做緩沖區(qū)實驗時,在distance 值較小的情況下, MapX生成緩沖區(qū)的速度比Oracle中函數(shù)SDO_GEOM.SDO_BUFFER生成緩沖區(qū)的速度快,而當(dāng)distance 值較大時,情況正好相反。在拓?fù)洳樵儗嶒炛?,由實驗?shù)據(jù)可以看出在distance 值比較小的情況下(即數(shù)據(jù)量比較?。┑那闆r下,二者的查詢速度基本想同,但隨著distance 值的增大(數(shù)據(jù)量也隨之增大),Oracle拓?fù)洳樵兊乃俣染筒患癕apX拓?fù)洳樵兊乃俣?。可以看出,兩者之間有利有弊。
用Oracle Spatial單獨進(jìn)行空間、屬性數(shù)據(jù)的統(tǒng)一存儲、管理工作,把數(shù)據(jù)與GIS操作平臺和開發(fā)程序分離開來,增加了數(shù)據(jù)管理的靈活性和簡易性,減少了冗余數(shù)據(jù),提高了數(shù)據(jù)的使用效益,有利于建立數(shù)據(jù)間的聯(lián)系并在此基礎(chǔ)上進(jìn)行數(shù)據(jù)挖掘。
參考文獻(xiàn)
[1]http://mapinfo.com.
[2]Oracle技術(shù)網(wǎng)站[EB/OL]http://otn oracle .com.
[3]Oracle技術(shù)資料(Oracle 817 Spatial guide)[z].
[4]陸曉春,于禹生,楊哲宇.在oracle中實現(xiàn)空間數(shù)據(jù)的對象化和拓?fù)浠尜A[J].測繪學(xué)院學(xué)報,2001,(4).
[5]齊銳.屈昭琳.用MapX開發(fā)地理信息系統(tǒng)[J].北京:清華大學(xué)出版社2003.
[6]林天峰.Oracle程序設(shè)計:科學(xué)出版社,2003.
作者簡介:楊福濤 (1980.4-),男,黑龍江省齊齊哈爾市(籍貫),現(xiàn)職稱:測繪工程師,學(xué)歷:本科,研究方向:測繪工程。endprint