史少維,劉云廣
(北京建筑工程學院測繪與城市空間信息學院,北京 100044)
隨著遙感技術(shù)的迅速發(fā)展,獲取的對地觀測影像數(shù)據(jù)越來越多,如何有效管理組織這些遙感影像數(shù)據(jù),就顯得尤為重要。目前影像數(shù)據(jù)的管理方式主要可以分成三大類。①基于文件存儲的方式:隨著系統(tǒng)的應(yīng)用目的不同,文件結(jié)構(gòu)、組織、格式等都而存在差異,文件與應(yīng)用程序有著非常密切的關(guān)聯(lián),這樣系統(tǒng)往往需要重新修改調(diào)整。這種文件存儲管理方式對于實現(xiàn)多用戶之間的數(shù)據(jù)共享和并發(fā)控制比較困難,并且數(shù)據(jù)安全性也很難得到保證。②基于文件與關(guān)系數(shù)據(jù)庫結(jié)合的方式:影像數(shù)據(jù)作為外部文件存儲,而影像的元數(shù)據(jù)用關(guān)系數(shù)據(jù)庫管理,通過在數(shù)據(jù)庫中存儲影像數(shù)據(jù)的路徑名來存取影像。這種管理方式的影像數(shù)據(jù)本質(zhì)上仍然是文件管理,在影像數(shù)據(jù)的共享和統(tǒng)一安全控制上有一定的弊端。如ERDAS公司的IMAGINE中,Image Catalog基于文件與關(guān)系數(shù)據(jù)庫圖像數(shù)據(jù)管理系統(tǒng)。其主要用于顯示影像文件的相關(guān)信息和簡單的顯示瀏覽功能,有待進一步的優(yōu)化。③基于對象關(guān)系數(shù)據(jù)庫管理方式:采用商用數(shù)據(jù)庫技術(shù)支撐,優(yōu)勢較明顯但開發(fā)難度大,其具有數(shù)據(jù)獨立性強,數(shù)據(jù)集中控制,數(shù)據(jù)冗余度小,并發(fā)控制容易實現(xiàn),數(shù)據(jù)庫易恢復,數(shù)據(jù)安全性和完整性較好等特點,可以實現(xiàn)多用戶訪問及元數(shù)據(jù)與影像數(shù)據(jù)無縫集成管理。許多系統(tǒng)都在研究和發(fā)展階段。目前比較成熟的海量影像數(shù)據(jù)管理系統(tǒng)是國內(nèi)武漢吉奧公司Geo-ImageDB 4.0影像數(shù)據(jù)庫管理系統(tǒng)。它是基于Oracle數(shù)據(jù)庫并且利用組件技術(shù)建立的。
本文針對遙感影像數(shù)據(jù)存儲管理方法特點,基于Oracle大型對象關(guān)系數(shù)據(jù)庫的管理模式開發(fā),主要從數(shù)據(jù)存儲數(shù)據(jù)類型、Oracle數(shù)據(jù)庫的引擎接口和利用PL/sql數(shù)據(jù)庫存儲過程的角度,結(jié)合影像庫的研究技術(shù),來闡述遙感影像庫的構(gòu)建以及遙感影像庫的基礎(chǔ)功能模塊的實現(xiàn),為進一步提高遙感影像庫的運行性能提出了可行的方案。
Oracle作為大型對象關(guān)系數(shù)據(jù)庫,具有強大的數(shù)據(jù)庫管理功能,具有以下特點:處理的數(shù)據(jù)容量大,已升級到TB級;數(shù)據(jù)運算速度快;不受操作系統(tǒng)的限制,具有可移植性和可持續(xù)性;為監(jiān)控數(shù)存取提供系統(tǒng)可靠的安全性;支持數(shù)據(jù)分布式處理。Oracle具備的特點滿足了影像數(shù)據(jù)庫開發(fā)存儲數(shù)據(jù)量大、效率高、安全性強的要求。
在Windows操作系統(tǒng)環(huán)境下,以O(shè)racle 10g數(shù)據(jù)庫為載體,在VS2008平臺上以C語言為宿主語言進行數(shù)據(jù)庫的開發(fā),影像數(shù)據(jù)采用SPOT-5的衛(wèi)星影像及TM衛(wèi)星系列的影像,圍繞遙感影像處理進行影像庫的流程框架設(shè)計如圖1所示。
影像庫結(jié)構(gòu)設(shè)計為三層:表示層、中間層、數(shù)據(jù)層。其中表示層就是用戶程序界面端,主要用于用戶數(shù)據(jù)輸入、影像數(shù)據(jù)錄入、查詢及顯示等操作;中間層為OCI接口,實現(xiàn)程序與Oracle之間的數(shù)據(jù)交互的工作;底層Oracle數(shù)據(jù)庫作為影像庫的數(shù)據(jù)層,主要利用Oracle內(nèi)部的數(shù)據(jù)類型組件及設(shè)計的影像表來存儲管理影像的屬性信息和實體數(shù)據(jù)。其使用VC調(diào)用OCI接口的影像數(shù)據(jù)庫結(jié)構(gòu)設(shè)計框架如圖2所示。
圖1 影像庫運行流程框架
圖2 影像庫結(jié)構(gòu)框架
Oracle可以用于存儲影像的數(shù)據(jù)類型主要有3種:BFile、BLOB、InterMedia,其中 BFile存放在數(shù)據(jù)庫外部,讀取的時間效率高,但作為影像存儲的安全性很差;BLOB為二進制數(shù)據(jù)類型,讀取的時間效率低;InterMedia為Oracle數(shù)據(jù)庫升級版本新增的數(shù)據(jù)組件,可以利用這個組件存儲、管理與檢索多媒體數(shù)據(jù),包括影像數(shù)據(jù)、視頻數(shù)據(jù)、音頻數(shù)據(jù)、文本數(shù)據(jù)以及Web數(shù)據(jù),具體情況如表1所示。
Oracle數(shù)據(jù)類型的比較 表1
InterMedia組件中的ORDSYS.ORDImage對象用于影像數(shù)據(jù)管理,其用于存儲如BMP、PCX、TIFF、GIF等多種遙感影像數(shù)據(jù)格式[1]。ORDImage是一種對象數(shù)據(jù)類型,定義中既包括了影像屬性信息的定義,又包括了實體數(shù)據(jù)的定義,還集成了很多影像操作的方法函數(shù)。將影像作為對象來存儲,便于組織與管理。當對影像進行一些基本操作時,直接調(diào)用ORDImage的成員方法和成員函數(shù)即可。本文就采用ORDImage類型存儲影像,功能強大,方便靈活,從而達到高效管理的目的。
金字塔影像,就是以原始影像為基礎(chǔ)通過重采樣等方法依次生成不同分辨率的各層影像數(shù)據(jù),形成分辨率由高到低、數(shù)據(jù)量由大到小的金字塔結(jié)構(gòu)。
在重采樣之前,先對原始影像進行影像分塊[2],對影像塊按照所在圖幅的行列號進行編號,在檢索查詢時通過網(wǎng)格索引的算法鎖定目標影像塊。
一般構(gòu)建金字塔影像時采用的重采樣方法為三種:最鄰近法、雙線性插值法、三次卷積法。其中最鄰近法速度最快,但噪點誤差多,效果差;三次卷積法生成的影像效果好,但處理時間長;雙線性插值法速度適中,且影像效果能夠達到用戶顯示要求。
采用金字塔影像結(jié)構(gòu),便于遙感影像數(shù)據(jù)的組織與管理,能夠?qū)崿F(xiàn)跨分辨率的索引與瀏覽,這樣在不降低可視效果的情況下,傳輸較少的數(shù)量,盡量避開對底層原始影像數(shù)據(jù)的檢索,從而減輕處理大數(shù)據(jù)量的運算負荷,有利于系統(tǒng)的運行效率。
根據(jù)遙感影像解析的元數(shù)據(jù)、實體數(shù)據(jù),結(jié)合金字塔影像結(jié)構(gòu)設(shè)計相應(yīng)的影像索引表及表里包含的字段,設(shè)計主鍵字段與外鍵字段來反映影像表之間的索引關(guān)系。設(shè)計的影像表主要有金字塔等級信息表、影像圖幅信息表、影像塊信息表、原始影像實體數(shù)據(jù)表和影像塊實體數(shù)據(jù)表5個表。其中金字塔等級信息表、影像圖幅信息表、影像塊信息表主要用來存儲的是影像元數(shù)據(jù),原始影像實體數(shù)據(jù)表、影像塊實體數(shù)據(jù)表是用來放置實體數(shù)據(jù)的表,從而實現(xiàn)表示影像屬性信息的元數(shù)據(jù)與表示影像灰度值的實體數(shù)據(jù)在Oracle數(shù)據(jù)庫中分開存儲。元數(shù)據(jù)與實體數(shù)據(jù)的分開存儲,可以提高數(shù)據(jù)庫的運行效率。當用戶只對影像的屬性信息感興趣,就沒有必要遍歷實體數(shù)據(jù),從而提高數(shù)據(jù)的檢索速度。從金字塔影像結(jié)構(gòu)的角度出發(fā),數(shù)據(jù)的檢索從金字塔等級信息表,經(jīng)過影像圖幅信息表,再到影像塊信息表,最終鎖定目標影像塊,其檢索范圍在逐級縮小,從而避免了盲目在大量數(shù)據(jù)中遍歷,優(yōu)化了影像的索引。設(shè)計的主要影像表結(jié)構(gòu)如表2~表6所示。
影像塊數(shù)據(jù)表結(jié)構(gòu) 表2
影像圖幅原始表結(jié)構(gòu) 表3
金字塔等級信息表結(jié)構(gòu)表4
影像圖幅信息表結(jié)構(gòu)表5
表6 影像塊信息表結(jié)構(gòu)
OCI(Oracle Call Interface,Oracle調(diào)用層接口)是訪問Oracle數(shù)據(jù)庫的應(yīng)用程序底層接口(API),可以直接在C語言中調(diào)用,不需要預編譯,效率快。它允許開發(fā)人員通過SQL語句來操縱Oracle數(shù)據(jù)庫,而且OCI支持大對象數(shù)據(jù)類型,可以嵌入PL/SQL存儲過程,可以封裝特定功能的模塊,提高大影像數(shù)據(jù)的存儲檢索速度。與ODBC、ADO、OO4O等數(shù)據(jù)庫接口相比,OCI接口功能最全,效率最高。OCI作為數(shù)據(jù)庫接口有其特定的程序框架,OCI的程序結(jié)構(gòu)及處理SQL語句的流程如圖3所示。
圖3 OCI程序結(jié)構(gòu)及SQL語句處理流程
利用OCI接口實現(xiàn)用戶程序端與Oracle數(shù)據(jù)庫之間的數(shù)據(jù)互訪,其程序結(jié)構(gòu)中分為三部分:其中初始化OCI環(huán)境和線程的OCI函數(shù)OCIEnvCreate()、分配必要的句柄與數(shù)據(jù)結(jié)構(gòu)的OCI函數(shù)OCIHandleAlloc()、建立與數(shù)據(jù)庫的連接、創(chuàng)建用戶會話 OCI函數(shù)OCIServerAttach()和OCIAttrSet()為與數(shù)據(jù)庫連接和建立會話的部分;主體部分為執(zhí)行SQL語句并處理數(shù)據(jù),這部分通過SQL語句來完成Oracle管理影像的功能;最后斷開連接、釋放句柄為關(guān)閉Oracle、結(jié)束與Oracle的會話的部分。
主體部分為SQL語句的處理,在OCI框架下實現(xiàn)Oracle影像數(shù)據(jù)管理的功能。
影像查詢功能的處理流程:①SQL語句準備,就是準備具體的Select語句;②綁定占位符,就是綁定程序端用戶輸入的檢索條件如影像的id號、影像名稱等;③執(zhí)行語句,就是在Oracle中執(zhí)行Select語句;④描述選擇列表,就是描述查詢的結(jié)果符合條件的行數(shù)、查詢字段的數(shù)據(jù)類型及長度,為下步定義輸出變量做準備;⑤定義輸出變量,根據(jù)上述的描述來定義輸出到程序端的變量類型及大小;⑥獲取并處理數(shù)據(jù),將查詢到的結(jié)果賦值給定義的輸出變量。通過這完整的6步完成了將查詢的結(jié)果數(shù)據(jù)從數(shù)據(jù)庫端傳到程序端,實現(xiàn)了OCI與Oracle的數(shù)據(jù)查詢功能。
影像插入功能的處理流程:①SQL語句準備,就是準備具體的Insert語句;②綁定占位符,就是綁定程序端用戶輸入的插入條件如影像的id號、影像名稱等;③執(zhí)行語句,就是在Oracle中執(zhí)行Insert語句。
影像刪除功能的處理流程:①SQL語句準備,就是準備具體的Delete語句;②綁定占位符,就是綁定程序端用戶輸入的插入條件如影像的id號、影像名稱等;③執(zhí)行語句,就是在Oracle中執(zhí)行Delete語句。
(1)建立影像表、字段
建立數(shù)據(jù)庫存儲影像的表與屬性字段,主要代碼如下:
(2)建立影像的Oracle目錄對象
圖像數(shù)據(jù)是二進制數(shù)據(jù),它經(jīng)常以磁盤文件的形式存在磁盤上,要將磁盤上的圖像文件(例如:BMP文件)裝載到Oracle數(shù)據(jù)表的對象類型字段中必須首先創(chuàng)建Oracle目錄對象,使外部文件變?yōu)镺racle的BFILE數(shù)據(jù)類型,BFILE數(shù)據(jù)是由Oracle管理的外部操作系統(tǒng)文件[3]。主要代碼如下:
(3)建立影像的pl/sql存儲過程
通過下面存儲過程,就可實現(xiàn)將影像數(shù)據(jù)文件的內(nèi)容裝入Oracle的ordsys.ordimage對象數(shù)據(jù)類型字段中,代碼如下:
(4)影像數(shù)據(jù)存儲實現(xiàn)
在OCI接口下直接調(diào)用pl/sql存儲過程實現(xiàn)影像數(shù)據(jù)的導入,代碼如下:
經(jīng)過上述步驟,實現(xiàn)影像數(shù)據(jù)存儲于Oracle庫中,影像數(shù)據(jù)導入數(shù)據(jù)庫如圖4所示。
圖4 數(shù)據(jù)庫影像導入
本系統(tǒng)的檢索采取屬性查詢的方式,主要代碼如下:
經(jīng)過上述主要代碼,實現(xiàn)影像數(shù)據(jù)的檢索顯示,其功能界面如圖5所示。
圖5 數(shù)據(jù)庫影像檢索
在內(nèi)存2G,硬盤300G的單機上,基于本文的方案主要對衛(wèi)星遙感影像數(shù)據(jù)的建庫、查詢顯示、漫游功能進行了性能測試,同時在相同的實驗條件下與ArcSDE和ArcGIS平臺上進行了測試,測試統(tǒng)計數(shù)據(jù)如表7和表8所示。
入庫測試數(shù)據(jù)表 表7
顯示漫游測試數(shù)據(jù)表 表8
從入庫測試數(shù)據(jù)表上可以看到隨著入庫數(shù)據(jù)量的不斷增加,本方案入庫時間的優(yōu)勢與ArcSDE與相比就越來越明顯;顯示漫游測試數(shù)據(jù)表是對不同數(shù)據(jù)量的單幅影像進行了查詢顯示、原始分辨率漫游響應(yīng)時間的性能測試,與在ArcGIS平臺上進行了比較分析,通過數(shù)據(jù)可以看到本方案與ArcGIS的性能很接近,其與客戶的交互響應(yīng)時間流暢可以接受,而且還驗證了本方案對數(shù)據(jù)量大的單幅影像的顯示漫游響應(yīng)性能上的具有一定的優(yōu)勢。
本文利用底層OCI接口起到Oracle引擎的作用,采用Oracle升級后新增InterMedia組件中ORDImage類型存儲影像,運用PL/sql存儲過程完成影像批量入庫,完成Oracle影像數(shù)據(jù)庫的開發(fā)。實驗表明建立遙感影像庫的可行性,其進行遙感影像數(shù)據(jù)存取的設(shè)計與開發(fā)具有一定的特點和優(yōu)勢:
(1)利用InterMedia組件的ORDImage類型來進行影像數(shù)據(jù)存儲管理,能夠真正地將影像數(shù)據(jù)實體存入Oracle庫里,能有效控制特殊區(qū)域影像的保密性,提高數(shù)據(jù)訪問效率。同時InterMedia組件集成了影像分析與處理函數(shù),便于后期的深入開發(fā)。
(2)在Oracle數(shù)據(jù)庫的接口中,使用最底層的OCI接口,其功能最全、效率最高,支持大數(shù)據(jù)對象類型,用戶與后臺數(shù)據(jù)庫交互速度快,根據(jù)需要可以利用OCI庫函數(shù)靈活地編寫相應(yīng)的模塊。
(3)編寫影像PL/sql存儲過程存放在Oracle影像庫中,封裝了影像入庫重復操作的SQL語句,減輕傳輸通信的負荷,提高數(shù)據(jù)存儲速度,為實現(xiàn)復雜的數(shù)據(jù)庫應(yīng)用提供了解決方案。
上述的特性為后期數(shù)據(jù)擴容性及深入開發(fā)管理提供了良好的技術(shù)基礎(chǔ),同時能夠保證影像數(shù)據(jù)存儲的高效性與安全性。
[1]岳國華.Oracle InterMedia多媒體數(shù)據(jù)存取技術(shù)與應(yīng)用[J].西安科技大學學報,2007,27(3):467~472.
[2]虞欣,楊伯鋼.基于Oracle和ArcSDE的正射影像入庫研究[C].北京測繪學會,2011(4):137~141.
[3]王海鳳,王海亮,鄭建茹等.Oracle 11g SQL和PL/SQL從入門到精通[M].北京:中國水利水電出版社,2008.
[4]顧云鋒,楊素霞,王智鋼等.Oracle數(shù)據(jù)庫中存儲過程開發(fā)研究[J].計算機與現(xiàn)代化,2011,194(10):138~142.
[5]劉云,季建華,楊軍生.基于Oracle數(shù)據(jù)庫的正射影像數(shù)據(jù)的組織和管理[J].現(xiàn)代測繪,2006,29(1):43~45.
[6]牛得學,崔苗苗,黃超.基于Oracle Spatial的影像數(shù)據(jù)存儲技術(shù)研究[J].安徽農(nóng)業(yè)科學,2011,39(7):4254~4256.
[7]贠建明,汪匯兵,唐新明.多源影像數(shù)據(jù)庫金字塔結(jié)構(gòu)的研究與實踐[J].測繪科學,2011,36(4):53~55.
[8]何雄.Oracle Spatial與OCI高級編程[M].北京:中國鐵道出版社,2006.