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

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

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

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

圖4 數據源打開界面
該過程中主要用到的接口及調用流程如圖5所示:

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

圖6 柵格數據可視塊獲取流程

圖7 Tiff格式影像數據的顯示

圖8 地形格網數據圖的顯示

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