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