ArcGIS Engine柵格數據使用總結_Jnita的空間_百度空間

ArcGIS Engine柵格數據使用總結
2009-12-21 17:20

Engine柵格數據使用總結
作者:尤文之鶴    文章來源:http://www.cnblogs.com/linghe/

1、柵格數據的存儲類型

柵格數據一般可以存儲爲ESRI GRID(由一系列文件組成),TIFF格式(包括一個TIF文件和一個AUX文件),IMAGINE Image格式 在AE中一般調用ISaveAs接口來保存柵格數據

2、柵格數據集和柵格編目的區別

一個柵格數據集由一個或者多個波段(RasterBand)的數據組成,一個波段就是一個數據矩陣。對於格網數據(DEM數據)和單波段的影像數據,表現爲僅僅只有一個波段數據的柵格數據集,而對於多光譜影像數據則表現爲具有多個波段的柵格數據集

柵格編目(RasterCatalog)用於顯示某個研究區域內各種相鄰的柵格數據,這些相鄰的柵格數據沒有經過拼接處理合成一副大的影像圖

3、IRasterWorkspaceEx與IRasterWorkspace ,IRsterWorkspace2的區別

1).IRasteWorkspaceEx接口主要是用來讀取GeoDatabase中的柵格數據集和柵格編目

2) . IRasterWorkspace ,IRsterWorkspace2主要是用來讀取以文件格式存儲在本地的柵格數據

4、加載柵格數據(以存儲在本地的柵格數據文件爲例)

1.直接用IRasterLayer接口打開一個柵格文件並加載到地圖控件

IRasterLayer rasterLayer = new RasterLayerClass();

rasterLayer.CreateFromFilePath(fileName); // fileName指存本地的柵格文件路徑

axMapControl1.AddLayer(rasterLayer, 0);

2. 用IRasterDataset接口打開一個柵格數據集

IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();

IWorkspace workspace;

workspace = workspaceFactory.OpenFromFile(inPath, 0); //inPath柵格數據存儲路徑

if (workspace == null)

{

Console.WriteLine("Could not open the workspace.");

return;

}

IRasterWorkspace rastWork = (IRasterWorkspace)workspace;

IRasterDataset rastDataset;

rastDataset= rastWork.OpenRasterDataset(inName);//inName柵格文件名

if (rastDataset == null)

{

Console.WriteLine("Could not open the raster dataset.");

return;

}

5、如何讀取柵格數據的屬性和遍歷柵格數據

柵格數據的屬性包括柵格大小,行數,列數,投影信息,柵格範圍等等,見下面代碼

(假設當前加載的柵格文件柵格值存儲方式爲:UShort類型)

IRasterProps rasterProps = (IRasterProps)clipRaster;

int dHeight = rasterProps.Height;//當前柵格數據集的行數

int dWidth = rasterProps.Width; //當前柵格數據集的列數

double dX = rasterProps.MeanCellSize().X; //柵格的寬度

double dY = rasterProps.MeanCellSize().Y; //柵格的高度

IEnvelope extent=rasterProps.Extent; //當前柵格數據集的範圍

rstPixelType pixelType=rasterProps.PixelType; //當前柵格像素類型

IPnt pntSize = new PntClass();

pntSize.SetCoords(dX, dY);

IPixelBlock pixelBlock = clipRaster.CreatePixelBlock(pntSize);

IPnt pnt = new PntClass();

for (int i = 0; i < dHeight; i++)

for (int j = 0; j < dWidth; j++)

{

pnt.SetCoords(i, j);

clipRaster.Read(pnt, pixelBlock);

if (pixelBlock != null)

{

object obj = pixelBlock.GetVal(0, 0, 0);

MessageBox.Show( Convert.ToUInt32(obj).ToString());

}

}

6、如何提取指定的範圍的柵格數據

提取指定範圍內的柵格數據通常用兩種方法IRasterLayerExport(esriCarto), IExtractionOp, IExtractionOp2 (esriSpatialAnalyst),IRasterLayerExport接口提供的柵格數據提取功能有限,只能以矩形範圍作爲提取範圍,而IExtractionOp接口提供了多邊形,圓,屬性,矩形等幾種形式作爲提取柵格數據.

1).IRasterLayerExport接口

IRasterLayerExport rLayerExport = new RasterLayerExportClass();

rLayerExport.RasterLayer = rasterLayer;// rasterLayer指當前加載的柵格圖層

rLayerExport.Extent = clipExtent;//clipExtent指提取柵格數據的範圍

if (proSpatialRef != null)

rLayerExport.SpatialReference = proSpatialRef;// proSpatialRef當前柵格數據的投影信息

IWorkspaceFactory pWF = new RasterWorkspaceFactoryClass();

try

{

IWorkspace pRasterWorkspace = pWF.OpenFromFile(_folder, 0);// _folder指柵格文件保存路徑

IRasterDataset outGeoDataset = rLayerExport.Export(pRasterWorkspace, code, strRasterType);

//調用ISaveAs接口將導出的數據集保存

……………………..

}

Catch(Exception ex)

{

Throw new Argumention(ex.Message);

}

2.IExtractionOp接口(調用此接口前,應該先檢查空間許可)

IExtractionOp extraction = new RasterExtractionOpClass();

try

{

IGeoDataset geoDataset = extraction.Rectangle((IGeoDataset)clipRaster, clipExtent, true);

IRaster raster = geoDataset as IRaster;

if (raster != null)

{

IWorkspaceFactory WF = new RasterWorkspaceFactoryClass();

IWorkspace rasterWorkspace = WF.OpenFromFile(_folder, 0);

ISaveAs saveAs = (ISaveAs)raster;

saveAs.SaveAs(“Result.tif”, rasterWorkspace, "TIFF");

}

}

catch (Exception ex)

{

MessageBox..Show(Ex.message);

}

7.柵格數據重採樣

柵格數據的重採樣主要基於三種方法:最鄰近採樣(NEAREST),雙線性

ILINEAR)和三次卷積採樣(CUBIC)。

(1).最鄰近採樣:它用輸入柵格數據中最臨近柵格值作爲輸出值。因此,在重採

樣後的輸出柵格中的每個柵格值, 都是輸入柵格數據中真實存在而未加任何改變的值。這種方法簡單易用,計算量小,重採樣的速度最快。

(2).雙線性採樣:此重採樣法取待採樣點(x,y)點周圍四個鄰點,在y方向(或X方向)內插兩次,再在x方向(或y方向)內插一次,得到(x,y)點的柵格值。

(3).三次卷積採樣:這是進一步提高內插精度的一種方法。它的基本思想是增加鄰點來獲

得最佳插值函數。取待計算點周圍相鄰的16個點,與雙線性採樣類似,可先在某一方向上內插,如先在x方向上,每四個值依次內插四次,再根據四次的計算結果在y方上內插,最終得到內插結果

代碼示例:採用雙線性採樣

IRasterGeometryProc rasterGeometryProc = new RasterGeometryProcClass();

rasterGeometryProc.Resample(rstResamplingTypes.RSP_CubicConvolution, newCellSize, clipRaster);

本篇文章來源於 GIS空間站 轉載請以鏈接形式註明出處 網址:http://www.gissky.net/Article/1670.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章