GP工具栅格重分类

GP工具可以较为简单的实现栅格数据重分类,要注意参数设置准确。

重分类时要用到获取栅格数据最大最小值,

等间距重分类:

步骤:

  • 获取栅格数据最大最小值
  • 定义与初始化GP工具
  • 定义重分类工具
  • 重分类工具初始化
  • 执行重分类
  • 加载执行结果

获取栅格数据最大最小值

//获取取值范围
IRaster pRaster = pRasterLayer.Raster;
IRasterBandCollection pRBC = (IRasterBandCollection)pRaster;
IRasterBand pRasterband = pRBC.Item(0);  //第一坡道
IRasterStatistics pRS = pRasterband.Statistics;
double max = pRS.Maximum;
double min = pRS.Minimum;

定义与初始化GP工具

Geoprocessor GP = new Geoprocessor();
GP.OverwriteOutput = true;

定义重分类工具

Reclassify pRec = new Reclassify();

重分类工具初始化

pRec.in_raster = pRasterLayer;
pRec.reclass_field = "Value";
string remap = "";
double dis = (max + min) / 10;
for(double i = 0; i < 10; i++)   //此处注意,一定要为double类型
    {
        //注意数字和数字一起算
        //注意字符跟字符一起算
        double from = min + dis * i/10;
        double to = min + dis * (i + 1)/10;
        remap += from + " " + to + " " + i + ";";
    }
pRec.remap = remap;

执行重分类、加载执行结果

            try
            {
                GP.Execute(pRec, null);

                IRasterLayer resRasterLayer = new RasterLayer();
                resRasterLayer.CreateFromFilePath(Application.StartupPath + "\\reclass.tif");
                axMapControl1.AddLayer(resRasterLayer);
                object sev = null;
                MessageBox.Show(GP.GetMessages(ref sev));
            }
            catch
            {
                object sev = null;
                MessageBox.Show(GP.GetMessages(ref sev));

            }

注意:

int型数据运算后会被取整,涉及小数运算时们一定要将数据定义为double或float

数据加减运算与字符串加减要分开,防止混淆,无法执行。

全部代码(函数):

        private void 重分类ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //获取输入数据
            ILayer pLayer = axMapControl1.get_Layer(3);
            IRasterLayer pRasterLayer = pLayer as IRasterLayer;

            //获取取值范围
            IRaster pRaster = pRasterLayer.Raster;
            IRasterBandCollection pRBC = (IRasterBandCollection)pRaster;
            IRasterBand pRasterband = pRBC.Item(0);  //第一坡道
            IRasterStatistics pRS = pRasterband.Statistics;
            double max = pRS.Maximum;
            double min = pRS.Minimum;

            Geoprocessor GP = new Geoprocessor();
            GP.OverwriteOutput = true;

            //定义重分类工具
            Reclassify pRec = new Reclassify();
            pRec.in_raster = pRasterLayer;
            pRec.reclass_field = "Value";

            string remap = "";
            double dis = (max + min) / 10;
            for(double i = 0; i < 10; i++)   //此处注意,一定要为double类型
            {
                //注意数字和数字一起算
                //注意字符跟字符一起算
                double from = min + dis * i/10;
                double to = min + dis * (i + 1)/10;
                remap += from + " " + to + " " + i + ";";
            }
            pRec.remap = remap;
            MessageBox.Show(remap);
            pRec.out_raster = Application.StartupPath + "\\reclass.tif";

            try
            {
                GP.Execute(pRec, null);

                IRasterLayer resRasterLayer = new RasterLayer();
                resRasterLayer.CreateFromFilePath(Application.StartupPath + "\\reclass.tif");
                axMapControl1.AddLayer(resRasterLayer);
                object sev = null;
                MessageBox.Show(GP.GetMessages(ref sev));
            }
            catch
            {
                object sev = null;
                MessageBox.Show(GP.GetMessages(ref sev));

            }
        }

猜你喜欢

转载自blog.csdn.net/ScapeD/article/details/82877097
GP