GP工具重分类

        /// <summary>
        /// 获取栅格图层中像元的最大值最小值
        /// </summary>
        /// <param name="pRasterLayer"></param>
        /// <param name="max"></param>
        /// <param name="min"></param>
        static public void GetMaxAndMin(IRasterLayer pRasterLayer,ref double max,ref double min)
        {

            //  获取取值范围
            IRaster pRaster = pRasterLayer.Raster;
            IRasterBandCollection pRBC = (IRasterBandCollection)pRaster;
            IRasterBand pRasterband = pRBC.Item(0);
            //  QI 栅格单元统计接口  
            IRasterStatistics pRS = pRasterband.Statistics;
            max = pRS.Maximum;
            min = pRS.Minimum;

        }

        /// <summary>
        /// 获取重分类映射表
        /// </summary>
        /// <param name="pRasterLayer">待分类的栅格图层</param>
        /// <param name="N">分类数目</param>
        /// <returns></returns>
        static public string GetRemap(IRasterLayer pRasterLayer,int N)
        {
            //获取栅格数据的最大值最小值
            double max = 0.0;
            double min = 0.0;
            GetMaxAndMin(pRasterLayer, ref max, ref min);
            string remap = "";

            //  等分为N类
            double dis = (max - min) / N;

            //  "0 NODATA;1 1"
            for (double i = 0; i < N; i++)
            {
                double from = dis * i + min;
                double to = dis * (i + 1) + min;
                remap += from + " " + to + " " + (i + 1) + ";";
            }

            return remap;
            
        }


        /// <summary>
        /// 重分类分析
        /// </summary>
        /// <param name="pRasterLayer">待分类的图层</param>
        /// <param name="pFilePath">文件输出位置</param>
        /// <param name="pReclassField">待分类字段</param>
        /// <param name="pMissintValue">空值处理</param>
        static public void ReclassifyAnalyze(IRasterLayer pRasterLayer, string pFilePath, int N, string pReclassField = "VALUE", string pMissintValue = "DATA")
        {
            Geoprocessor GP = new Geoprocessor();
            GP.OverwriteOutput = true;

            ESRI.ArcGIS.SpatialAnalystTools.Reclassify pReclassify = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
            pReclassify.in_raster = pRasterLayer;
            pReclassify.out_raster = pFilePath;
            //  待分类字段
            //myReclassify.reclass_field = "VALUE";
            pReclassify.reclass_field = pReclassField;
            //  空值处理
            //myReclassify.missing_values = "DATA";
            pReclassify.missing_values = pMissintValue;
            //  重分类映射表设置
            //myReclassify.remap = "0 NODATA;1 1";
            //0 5.730143 1;5.730143 11.460286 2;11.460286 17.190429 3;17.190429 22.920572 4;22.920572 28.650715 5;28.650715 34.380858 6;34.380858 40.111001 7;40.111001 45.841144 8;45.841144 51.571287 9;51.571287 57.301430 10
            string pRemap = GetRemap(pRasterLayer, N);
            pReclassify.remap = pRemap;


            try
            {
                IGeoProcessorResult2 result = GP.Execute(pReclassify, null) as IGeoProcessorResult2;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "GP Error");
            }
            finally
            {
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                for (int i = 0; i < GP.MessageCount; i++)
                    sb.AppendLine(GP.GetMessage(i));
                if (sb.Capacity > 0) MessageBox.Show(sb.ToString(), "GP Messages");
            }


        }

GP工具栅格重分类_ScapeD的博客-CSDN博客


版权声明:本文为sadasdassadaw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。