ArcEngine + C# 獲取柵格資料像元值
阿新 • • 發佈:2019-01-23
此文問獲得柵格資料的像元值(即高程),有可能部分見解不到位,望大神看到了不惜指教!
///
/// 得到高程(通過畫素值) /// </summary> /// <param name="maskTifPath">Raster路徑</param> private List<int> GetElevation(string maskTifPath, List<IPoint> pointColList)//pointcollist是點集合,可以參照博文獲得點集合 { IRaster raster = GetRaster(maskTifPath);//參見博文獲得raster資料 //得到一段光柵帶 IRasterBandCollection rasterBandCollection = (IRasterBandCollection)raster; for (int icount = 0; icount < rasterBandCollection.Count; icount++)//測試資料count為1 { IRasterBand rasterBand = rasterBandCollection.Item(icount); //畫素 IRawPixels rawPixels = (IRawPixels)rasterBand; IRasterProps rasterProps = (IRasterProps)rawPixels; //IGeoDataset geodataset = (IGeoDataset)raster; //IEnvelope2 envelop = new EnvelopeClass(); //envelop = (IEnvelope2)geodataset.Extent; //IPoint point = envelop.UpperLeft; // 像元大致範圍 //double blockX = (double)rasterProps.MeanCellSize().X;//網格X間距 //double blockY = (double)rasterProps.MeanCellSize().Y;//網格Y間距 //double blockArea = blockX * blockY;//網格面積 //int columns = rasterProps.Width;//dem列數 //int rows = rasterProps.Height;//dem行數 // 指定畫素塊大小 IPnt blockSize = new DblPnt(); //blockSize.X = columns; //blockSize.Y = rows; blockSize.X = 5;//賦值為多少比較合適? blockSize.Y = 5; //blockSize.X = blockX; //blockSize.Y = blockY; //指定畫素塊大小來建立畫素快 IPixelBlock3 pixelBlock = (IPixelBlock3)rawPixels.CreatePixelBlock(blockSize); IPnt blockOrigin = new DblPnt(); IPoint point = new PointClass(); List<int> pixels = new List<int>(); for (int j = 0; j < pointColList.Count; j++) { point = pointColList[j]; blockOrigin.X = point.X; blockOrigin.Y = point.Y; // 讀取指定位置的畫素塊(blockOrigin為指定位置) rawPixels.Read(blockOrigin, (IPixelBlock)pixelBlock); //儲存格網dem的二維陣列 System.Array pixelData = (System.Array)pixelBlock.get_PixelDataByRef(icount); // 獲得每一個柵格的高程值 for (int col = 0; col < pixelData.GetLength(0); col++) { for (int row = 0; row < pixelData.GetLength(1); row++) { pixels.Add(Convert.ToInt32(pixelData.GetValue(col, row))); } } return pixels; } } }