王 瑋
(中鐵第一勘察設計院集團有限公司,陜西西安 710043)
柵格數據是一種重要的空間數據。隨著計算機、傳感器、空間技術的高速發展,影像、格網數字地面模型等柵格數據在急速增長,建立完善、易于應用的柵格數據庫成為迫切的需要。柵格數據庫建立方式有很多種,可以直接采用二進制對象存儲,也可以采用空間數據引擎如Oracle spatial、ArcSDE等。從成本、效率、功能上各種方法都有自己的特點,在應用過程中要根據項目的需求及成本控制來選擇柵格數據庫的建立方式。在僅使用Oracle數據庫的情況下,常用的方式包括:二進制對象存儲和GeoRaster模型存儲。前者簡單方便,后者功能強大,對多源數據的支持完善。本文針對大范圍的柵格數據,提出一種新的存儲模型:統一瓦片分塊模型。本模型簡化GeoRaster模型分塊方式,建立統一的分塊方法,便于索引,易于應用,是一種高效、低成本的解決方案。
二進制對象(BLOB,Binary Large Object)是oracle的一種數據類型,用于存儲二進制格式的數據,如:影像、音頻、視頻等。Oracle發布到11g版本,已經能支持大于4G byte的二進制對象的存儲,因此使用BOLB對象能存儲任意大小的柵格數據。使用二進制對象存儲柵格數據是一個整體,其內部的信息不能被解析,需建立相應的表格存儲坐標系及空間參考、數據類型等。
直接使用Blob建立柵格數據庫結構簡單,適合做數據存儲,特別是按圖幅存儲的柵格數據。這種方式不具備空間分析及索引能力,而且獲取柵格數據的子區域數據較為困難,需將數據完全下載后進行截取。
Oracle Spatial是Oracle內置的一款空間數據引擎。GeoRaster 是Oracle Spatial的一個子集,它提供了柵格數據類型及關系對象方案,使得Oracle Spatial具備存儲、索引、查詢和分析空間柵格數據的能力。GeoRaster采用了金字塔影像、R-tree索引、瓦片分塊等技術,對多數據源的數據有良好的兼容性。利用Oracle Spatial的空間索引,GeoRaster同樣具備良好的查詢性能。同時GeoRaster提供一系列的程序集,能完成基本的空間分析功能。GeoRaster是一個完整的,集存儲、查詢、分析于一體的空間柵格數據引擎。
GeoRaster在存儲方式上采用了瓦片分塊的方法。該方法將影像分為多個瓦片塊進行存儲,具體的實施方式是:以SDO_GEORASTER數據類型定義柵格對象的類型、空間范圍及元數據,在影像坐標系下將數據按行和列劃分為多個瓦片,由多個SDO_RASTER對象分別存儲(如圖1所示)。

圖1 GeoRaster的分塊結構
瓦片式的柵格數據存儲,能提高數據訪問的效率,在數據使用時,可根據需要獲取所需的柵格瓦片,大大降低了傳輸數據量。同時在數據顯示時,基于2n的瓦片分塊能最大程度的提高紋理存儲和顯示效率。
GeoRaster瓦片分塊是以圖像坐標系為基礎進行的,與空間坐標系存在一個轉換關系。因此存儲多個在空間上不連續或存在旋轉的圖像時,各圖像分塊在空間上是獨立的。在某些數據應用中,總是希望數據是以統一的分塊進行存儲,這樣可以降低應用的復雜度,例如在數據融合時,統一分塊的圖像可以按分塊各自進行運算(如圖2所示)。

圖2 統一瓦片分塊
因此,本文提出統一瓦片分塊的存儲模型。基于統一瓦片分塊的存儲,是將空間劃分為連續多層的格網,然后以格網對影像進行劃分和重新采樣,進行存儲。如一般瓦片存儲一樣,本方法雖然在物理上采取分塊,但是在邏輯上,各柵格數據仍然是獨立的整體。采用本方法時數據需滿足如下條件:(1)同一種分塊方法存儲的柵格數據采用的像素分辨率必須相同或互為2n倍。(2)所存儲的柵格數據需在統一的坐標系之下;如數據范圍較廣,需要分帶,則每個分帶需建立各自空間的格網分塊。
采用統一劃分的瓦片存儲基本思路如下:
①確定坐標系和分塊基點。確定坐標系和基點,就是確定分塊的空間及原點位置,一般可采用(0,0)點作為基點,也可采用特殊的點作為基點。
②確定基本像素分辨率和瓦片分塊大小。在確定這兩個要素之后,空間劃分的間距也就可以確定了。如:采用像素分辨率為0.5 m,分塊為256×256個像素。
③確定層數,建立柵格數據金字塔。為了便于數據在不同尺度空間下的應用,建立柵格數據金字塔是非常必要的。確定了金字塔層數,也就確定了柵格數據的尺度范圍及劃分(如圖3所示)。

圖3 統一瓦片分塊模型的空間及尺度劃分
④對柵格數據進行分塊存儲。首先計算柵格數據落入那些分塊的范圍,然后在各分塊內對柵格數據進行劃分,并進行存儲。如影像存在旋轉角或分辨率不一致,則需進行重采樣。
⑤建立金字塔數據。從0層起向上建立金字塔數據,按照區域對應關系,上一層的瓦片對應下一層4個瓦片,通過合并和提取,可得到每層的瓦片數據。
至此統一瓦片分塊的柵格數據存儲體系建立完畢。采用本模型可以對數據進行快速檢索。由于坐標和分塊之間存在數學關系,通過坐標即可獲得塊行列號,以此進行檢索即可獲得落入該區域的影像,并能獲得其柵格瓦片。由坐標計算分塊行列號的公式為
(1)
式中(X0,Y0)表示基點坐標;(X,Y)表示要檢索的位置;INT表示向下取整;m表示分塊行號;n表示分塊列號。
在對不同柵格數據的同一區域進行數據處理時,本模型也有明顯的性能優勢。由于采用相同的瓦片劃分,在研究區域內的不同柵格數據的瓦片能一一對應,非常易于處理。
根據統一劃分瓦片模型的原理,本文在Oracle中建立相應的統一瓦片劃分柵格模型。
本模型定義了C_GeoRaster對象和C_RASTER對象,對應于柵格數據對象和瓦片分塊對象,同時定義了rasterGrid 表,對應于坐標系分塊定義。
C_GeoRaster定義了柵格數據對象,一個柵格對象即代表一個柵格數據,如一幅影像。柵格對象可作為一列放置到任意表中,用來表示柵格數據。含有C_GeoRaster對象的表稱為柵格數據表,C_GeoRaster結構定義如下:
CREATE TYPE C_Georaster AS OBJECT (
rasterTable VARCHAR2(32),
rasterID NUMBER,
maxColumnNumber NUMBER,
minColumnNumber NUMBER,
maxRowNumber NUMBER,
minRowBlockNumber NUMBER,
rasterGridID NUMBER);
其中rasterTable為瓦片存儲表名稱,rasterID為柵格數據對象的唯一標示符,maxColumnNumber,minColumnNumber,maxRowNumber,minRowBlockNumber表示該柵格數據對象對應的分塊范圍,rasterGridID表示該柵格對象對應的坐標系分塊方法。
C_Raster定義了瓦片分塊對象。瓦片分塊對象存儲在單獨的瓦片數據表中,其結構如下:
CREATE TYPE C_Raster AS OBJECT (
rasterID NUMBER,
pyramidLevel NUMBER,
bandBlockNumber NUMBER,
rowBlockNumber NUMBER,
columnBlockNumber NUMBER,
rasterBlock BLOB);
其中rasterID為所屬柵格數據對象編號,pyramidLevel表示所處金字塔層號,bandBlockNumber表示波段號, rowBlockNumber表示行號,columnBlockNumber表示列號,rasterBlock為存儲的柵格數據。C_Raster對象以rasterID、pyramidLevel、bandBlockNumber、rowBlockNumber、columnBlockNumber為聯合主鍵。
rasterGrid坐標系分塊定義表定義如下:
CREATE TABLE rasterGrid_table(
rasterGridID NUMBER,
SRID NUMBER,
baseX NUMBER,
baseY NUMBER,
blockSize NUMBER,
pixSize NUMBER)
表中rasterGridID 為坐標系分塊唯一標示符,SRID 為坐標系標識符,baseX、baseY 表示分塊基點,blockSize表示分塊大小,pixSize表示0層像素分辨率。
在定義了以上對象和表格之后,統一瓦片分塊模型也就建立起來了,其結構如圖4所示。

圖4 統一瓦片分塊模型數據庫結構
為證明本方法的可行性與實用性,以正射影像的存儲和拼接為例進行了試驗。以某鐵路航測數據為試驗對象,在Oracle 11g中建立柵格數據存儲模型,并以C++和OCI編寫了數據導入、合并及顯示程序。
在正射影像生產過程中,由于范圍廣闊,各航帶的正射影像都是單獨生成的,航帶間存在一定的轉角,圖5為航帶正射影像覆蓋范圍。為方便各測段影像的存儲,并方便合并成一整幅的正射影像,故采用統一劃分瓦片模型來存儲正射影像。

圖5 航帶覆蓋區域
首先采用本文介紹的方法在Oracle中建立柵格數據表OrthoTable作為正射影像表,并建立瓦片表ortho_rt存儲瓦片數據。然后采用OCI編寫導入程序,將正射影像導入到表格中。
要獲得全航線完整的正射影像,需要對航帶影像進行拼接。拼接只涉及航帶的重疊區域。因此,利用兩個航帶相交部分所處的瓦片分塊行列號相同,可很快查詢到航帶重疊的區域。取出該區域各航帶的瓦片,經過拼接后再按分塊導入到全線正射影像。對于不重疊的航帶正射影像瓦片區域可以直接復制到全線正射影像。如圖6(a)展示了航帶H4與H5的重疊區域,圖中顯示的是H4瓦片將H5瓦片覆蓋的情形,圖6(b)為拼接后的瓦片影像。

圖6 瓦片拼接實例
實驗證明:采用本模型存儲的影像,查詢速度快,在圖像的拼接處理過程中最大限度的減少了涉及的數據量,是一種高效簡潔的模型。
在Oracle中建立柵格數據庫有多種方式可以選擇,統一瓦片分塊模型是一種面向應用的模型,特別是涉及面積廣泛,數據源尺度較為接近的數據應用。在此情況下,本模型相比于GeoRaster模型更為簡單高效,索引簡單,查詢快速,適用于各種數據應用。而且本模型不需要Oracle Spatial模塊的支持,標準版的Oracle數據庫就能建立本模型,更能節約成本。本模型也具有一定的局限性,對于多源數據和多尺度數據需要建立多重坐標系分塊,具體實施變得較為復雜,通用性上不及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的高光譜影像數據庫研究[J].北京測繪,2007(2):1-8
[4]陶治宇,馬東洋,徐 青,等.基于Oracle多分辨率遙感影像數據庫的設計[J].測繪學院學報,2005,22(1):65-68
[5]蔣波濤,朱 強,錢旭東.WebGIS開發實踐手冊:基于ArcIMS、OGC和瓦片式GIS[M].北京:電子工業出版社,2009
[6]王 密,龔建雅,李德仁.大型無縫影像數據庫管理系統的設計與實現[J].武漢大學學報:信息科學版,2003,28(3):294-299