摘 要:文章探討Oracle數據庫系統中對空間數據存儲的解決方案,并介紹針對對象-關系模型下空間數據的存儲和管理,著重討論基于Oracle9i的GIS 空間分析和基于MapX的GIS 空間分析,并就這兩種方式的空間分析的性能進行比較。
關鍵詞: MapX;空間索引;對象-關系模型;空間分析
1 MapX與 Oracle9i 簡介
MapX是MapInfo公司向用戶提供的具有強大地圖分析功能的ActiveX控件產品。由于它是一種基于Windows操作系統的標準控件,因而能支持絕大多數標準的可視化開發環境如Visual C++、Visual Basic、Delphi、PowerBuilder等。編程人員在開發過程中可以選用自己最熟悉的開發語言,輕松地將地圖功能嵌入到應用中,并且可以脫離MapInfo的軟件平臺運行。 [1] [5]
Oracle Spatial 是部署企業范圍的空間信息系統和基于 web 以及基于位置的無線應用程序的基礎。它為位置信息提供數據管理,這些信息包括道路網絡、無線服務邊界以及地理編碼的客戶地址,它們正在推動著新興的在線、移動以及車載遠程信息處理市場領域創新性的產品開發。[2]
2 Oracle Spatial的對象-關系模型
Oracle Spatial是針對存儲在oracle8i或Oracle9i中的空間元素集合提供的一種SQL的模式來完成存儲、輸出,修改和查詢的功能。
Oracle支持兩種表現空間元素的機制和模型:
(1)關系式模型。用多行記錄和字段類型為Number的一張表來表示一個空間實體。
(2)對象-關系模型(Object-Relational Model)。這種模型使用數據庫表,表中有一個為MDSYS_GEOMETRYD的字段,用一行記錄來存儲一個空間實體。
Oracle Spatial的對象-關系模型實現方法由一組對象數據類型,一種類型的索引方法以及在這些類型上的操作符組成。
一個空間實體用一行具有SDO_GEOMETRY字段的記錄來存儲,具體存儲為對象類型。空間索引的創建和維護由基本的SQL語句完成。這樣一來,原來需用多行,多列存儲的空間實體,使用Oracle Spatial的對象-關系模型,只需要一行記錄就可以完成存儲。大大方便了應用系統的數據處理,維護等操作。
3 三、MapX與Oracle空間分析函數的比較
Oracle公司向Mapinfo公司提供了一種比ODBC更底層的數據接口OCI,通過此接口可以直接向Oracle數據庫存取Mapinfo空間地圖。MapX通過OCI和Oracle9i建立同步連接,而通過ODBC和其他數據庫建立連接。
3.1 緩沖區生成的比較
在MapX中,緩沖區的生成有兩種方法:FeatureFactory.BufferFeatures方法和Buffer函數。
在Oracle中,生成緩沖區的函數為SDO_BUFFER。
下面是分別以哈爾濱市區,賓縣,和尚志為圖元,做緩沖試驗,distance值分別為5 km,10 km,15 km,25 km,35 km,45 km時,MapX和Oracle所用時間(單位:秒)如下:
哈爾濱市區: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 拓撲查詢的比較
MapX中的拓撲查詢我們以Layer.Serachwithdistance為例,在Oracle中的拓撲查詢我們以函數:SDO_WITHIN_DISTANCE為例。
下面是以黑龍江全省水系分布圖為底圖做實驗,以松花江一段為指定空間對象,分別查詢其周圍20km,30km,50km,100km,300km,500km,600km范圍內的所有水系時,分別基于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 結束語
Oracle spatial以Oracle9i獨特的對象關系-模型作為存儲、管理空間地物的基礎,使用面向對象操作的原理把存儲在Oracle Spatial中的多種元素信息相關聯,以進行拓撲分析與其它操作。利用Oracle Spatial可以在單個數據庫實例中,實現非結構化、有嵌套關系的空間、屬性數據的統一存儲和管理。
在基于Oracle9i的GIS 空間分析和基于MapX的GIS 空間分析的比較中,在以Oracle數據庫作為MapX底層數據庫,以大地坐標系為坐標系統,空間索引為R-tree時,在生成緩沖區的實驗中,MapX生成緩沖區所用時間隨著distance值的增大而增大,而Oracle中函數SDO_GEOM.SDO_BUFFER生成緩沖區所用時間隨著distance 值的增大而減小。對同一圖元做緩沖區實驗時,在distance 值較小的情況下, MapX生成緩沖區的速度比Oracle中函數SDO_GEOM.SDO_BUFFER生成緩沖區的速度快,而當distance 值較大時,情況正好相反。在拓撲查詢實驗中,由實驗數據可以看出在distance 值比較小的情況下(即數據量比較?。┑那闆r下,二者的查詢速度基本想同,但隨著distance 值的增大(數據量也隨之增大),Oracle拓撲查詢的速度就不及MapX拓撲查詢的速度??梢钥闯觯瑑烧咧g有利有弊。
用Oracle Spatial單獨進行空間、屬性數據的統一存儲、管理工作,把數據與GIS操作平臺和開發程序分離開來,增加了數據管理的靈活性和簡易性,減少了冗余數據,提高了數據的使用效益,有利于建立數據間的聯系并在此基礎上進行數據挖掘。
參考文獻
[1]http://mapinfo.com.
[2]Oracle技術網站[EB/OL]http://otn oracle .com.
[3]Oracle技術資料(Oracle 817 Spatial guide)[z].
[4]陸曉春,于禹生,楊哲宇.在oracle中實現空間數據的對象化和拓撲化存貯[J].測繪學院學報,2001,(4).
[5]齊銳.屈昭琳.用MapX開發地理信息系統[J].北京:清華大學出版社2003.
[6]林天峰.Oracle程序設計:科學出版社,2003.
作者簡介:楊福濤 (1980.4-),男,黑龍江省齊齊哈爾市(籍貫),現職稱:測繪工程師,學歷:本科,研究方向:測繪工程。endprint