zoukankan      html  css  js  c++  java
  • C#+arcengine获得栅格数据的像素值(高程)

    此文问获得栅格数据的像元值(即高程),有可能部分见解不到位,望大神看到了不惜指教!

      /// <summary>

            ///  得到高程(通过像素值)
            /// </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;
                    }
                   
                }

            }

    本博文参照http://www.docin.com/p-607056135.html,感谢!

  • 相关阅读:
    压测场景下的 TIME_WAIT 处理
    拥抱云原生,Fluid结合JindoFS :阿里云OSS加速利器
    从DHTML、HTC、XHTML到AJAX
    altas(ajax)控件(一):多功能面板控件Accordion
    fedora7 常用软件安装
    Fedora7安装后的配置
    .net程序员的盲点(六):StringBuilder 和 String 的区别
    .net程序员的盲点(五):告诉你一个不一样的new
    .net程序员的盲点(四):索引器Indexers
    员工究竟渴望学到的是什么?-(杂谈-20070816)
  • 原文地址:https://www.cnblogs.com/gisoracle/p/9150827.html
Copyright © 2011-2022 走看看