王 瑋
(中鐵第一勘察設(shè)計院集團有限公司,陜西西安 710043)
柵格數(shù)據(jù)是一種重要的空間數(shù)據(jù)。隨著計算機、傳感器、空間技術(shù)的高速發(fā)展,影像、格網(wǎng)數(shù)字地面模型等柵格數(shù)據(jù)在急速增長,建立完善、易于應(yīng)用的柵格數(shù)據(jù)庫成為迫切的需要。柵格數(shù)據(jù)庫建立方式有很多種,可以直接采用二進制對象存儲,也可以采用空間數(shù)據(jù)引擎如Oracle spatial、ArcSDE等。從成本、效率、功能上各種方法都有自己的特點,在應(yīng)用過程中要根據(jù)項目的需求及成本控制來選擇柵格數(shù)據(jù)庫的建立方式。在僅使用Oracle數(shù)據(jù)庫的情況下,常用的方式包括:二進制對象存儲和GeoRaster模型存儲。前者簡單方便,后者功能強大,對多源數(shù)據(jù)的支持完善。本文針對大范圍的柵格數(shù)據(jù),提出一種新的存儲模型:統(tǒng)一瓦片分塊模型。本模型簡化GeoRaster模型分塊方式,建立統(tǒng)一的分塊方法,便于索引,易于應(yīng)用,是一種高效、低成本的解決方案。
二進制對象(BLOB,Binary Large Object)是oracle的一種數(shù)據(jù)類型,用于存儲二進制格式的數(shù)據(jù),如:影像、音頻、視頻等。Oracle發(fā)布到11g版本,已經(jīng)能支持大于4G byte的二進制對象的存儲,因此使用BOLB對象能存儲任意大小的柵格數(shù)據(jù)。使用二進制對象存儲柵格數(shù)據(jù)是一個整體,其內(nèi)部的信息不能被解析,需建立相應(yīng)的表格存儲坐標(biāo)系及空間參考、數(shù)據(jù)類型等。
直接使用Blob建立柵格數(shù)據(jù)庫結(jié)構(gòu)簡單,適合做數(shù)據(jù)存儲,特別是按圖幅存儲的柵格數(shù)據(jù)。這種方式不具備空間分析及索引能力,而且獲取柵格數(shù)據(jù)的子區(qū)域數(shù)據(jù)較為困難,需將數(shù)據(jù)完全下載后進行截取。
Oracle Spatial是Oracle內(nèi)置的一款空間數(shù)據(jù)引擎。GeoRaster 是Oracle Spatial的一個子集,它提供了柵格數(shù)據(jù)類型及關(guān)系對象方案,使得Oracle Spatial具備存儲、索引、查詢和分析空間柵格數(shù)據(jù)的能力。GeoRaster采用了金字塔影像、R-tree索引、瓦片分塊等技術(shù),對多數(shù)據(jù)源的數(shù)據(jù)有良好的兼容性。利用Oracle Spatial的空間索引,GeoRaster同樣具備良好的查詢性能。同時GeoRaster提供一系列的程序集,能完成基本的空間分析功能。GeoRaster是一個完整的,集存儲、查詢、分析于一體的空間柵格數(shù)據(jù)引擎。
GeoRaster在存儲方式上采用了瓦片分塊的方法。該方法將影像分為多個瓦片塊進行存儲,具體的實施方式是:以SDO_GEORASTER數(shù)據(jù)類型定義柵格對象的類型、空間范圍及元數(shù)據(jù),在影像坐標(biāo)系下將數(shù)據(jù)按行和列劃分為多個瓦片,由多個SDO_RASTER對象分別存儲(如圖1所示)。
圖1 GeoRaster的分塊結(jié)構(gòu)
瓦片式的柵格數(shù)據(jù)存儲,能提高數(shù)據(jù)訪問的效率,在數(shù)據(jù)使用時,可根據(jù)需要獲取所需的柵格瓦片,大大降低了傳輸數(shù)據(jù)量。同時在數(shù)據(jù)顯示時,基于2n的瓦片分塊能最大程度的提高紋理存儲和顯示效率。
GeoRaster瓦片分塊是以圖像坐標(biāo)系為基礎(chǔ)進行的,與空間坐標(biāo)系存在一個轉(zhuǎn)換關(guān)系。因此存儲多個在空間上不連續(xù)或存在旋轉(zhuǎn)的圖像時,各圖像分塊在空間上是獨立的。在某些數(shù)據(jù)應(yīng)用中,總是希望數(shù)據(jù)是以統(tǒng)一的分塊進行存儲,這樣可以降低應(yīng)用的復(fù)雜度,例如在數(shù)據(jù)融合時,統(tǒng)一分塊的圖像可以按分塊各自進行運算(如圖2所示)。
圖2 統(tǒng)一瓦片分塊
因此,本文提出統(tǒng)一瓦片分塊的存儲模型?;诮y(tǒng)一瓦片分塊的存儲,是將空間劃分為連續(xù)多層的格網(wǎng),然后以格網(wǎng)對影像進行劃分和重新采樣,進行存儲。如一般瓦片存儲一樣,本方法雖然在物理上采取分塊,但是在邏輯上,各柵格數(shù)據(jù)仍然是獨立的整體。采用本方法時數(shù)據(jù)需滿足如下條件:(1)同一種分塊方法存儲的柵格數(shù)據(jù)采用的像素分辨率必須相同或互為2n倍。(2)所存儲的柵格數(shù)據(jù)需在統(tǒng)一的坐標(biāo)系之下;如數(shù)據(jù)范圍較廣,需要分帶,則每個分帶需建立各自空間的格網(wǎng)分塊。
采用統(tǒng)一劃分的瓦片存儲基本思路如下:
①確定坐標(biāo)系和分塊基點。確定坐標(biāo)系和基點,就是確定分塊的空間及原點位置,一般可采用(0,0)點作為基點,也可采用特殊的點作為基點。
②確定基本像素分辨率和瓦片分塊大小。在確定這兩個要素之后,空間劃分的間距也就可以確定了。如:采用像素分辨率為0.5 m,分塊為256×256個像素。
③確定層數(shù),建立柵格數(shù)據(jù)金字塔。為了便于數(shù)據(jù)在不同尺度空間下的應(yīng)用,建立柵格數(shù)據(jù)金字塔是非常必要的。確定了金字塔層數(shù),也就確定了柵格數(shù)據(jù)的尺度范圍及劃分(如圖3所示)。
圖3 統(tǒng)一瓦片分塊模型的空間及尺度劃分
④對柵格數(shù)據(jù)進行分塊存儲。首先計算柵格數(shù)據(jù)落入那些分塊的范圍,然后在各分塊內(nèi)對柵格數(shù)據(jù)進行劃分,并進行存儲。如影像存在旋轉(zhuǎn)角或分辨率不一致,則需進行重采樣。
⑤建立金字塔數(shù)據(jù)。從0層起向上建立金字塔數(shù)據(jù),按照區(qū)域?qū)?yīng)關(guān)系,上一層的瓦片對應(yīng)下一層4個瓦片,通過合并和提取,可得到每層的瓦片數(shù)據(jù)。
至此統(tǒng)一瓦片分塊的柵格數(shù)據(jù)存儲體系建立完畢。采用本模型可以對數(shù)據(jù)進行快速檢索。由于坐標(biāo)和分塊之間存在數(shù)學(xué)關(guān)系,通過坐標(biāo)即可獲得塊行列號,以此進行檢索即可獲得落入該區(qū)域的影像,并能獲得其柵格瓦片。由坐標(biāo)計算分塊行列號的公式為
(1)
式中(X0,Y0)表示基點坐標(biāo);(X,Y)表示要檢索的位置;INT表示向下取整;m表示分塊行號;n表示分塊列號。
在對不同柵格數(shù)據(jù)的同一區(qū)域進行數(shù)據(jù)處理時,本模型也有明顯的性能優(yōu)勢。由于采用相同的瓦片劃分,在研究區(qū)域內(nèi)的不同柵格數(shù)據(jù)的瓦片能一一對應(yīng),非常易于處理。
根據(jù)統(tǒng)一劃分瓦片模型的原理,本文在Oracle中建立相應(yīng)的統(tǒng)一瓦片劃分柵格模型。
本模型定義了C_GeoRaster對象和C_RASTER對象,對應(yīng)于柵格數(shù)據(jù)對象和瓦片分塊對象,同時定義了rasterGrid 表,對應(yīng)于坐標(biāo)系分塊定義。
C_GeoRaster定義了柵格數(shù)據(jù)對象,一個柵格對象即代表一個柵格數(shù)據(jù),如一幅影像。柵格對象可作為一列放置到任意表中,用來表示柵格數(shù)據(jù)。含有C_GeoRaster對象的表稱為柵格數(shù)據(jù)表,C_GeoRaster結(jié)構(gòu)定義如下:
CREATE TYPE C_Georaster AS OBJECT (
rasterTable VARCHAR2(32),
rasterID NUMBER,
maxColumnNumber NUMBER,
minColumnNumber NUMBER,
maxRowNumber NUMBER,
minRowBlockNumber NUMBER,
rasterGridID NUMBER);
其中rasterTable為瓦片存儲表名稱,rasterID為柵格數(shù)據(jù)對象的唯一標(biāo)示符,maxColumnNumber,minColumnNumber,maxRowNumber,minRowBlockNumber表示該柵格數(shù)據(jù)對象對應(yīng)的分塊范圍,rasterGridID表示該柵格對象對應(yīng)的坐標(biāo)系分塊方法。
C_Raster定義了瓦片分塊對象。瓦片分塊對象存儲在單獨的瓦片數(shù)據(jù)表中,其結(jié)構(gòu)如下:
CREATE TYPE C_Raster AS OBJECT (
rasterID NUMBER,
pyramidLevel NUMBER,
bandBlockNumber NUMBER,
rowBlockNumber NUMBER,
columnBlockNumber NUMBER,
rasterBlock BLOB);
其中rasterID為所屬柵格數(shù)據(jù)對象編號,pyramidLevel表示所處金字塔層號,bandBlockNumber表示波段號, rowBlockNumber表示行號,columnBlockNumber表示列號,rasterBlock為存儲的柵格數(shù)據(jù)。C_Raster對象以rasterID、pyramidLevel、bandBlockNumber、rowBlockNumber、columnBlockNumber為聯(lián)合主鍵。
rasterGrid坐標(biāo)系分塊定義表定義如下:
CREATE TABLE rasterGrid_table(
rasterGridID NUMBER,
SRID NUMBER,
baseX NUMBER,
baseY NUMBER,
blockSize NUMBER,
pixSize NUMBER)
表中rasterGridID 為坐標(biāo)系分塊唯一標(biāo)示符,SRID 為坐標(biāo)系標(biāo)識符,baseX、baseY 表示分塊基點,blockSize表示分塊大小,pixSize表示0層像素分辨率。
在定義了以上對象和表格之后,統(tǒng)一瓦片分塊模型也就建立起來了,其結(jié)構(gòu)如圖4所示。
圖4 統(tǒng)一瓦片分塊模型數(shù)據(jù)庫結(jié)構(gòu)
為證明本方法的可行性與實用性,以正射影像的存儲和拼接為例進行了試驗。以某鐵路航測數(shù)據(jù)為試驗對象,在Oracle 11g中建立柵格數(shù)據(jù)存儲模型,并以C++和OCI編寫了數(shù)據(jù)導(dǎo)入、合并及顯示程序。
在正射影像生產(chǎn)過程中,由于范圍廣闊,各航帶的正射影像都是單獨生成的,航帶間存在一定的轉(zhuǎn)角,圖5為航帶正射影像覆蓋范圍。為方便各測段影像的存儲,并方便合并成一整幅的正射影像,故采用統(tǒng)一劃分瓦片模型來存儲正射影像。
圖5 航帶覆蓋區(qū)域
首先采用本文介紹的方法在Oracle中建立柵格數(shù)據(jù)表OrthoTable作為正射影像表,并建立瓦片表ortho_rt存儲瓦片數(shù)據(jù)。然后采用OCI編寫導(dǎo)入程序,將正射影像導(dǎo)入到表格中。
要獲得全航線完整的正射影像,需要對航帶影像進行拼接。拼接只涉及航帶的重疊區(qū)域。因此,利用兩個航帶相交部分所處的瓦片分塊行列號相同,可很快查詢到航帶重疊的區(qū)域。取出該區(qū)域各航帶的瓦片,經(jīng)過拼接后再按分塊導(dǎo)入到全線正射影像。對于不重疊的航帶正射影像瓦片區(qū)域可以直接復(fù)制到全線正射影像。如圖6(a)展示了航帶H4與H5的重疊區(qū)域,圖中顯示的是H4瓦片將H5瓦片覆蓋的情形,圖6(b)為拼接后的瓦片影像。
圖6 瓦片拼接實例
實驗證明:采用本模型存儲的影像,查詢速度快,在圖像的拼接處理過程中最大限度的減少了涉及的數(shù)據(jù)量,是一種高效簡潔的模型。
在Oracle中建立柵格數(shù)據(jù)庫有多種方式可以選擇,統(tǒng)一瓦片分塊模型是一種面向應(yīng)用的模型,特別是涉及面積廣泛,數(shù)據(jù)源尺度較為接近的數(shù)據(jù)應(yīng)用。在此情況下,本模型相比于GeoRaster模型更為簡單高效,索引簡單,查詢快速,適用于各種數(shù)據(jù)應(yīng)用。而且本模型不需要Oracle Spatial模塊的支持,標(biāo)準(zhǔn)版的Oracle數(shù)據(jù)庫就能建立本模型,更能節(jié)約成本。本模型也具有一定的局限性,對于多源數(shù)據(jù)和多尺度數(shù)據(jù)需要建立多重坐標(biāo)系分塊,具體實施變得較為復(fù)雜,通用性上不及GeoRaster模型。
[1]ORACLE. Oracle Spatial GeoRaster Developer’s Guide 11g Release1[M]. ORACLE, 2008
[2]ORACLE. Oracle Call Interface Programmer’s Guide 11g Release1 [M]. ORACLE, 2008
[3]孫 婷,張立朝,唐漢松,等.基于Oracle的高光譜影像數(shù)據(jù)庫研究[J].北京測繪,2007(2):1-8
[4]陶治宇,馬東洋,徐 青,等.基于Oracle多分辨率遙感影像數(shù)據(jù)庫的設(shè)計[J].測繪學(xué)院學(xué)報,2005,22(1):65-68
[5]蔣波濤,朱 強,錢旭東.WebGIS開發(fā)實踐手冊:基于ArcIMS、OGC和瓦片式GIS[M].北京:電子工業(yè)出版社,2009
[6]王 密,龔建雅,李德仁.大型無縫影像數(shù)據(jù)庫管理系統(tǒng)的設(shè)計與實現(xiàn)[J].武漢大學(xué)學(xué)報:信息科學(xué)版,2003,28(3):294-299