摘 要:實(shí)際生產(chǎn)數(shù)據(jù)管理中,DEM數(shù)據(jù)的接邊不一致非常普遍。然而DEM數(shù)據(jù)接邊檢查卻是一項(xiàng)繁重的任務(wù)。本文基于arcengine10新增的柵格數(shù)據(jù)接口實(shí)現(xiàn)DEM數(shù)據(jù)自動(dòng)接邊檢查,并運(yùn)到到實(shí)際生產(chǎn)過(guò)程中。極大的提高了工作效率。
關(guān)鍵詞:dem 數(shù)據(jù)接邊 arcengine10
中圖分類號(hào):P2文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1672-3791(2012)06(c)-0009-02
實(shí)際生產(chǎn)中,圖幅接邊是其中重要的一環(huán)。而dem(數(shù)字高程模型)數(shù)據(jù)與常用的點(diǎn)、線、面矢量數(shù)據(jù)不同,其采用柵格矩形格網(wǎng)形式表達(dá)。格網(wǎng)DEM的一個(gè)缺點(diǎn)是數(shù)據(jù)量過(guò)大,給數(shù)據(jù)管理帶來(lái)了不方便。日常管理中發(fā)現(xiàn),DEM數(shù)據(jù)接邊處不一樣問(wèn)題很普遍。DEM接邊要求很嚴(yán)格,必須嚴(yán)格吻合既相同格網(wǎng)高程值必須一樣,不允許有限差,而且柵格格網(wǎng)個(gè)數(shù)特別多。這就使得在日常生產(chǎn)管理中,DEM數(shù)據(jù)的接邊及接邊檢查非常繁重。
1 ArcEngine10新增操作柵格數(shù)據(jù)接口
DEM數(shù)據(jù)為矩形格網(wǎng),其兩者相交區(qū)域也必然為矩形格網(wǎng)。要實(shí)現(xiàn)DEM數(shù)據(jù)的接邊檢查,就要查看2個(gè)相鄰DEM重疊格網(wǎng)信息,就要對(duì)重疊格網(wǎng)每一個(gè)單元進(jìn)行讀取操作。在arcEngine10之前的版本中,對(duì)柵格數(shù)據(jù)的操作采用的是光標(biāo)法(rastercursor),其方法是將柵格數(shù)據(jù)自動(dòng)分成幾個(gè)光標(biāo)塊,再將光標(biāo)塊當(dāng)成像素塊(PixelBlock)的集合,再操作像素塊集合從而操作每一個(gè)像素塊(也就的單元格網(wǎng))。該方法通過(guò)操作柵格數(shù)據(jù)中光標(biāo)塊內(nèi)部單元格網(wǎng),對(duì)其進(jìn)行讀取、修改等操作,但是卻不能對(duì)指定單元格網(wǎng)(具體的某一個(gè))進(jìn)行讀取、修改等操作,其只能對(duì)某個(gè)光標(biāo)塊中的單元格網(wǎng)進(jìn)行操作,而光標(biāo)塊大小在整個(gè)柵格中的具體位置很難判斷。從而得到不到某個(gè)單元格網(wǎng)的具體坐標(biāo)位置。在ArcGis10版本中新增加一個(gè)RawBlocks對(duì)象,并且實(shí)現(xiàn)IRawBlock接口,通過(guò)該接口可以得到某個(gè)單元格網(wǎng)(像素塊)的具體坐標(biāo)位置。該RawBlocks對(duì)象實(shí)現(xiàn)不通過(guò)以上光標(biāo)法對(duì)柵格數(shù)據(jù)進(jìn)行操作,而是通過(guò)瓦片(tiling)方法進(jìn)行操作。IRawBlocks接口實(shí)現(xiàn)5個(gè)成員如表1所示。
而RasterInfo方法得到一個(gè)RasterInfo對(duì)象,該對(duì)象同樣為arcengine10新增類。其主要用處為:獲得柵格數(shù)據(jù)的坐標(biāo)原點(diǎn),柵格數(shù)據(jù)坐標(biāo)范圍,單元格網(wǎng)大小(x,y軸大小數(shù)值),單元格網(wǎng)的行數(shù)(BlockHeight),列數(shù)(BlockWidth)等。RawBlocks對(duì)象操作柵格數(shù)據(jù)的具體用法如以下幾點(diǎn)。
(1)將單波段柵格數(shù)據(jù)直接賦予Raw-Blocks對(duì)象,多波段的數(shù)據(jù)分波段賦予RawBlocks對(duì)象。(2)通過(guò)RasterInfo方法得到RasterInfo對(duì)象,得到各個(gè)具體瓦片。(3)在每個(gè)瓦片中,得到具體的單元格網(wǎng),從而對(duì)柵格格網(wǎng)進(jìn)行操作。(4)通過(guò)瓦片坐標(biāo),瓦片中單元格網(wǎng)的位置,得到單元格網(wǎng)的具體坐標(biāo)。
2 Dem數(shù)據(jù)接邊檢查
分幅的DEM數(shù)據(jù)必須進(jìn)行接邊。因?yàn)镈EM數(shù)據(jù)是用柵格格網(wǎng)表達(dá),對(duì)其進(jìn)行接邊就是要講兩兩相鄰數(shù)據(jù)重疊處的每個(gè)格網(wǎng)進(jìn)行高程值的一致性處理。因?yàn)闁鸥窀窬W(wǎng)個(gè)數(shù)特別多,其接邊首先要進(jìn)行接邊處檢查,判斷具體格網(wǎng)高程值是否需要修改。對(duì)等待接邊檢查的DEM數(shù)據(jù)2幅DEM數(shù)據(jù)進(jìn)行接邊檢查,其流程可以概括如圖1。
3 實(shí)驗(yàn)
在vs2010環(huán)境,基于C#+ArcEngine10編程實(shí)現(xiàn)DEM數(shù)據(jù)自動(dòng)接邊檢查程序。兩DEM數(shù)據(jù)相減后得到相交區(qū)域的矩形格網(wǎng)后,如果接邊一致,那么其單元格網(wǎng)應(yīng)該為0值。對(duì)格網(wǎng)內(nèi)部單元格網(wǎng)進(jìn)行0值檢查為程序核心。程序核心操作為:對(duì)柵格數(shù)據(jù)由系統(tǒng)分得的瓦片逐一檢查,然后將瓦片中的具體格網(wǎng)的值進(jìn)行非0判斷,為非0則記錄該格網(wǎng)的中心坐標(biāo)等信息。
部分的代碼如下:
for (int pbYcursor = startY; pbYcursor < endY; pbYcursor++)
{
for (int pbXcursor = startX; pbXcursor < endX; pbXcursor++)
{
rawBlocks.ReadBlock(pbXcursor, pbYcursor, 0, pb);
System.Array safeArray = (System.Array)pb.get_SafeArray(0);
for (int safeArrayHeight = 0; safeArrayHeight < pb.Height; safeArrayHeight++)
{
for (int safeArrayWidth = 0; safeArrayWidth < pb.Width; safeArrayWidth++)
{
object value = safeArray.GetValue(safeArrayWidth, safeArrayHeight);
double dVal = Convert.ToDouble(value);
if (!Math.Equals(dVal, 0.0) !Math.Equals(dVal, -3.4028234663852886E+38))
{
IPoint p_val = new ESRI.ArcGIS.Geometry.Point ();
p_val.X = rasInfo.Origin.X + (pbXcursor * rasInfo.BlockWidth + safeArrayWidth + 0.5) * rasInfo.CellSize.X;
p_val.Y = rasInfo.Origin.Y - ( rasInfo.BlockHeight * pbYcursor+safeArrayHeight + 0.5) * rasInfo.CellSize.Y;
}
}
}
}
}
我們對(duì)實(shí)際DEM數(shù)據(jù)進(jìn)行了自動(dòng)接邊檢查實(shí)驗(yàn)。對(duì)同一度帶下1∶1萬(wàn)的DEM數(shù)據(jù)共932幅進(jìn)行接邊檢查,其中有兩兩相交后產(chǎn)生的新數(shù)據(jù)共3081個(gè)。有接邊問(wèn)題的相交區(qū)域共204個(gè),檢查出有非0值的高程不一致的格網(wǎng)個(gè)數(shù)共111282個(gè),需要修改。運(yùn)行耗時(shí)3小時(shí)07分鐘。
4 結(jié)語(yǔ)
本文介紹了arcengine10新增柵格數(shù)據(jù)操作對(duì)象RawBlocks對(duì)象及其IRawBlock接口,提出了對(duì)DEM數(shù)據(jù)自動(dòng)接邊檢查流程,最后實(shí)現(xiàn)了DEM數(shù)據(jù)自動(dòng)接邊檢查并運(yùn)用到實(shí)際生產(chǎn)當(dāng)中。DEM數(shù)據(jù)接邊檢查任務(wù)繁雜,細(xì)致,通過(guò)基于arcengine的自動(dòng)接邊檢查程序,提高了生產(chǎn)效率。今后的研究中將著力解決程序運(yùn)行速度問(wèn)題,將程序進(jìn)行優(yōu)化,縮短運(yùn)行時(shí)間,從而使得生產(chǎn)效率更高效。
參考文獻(xiàn)
[1]塢倫.地理信息系統(tǒng)原理、方法和應(yīng)用[M].科學(xué)出版社,2000.
[2]胡鵬,黃杏元,華一新,地理信息系統(tǒng)教程[M].武漢大學(xué)出版社,2002,2.