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