金晶,潘中華,李可,蘇恒
(武漢市測繪研究院,湖北 武漢 430022)
隨著近年來航空航天技術、對地觀測技術以及信息技術的迅猛發(fā)展,現(xiàn)代遙感技術正進入一個快速發(fā)展即時獲取柵格數(shù)據(jù)的新階段。柵格數(shù)據(jù)以其直觀、生動、易于獲取和處理等特點,在地理信息領域中的地位變得越來越重要[1],并在虛擬地球平臺中得到廣泛的應用。美國的Google Earth,NASA研制的World Wind[2]以及武漢大學研發(fā)的GeoGlobe等虛擬地球系統(tǒng)實現(xiàn)了海量多分辨率遙感影像和地形數(shù)據(jù)的瀏覽以及地理信息協(xié)同服務與在線共享[3],使得人們對遙感影像數(shù)據(jù)的了解和重視不斷加深。當前,國家空間數(shù)據(jù)基礎設施和數(shù)字地球建設需要多比例尺、多數(shù)據(jù)源的海量柵格數(shù)據(jù),因此如何高效地管理這些柵格數(shù)據(jù),使之能夠為我國的空間數(shù)據(jù)基礎設施和數(shù)字地球建設發(fā)揮重要的作用,是一個值得深入研究的問題[4]。
信息技術的發(fā)展使得我們在空間數(shù)據(jù)獲取手段上取得了很大進步,與此同時遙感柵格數(shù)據(jù)量呈幾何級數(shù)以驚人的速度增長,柵格數(shù)據(jù)及其屬性信息不斷快速積累,各種柵格數(shù)據(jù)組織形式、管理方法大量涌現(xiàn)。如何集成現(xiàn)有的各類異構空間數(shù)據(jù),實現(xiàn)快速有效地數(shù)據(jù)檢索、發(fā)現(xiàn)和數(shù)據(jù)共享,已成為目前地理信息領域的研究熱點[5]。作為空間數(shù)據(jù)的有效管理工具,地理信息系統(tǒng)已經(jīng)成為空間信息管理與應用的主要平臺,因此地理信息系統(tǒng)也面臨著對不同來源不同數(shù)據(jù)組織形式空間信息進行有效管理和綜合應用的難點[6]。
GIS發(fā)展的不同時期,信息處理模式的不斷演進促使了空間數(shù)據(jù)共享方式的發(fā)展,產(chǎn)生了不同的多源數(shù)據(jù)共享方法[7],主要包括以下幾個方面:
(1)數(shù)據(jù)格式互換模式:通過使用專門的轉(zhuǎn)換軟件,將其他格式的數(shù)據(jù)轉(zhuǎn)換成為本系統(tǒng)可以識別與利用的數(shù)據(jù)格式,以此來達到不同系統(tǒng)間數(shù)據(jù)的間接共享[8];
(2)數(shù)據(jù)直接訪問模式:在一個GIS軟件中實現(xiàn)對其他軟件數(shù)據(jù)格式的直接訪問,用戶可以使用單個GIS軟件存取多種數(shù)據(jù)格式;
(3)中間件技術:中間件是一種獨立的系統(tǒng)軟件,位于客戶機服務器的操作系統(tǒng)之上,用于管理計算資源和網(wǎng)絡通信,分布式應用軟件借助中間件在不同的技術之間共享資源[9];
(4)Web Services信息共享服務:Web Service是一種基于對象/組件模型的分布式計算技術,是指自包含、自描述、模塊化的應用程序,這類應用程序能夠被發(fā)布、定位,并通過Web實現(xiàn)動態(tài)的調(diào)用。
OGDC(Open Geospatial Database Connectivity)開放式空間數(shù)據(jù)庫互聯(lián)互訪協(xié)議,是國家863項目為了實現(xiàn)數(shù)據(jù)互操作而制定的一組標準。標準中規(guī)定了空間數(shù)據(jù)的訪問接口、對象模型以及對不同空間數(shù)據(jù)提供者實現(xiàn)接口的要求。OGDC采用面向?qū)ο蟮乃悸范x了具備GIS空間數(shù)據(jù)讀寫接口的抽象基類,各數(shù)據(jù)庫提供者基于自身數(shù)據(jù)結構提供子類動態(tài)鏈接庫實現(xiàn)OGDC標準接口。基于OGDC標準開發(fā)的應用程序,可以不依賴于任何空間數(shù)據(jù)格式,以統(tǒng)一的方式來訪問所有的空間數(shù)據(jù),實現(xiàn)對空間數(shù)據(jù)的讀、寫、存、取。在不暴露底層存儲格式的條件下,最大限度方便其應用者進行使用,一旦內(nèi)部數(shù)據(jù)格式有調(diào)整,只需升級對應的動態(tài)庫,使用者不需做任何變動和重新編譯工作,實現(xiàn)了一次編碼隨處使用的高效數(shù)據(jù)共享。
為了保證OGDC的標準性和開放性,其總體框架分四個層次:應用程序?qū)印GDC接口層、數(shù)據(jù)提供者層和數(shù)據(jù)層,如圖1所示。

圖1 OGDC總體框架
(1)應用層,基于OGDC接口層開發(fā)的應用程序,以統(tǒng)一的方式創(chuàng)建、查看、編輯、保存、刪除空間數(shù)據(jù),而不必關心底層使用的是哪一個數(shù)據(jù)提供者以及訪問的是哪一類數(shù)據(jù)庫。
(2)OGDC接口層,是各數(shù)據(jù)提供者根據(jù)OGDC標準實現(xiàn)的API接口,是連接應用層與數(shù)據(jù)提供者層的橋梁。OGDC接口層以C++模式提供了OGDC對象的訪問接口,并帶有OgdcProvider管理器實現(xiàn)對各數(shù)據(jù)提供者的加載與卸載,為每一個數(shù)據(jù)提供者提供了OGDC函數(shù)入口點。
(3)數(shù)據(jù)提供者層,類似于訪問數(shù)據(jù)的驅(qū)動器,它是實現(xiàn)OGDC函數(shù)與數(shù)據(jù)層交互的動態(tài)庫。這些已注冊的以動態(tài)庫形式存在的數(shù)據(jù)提供者由GIS開發(fā)廠商根據(jù)OGDC標準各自實現(xiàn)。
(4)數(shù)據(jù)層,由用戶想要存取的數(shù)據(jù)格式、數(shù)據(jù)的存儲方式及其相關的操作系統(tǒng)組成。數(shù)據(jù)層可以包含各種各樣不同格式的GIS數(shù)據(jù),可以是文件型、數(shù)據(jù)庫型、網(wǎng)絡型等,用來提供OGDC使用所需的數(shù)據(jù)庫或數(shù)據(jù)文件,OGDC支持的數(shù)據(jù)庫類型由OGDC數(shù)據(jù)提供者確定。
近年來,使用大型關系數(shù)據(jù)庫一體化管理空間數(shù)據(jù)和業(yè)務數(shù)據(jù)得到了越來越廣泛的應用。空間數(shù)據(jù)庫技術在很多方面有著明顯的技術優(yōu)勢,包括海量數(shù)據(jù)管理能力、圖形和屬性數(shù)據(jù)一體化存儲、多用戶并發(fā)訪問、完善的訪問權限控制和數(shù)據(jù)安全機制等[10]。
Oracle Georaster是Oracle Spatial 10g新增的柵格數(shù)據(jù)管理機制,它基于對象關系模式(包含了一個全新的對象類型SDO_GeoRaster和元數(shù)據(jù)XML結構),一體化管理柵格數(shù)據(jù)及其屬性信息,打破了傳統(tǒng)的文件存儲方式,同時還提供了一系列方法、過程用以支持對柵格數(shù)據(jù)集的存儲,管理和操作[11]。
OGDC接口層采用面向?qū)ο蟮乃悸范x了數(shù)據(jù)提供者需要實現(xiàn)的數(shù)據(jù)訪問對象以及API訪問接口,通過制定統(tǒng)一的數(shù)據(jù)訪問模式以實現(xiàn)對多源異構空間數(shù)據(jù)的高效共享。本文根據(jù)GeoRaster柵格數(shù)據(jù)的存儲結構和管理方法,通過繼承OGDC接口層抽象基類,提供面向Oracle GeoRaster的OGDC數(shù)據(jù)提供者動態(tài)鏈接庫。利用GDAL中封裝的OCI接口和GeoRaster API接口,編程實現(xiàn)面向Oracle GeoRaster柵格數(shù)據(jù)存儲管理模式的OGDC標準,其實現(xiàn)思路如圖2所示。

圖2 OGDC GeoRaster實現(xiàn)思路
GeoRaster采用對象關系數(shù)據(jù)庫模式,使用基于組件的、邏輯分層并且多維的通用柵格數(shù)據(jù)模型。通過SDO_GEORASTER與SDO_RASTER對象實現(xiàn)對柵格數(shù)據(jù)的存儲:SDO_GEORASTER用來存儲與柵格數(shù)據(jù)相關的元數(shù)據(jù)與空間范圍信息,SDO_RASTER則包含了柵格文件的分塊信息并以BLOB格式存儲塊中的像素數(shù)據(jù)。基于這種存儲結構,GeoRaster提供了一系列非常豐富的功能函數(shù)和結構完善的元數(shù)據(jù)XML模型來存儲,管理,操作空間數(shù)據(jù)[12]。
GDAL(Geospatial Data Abstraction Library)是X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫,提供對多種柵格數(shù)據(jù)的支持。本文從GDAL開源代碼中抽取了部分對象用于實現(xiàn)針對Oracle GeoRaster對象的訪問與操作,并按其功能分為兩個部分進行管理,分別是OCIWrapper.h和GeoRasterWrapper.h。OCIWrapper主要實現(xiàn)了對Oracle調(diào)用接口(Oracle Call Interface,OCI)的封裝,OCI提供了一組可對Oracle數(shù)據(jù)庫進行存取的接口子例程(函數(shù)),通過在C++中調(diào)用可達到存取Oracle數(shù)據(jù)庫的目的[13]。GeoRasterWrapper類封裝了GeoRaster提供的用于操作、管理柵格數(shù)據(jù)集的API訪問接口。本文通過調(diào)用GeoRasterWrapper類中的對應方法實現(xiàn)柵格數(shù)據(jù)集的相關操作。
下面以獲取柵格數(shù)據(jù)塊為例,說明使用OGDC接口訪問柵格數(shù)據(jù)的實現(xiàn)流程(圖3)。OGDC中定義了柵格數(shù)據(jù)塊的訪問接口LoadBlock(),用于讀取指定行、列號的塊數(shù)據(jù):

圖3 獲取柵格塊主要流程
該流程的前三個步驟都是在GeoRasterWrapper類GetDataBlock()接口中順序完成的,GetDataBlock()是GeoRasterWrapper類中封裝的用于獲取指定金字塔層、行、列、波段號的單個波段塊數(shù)據(jù)的訪問接口。步驟四中,將獲取的所有單個波段的數(shù)據(jù)經(jīng)過排列組合得到新的塊,該塊即為LoadBlock()接口所求。塊的設置流程與獲取流程相似,采用單波段依次設置的方法來實現(xiàn)的,并按該塊原本的方式進行數(shù)據(jù)壓縮和交叉并提交到數(shù)據(jù)庫。
本文使用OGDC提供的標準測試程序Viewer,加載面向Oracle GeoRaster的OGDC數(shù)據(jù)提供者動態(tài)鏈接庫,訪問以GeoRaster模式存放于Oracle數(shù)據(jù)庫中的柵格數(shù)據(jù),以檢驗本文成果是否符合OGDC標準。
(1)數(shù)據(jù)源打開流程(圖4)

圖4 數(shù)據(jù)源打開界面
該過程中主要用到的接口及調(diào)用流程如圖5所示:

圖5 數(shù)據(jù)源打開流程
(2)數(shù)據(jù)集顯示流程
GeoRaster提供了柵格數(shù)據(jù)集的金字塔式存儲結構,不同的金字塔層存放同一范圍不同分辨率的柵格數(shù)據(jù)。在應用程序放大、縮小查看數(shù)據(jù)時,通過計算調(diào)用GeoRaster中不同層次的金字塔數(shù)據(jù)進行顯示,在保證圖像清晰可見的同時,提高了數(shù)據(jù)讀取效率。該過程中主要用到的接口及調(diào)用流程如圖6~圖9所示:

圖6 柵格數(shù)據(jù)可視塊獲取流程

圖7 Tiff格式影像數(shù)據(jù)的顯示

圖8 地形格網(wǎng)數(shù)據(jù)圖的顯示

圖9 BMP格式影像數(shù)據(jù)的顯示
以瀏覽新疆地區(qū)高精度大范圍BMP數(shù)據(jù)為例,在進行平移、縮放全景視圖等操作時影像顯示清晰、流暢,分辨率過渡自然快速,無明顯延時,各操作響應時間約1秒。經(jīng)驗證,使用OGDC應用層Viewer程序可以成功調(diào)用GeoRaster數(shù)據(jù)庫提供者動態(tài)鏈接庫,對Oracle GeoRaster柵格數(shù)據(jù)進行訪問、瀏覽、復制、刪除等基本操作。
基于OGDC標準開發(fā)的應用程序,不依賴于任何空間數(shù)據(jù)格式以統(tǒng)一的方式訪問所有的空間數(shù)據(jù),實現(xiàn)對空間數(shù)據(jù)的讀、寫、存、取。Oracle Georaster基于對象關系數(shù)據(jù)庫模式,包含了一個全新的對象類型SDO_GeoRaster及相應的功能函數(shù)和元數(shù)據(jù)表來管理柵格數(shù)據(jù)。本文基于Oracle GeoRaster數(shù)據(jù)組織結構和訪問方法,編程完成OGDC數(shù)據(jù)提供者層的動態(tài)鏈接庫以實現(xiàn)柵格數(shù)據(jù)的共享。實驗觀察可得,柵格數(shù)據(jù)顯示效果清晰,移動順暢,不同分辨率瀏覽變換連貫,各操作耗時短能夠在保證瀏覽效果的同時快速滿足用戶需求。