// 空间分析:重分类
 private void Reclassify(object in_raster, object reclass_field, object remap, object out_raster)
 {
     ESRI.ArcGIS.SpatialAnalystTools.Reclassify pTool = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify()
     {
         in_raster     = in_raster,
         out_raster    = out_raster,
         reclass_field = reclass_field,
         remap         = remap
     };
     GP.Execute(pTool, null);
 }
Exemple #2
0
        /// <summary>
        /// Reclassifies the specified raster.
        /// </summary>
        /// <param name="inRaster">The in raster.</param>
        /// <param name="outRaster">The out raster.</param>
        /// <param name="reMap">The remap.eg "old new;old new"</param>
        /// <param name="msg">The out MSG.</param>
        /// <param name="reField">The reclass field.</param>
        /// <param name="missingValue">The missing value.</param>
        /// <returns><c>true</c> succeed <c>false</c> failed</returns>
        public bool Reclassify(string inRaster, string outRaster, string reMap, out string msg, string reField = "VALUE", string missingValue = "NODATA")
        {
            msg = "";
            bool result = false;

            ESRI.ArcGIS.SpatialAnalystTools.Reclassify reClass = null;
            IGeoProcessorResult geoProcessorResult             = null;

            try
            {
                reClass                = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
                reClass.in_raster      = inRaster;
                reClass.missing_values = missingValue;
                reClass.out_raster     = outRaster;
                reClass.reclass_field  = reField;
                reClass.remap          = reMap;
                //geoProcessorResult = this.m_gp.Execute(reClass, null) as IGeoProcessorResult;
                //msg += GetGPMessages(this.m_gp);
                //Geoprocessor m_gp = new Geoprocessor() { OverwriteOutput = true };
                geoProcessorResult = m_gp.Execute(reClass, null) as IGeoProcessorResult;
                msg += GetGPMessages(m_gp);
                if (geoProcessorResult.Status == esriJobStatus.esriJobSucceeded)
                {
                    result = true;
                }
                else
                {
                    result = false;
                }
                return(result);
            }
            catch (Exception ex)
            {
                msg = "error!\r\n" + ex.Message;
                return(false);
            }
            finally
            {
                //if (geoProcessorResult != null)
                //    Marshal.ReleaseComObject(geoProcessorResult);
            }
        }
Exemple #3
0
        private bool Reclassify(string selectedLayer)
        {
            try
            {
                ESRI.ArcGIS.Geoprocessor.Geoprocessor      gp      = new ESRI.ArcGIS.Geoprocessor.Geoprocessor();
                ESRI.ArcGIS.SpatialAnalystTools.Reclassify reclass = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
                reclass.in_raster     = selectedLayer;//RingBuffered_
                reclass.reclass_field = "Value";
                reclass.out_raster    = AppSingleton.Instance().WorkspacePath + "\\Reclassifiedlayer";
                reclass.remap         = "0 8 1;8 15 2;15 23 3;23 40 4;40 55 5;55 10000 6;NODATA 0";
                gp.AddOutputsToMap    = true;
                gp.OverwriteOutput    = true;
                gp.Execute(reclass, null);

                return(true);
            }
            catch (Exception ex)
            {
                return(false);
            }
        }
Exemple #4
0
        private void btOk_Click(object sender, EventArgs e)
        {
            int    sExcute = 0;
            int    sIsNul  = 0;
            int    sIsThan = 0;
            double sAll    = 0;

            for (int i = 0; i < this.dataGridView1.Rows.Count - 1; i++)
            {
                if (this.dataGridView1.Rows[i].Cells[1].Value == null)
                {
                    sIsNul = 1;    //如果权重存在空值,sIsNul=1
                }
                else
                {
                    double ssRow = double.Parse(this.dataGridView1.Rows[i].Cells[1].Value.ToString());
                    sAll = sAll + ssRow;
                }
            }
            if ((sAll != 1.0) && (sIsNul == 0))
            {
                sIsThan = 1;  //如果权重之和不为1,sIsThan=1
            }
            //判断权重是否为空
            if (sIsNul == 1)
            {
                MessageBox.Show("请您输入数据权重!");
            }
            //判断权重之和是否等于1
            if (sIsThan == 1)
            {
                MessageBox.Show("请您确保输入的权重之和等于1");
            }
            if (txtSavePath.Equals(""))
            {
                MessageBox.Show("请选择输出路径!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            //准备后续执行

            if ((sIsNul == 0) && (sIsThan == 0) && (Onebt == 1))
            {
                //现创建一个存放临时文件的临时文件夹
                string newPath = System.IO.Path.Combine(Temfile, "");
                System.IO.Directory.CreateDirectory(newPath);
                this.rtxtState.AppendText("正在执行,请您耐心等待...\n");
                this.rtxtState.ScrollToCaret();
                this.rtxtState.AppendText("准备调用GP工具箱...\n");
                this.rtxtState.ScrollToCaret();
                IVariantArray parameters = new VarArrayClass();
                Geoprocessor  GP         = new Geoprocessor();

                ESRI.ArcGIS.SpatialAnalystTools.RasterCalculator sCalR = new ESRI.ArcGIS.SpatialAnalystTools.RasterCalculator();
                this.rtxtState.AppendText("开始遍历读取表中数据...\n");
                this.rtxtState.ScrollToCaret();
                this.rtxtState.AppendText("开始对栅格数据重分类...\n");
                this.rtxtState.ScrollToCaret();
                for (int m = 0; m < this.dataGridView1.Rows.Count - 1; m++)
                {
                    string sFileName;
                    sFileName = Temfile + "\\重分类" + (m + 1).ToString() + ".tif";
                    //计算栅格最小值
                    double         dMin0 = 0;
                    IGeoProcessor2 gp    = new GeoProcessorClass();
                    gp.OverwriteOutput = true;
                    // Create a variant array to hold the parameter values.
                    IVariantArray       parameters2 = new VarArrayClass();
                    IGeoProcessorResult result      = new GeoProcessorResultClass();
                    // Set parameter values.
                    parameters2.Add(this.dataGridView1.Rows[m].Cells[0].Value.ToString());
                    parameters2.Add("MINIMUM");
                    result = gp.Execute("GetRasterProperties_management", parameters2, null);
                    dMin0  = (double)result.ReturnValue;
                    int dMin = (int)dMin0;
                    //计算栅格最大值
                    double         dMax0 = 0;
                    IGeoProcessor2 gp2   = new GeoProcessorClass();
                    gp2.OverwriteOutput = true;
                    // Create a variant array to hold the parameter values.
                    IVariantArray       parameters3 = new VarArrayClass();
                    IGeoProcessorResult result3     = new GeoProcessorResultClass();
                    // Set parameter values.
                    parameters3.Add(this.dataGridView1.Rows[m].Cells[0].Value.ToString());
                    parameters3.Add("MAXIMUM");
                    result3 = gp2.Execute("GetRasterProperties_management", parameters3, null);
                    dMax0   = (double)result3.ReturnValue;
                    int dMax = (int)dMax0;
                    //计算分类区间
                    int Avera     = (dMax - dMin) / 4;
                    int interval1 = dMin + Avera;
                    int interval2 = dMin + 2 * Avera;
                    int interval3 = dMin + 3 * Avera;
                    //开始对数据进行重分类
                    ESRI.ArcGIS.SpatialAnalystTools.Reclassify tReclass = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
                    tReclass.in_raster      = this.dataGridView1.Rows[m].Cells[0].Value.ToString();
                    tReclass.missing_values = "NODATA";
                    tReclass.out_raster     = sFileName;
                    tReclass.reclass_field  = "VALUE";
                    //tReclass.remap = "1400 2176 1;2176 2538 2;2538 3040 3;3040 4073 4";
                    tReclass.remap = dMin.ToString() + " " + interval1.ToString() + " " + "1;" + interval1.ToString() + " " + interval2.ToString() + " " + "2;" + interval2.ToString() + " " + interval3.ToString() + " " + "3;" + interval3.ToString() + " " + dMax.ToString() + " " + "4;";
                    // ScrollToBottom("Reclassify");
                    //tGeoResult = (IGeoProcessorResult)tGp.Execute(tReclass, null);
                    GP.Execute(tReclass, null);
                }
                this.rtxtState.AppendText("输入数据重分类完成...\n");
                this.rtxtState.ScrollToCaret();
                //开始进行栅格计算
                this.rtxtState.AppendText("开始准备进行栅格加权运算...\n");
                this.rtxtState.ScrollToCaret();
                string sFileName2 = "重分类";
                string sRoad      = Temfile + "\\重分类";
                for (int n = 1; n < this.dataGridView1.Rows.Count; n++)
                {
                    sFileName2 = sRoad + n.ToString() + "." + "tif";
                    strExp     = "\"" + sFileName2 + "\"" + "*" + double.Parse(this.dataGridView1.Rows[n - 1].Cells[1].Value.ToString());
                    if (n < this.dataGridView1.Rows.Count - 1)
                    {
                        sR2 = sR2 + strExp + "+";
                    }
                    else
                    {
                        sR2 = sR2 + strExp;
                    }
                }
                sR3 = sR2;
                sCalR.expression = sR3;
                sR = Temfile + "\\地质灾害.tif";
                sCalR.output_raster = sR;
                GP.Execute(sCalR, null);
                this.rtxtState.AppendText("栅格计算成功,得到地质灾害分布栅格影像...\n");
                this.rtxtState.ScrollToCaret();
                this.rtxtState.AppendText("开始对地质灾害影像进行重分类...\n");
                this.rtxtState.ScrollToCaret();
                //开始准备对生成的地质灾害.tif进行分类
                //计算栅格最小值
                double         dMin02 = 0;
                IGeoProcessor2 gp3    = new GeoProcessorClass();
                gp3.OverwriteOutput = true;
                // Create a variant array to hold the parameter values.
                IVariantArray       parameters22 = new VarArrayClass();
                IGeoProcessorResult result22     = new GeoProcessorResultClass();
                // Set parameter values.
                parameters22.Add(sR);
                parameters22.Add("MINIMUM");
                result22 = gp3.Execute("GetRasterProperties_management", parameters22, null);
                dMin02   = (double)result22.ReturnValue;

                //计算栅格最大值
                double         dMax02 = 0;
                IGeoProcessor2 gp4    = new GeoProcessorClass();
                gp4.OverwriteOutput = true;
                // Create a variant array to hold the parameter values.
                IVariantArray       parameters33 = new VarArrayClass();
                IGeoProcessorResult result33     = new GeoProcessorResultClass();
                // Set parameter values.
                parameters33.Add(sR);
                parameters33.Add("MAXIMUM");
                result33 = gp4.Execute("GetRasterProperties_management", parameters33, null);
                dMax02   = (double)result33.ReturnValue;

                //计算分类区间
                double Avera2     = (dMax02 - dMin02) / 4;
                double interval12 = dMin02 + Avera2;
                double interval22 = dMin02 + 2 * Avera2;
                double interval32 = dMin02 + 3 * Avera2;

                //开始对地质灾害.tif重分类
                ESRI.ArcGIS.SpatialAnalystTools.Reclassify tReclass2 = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();

                tReclass2.in_raster      = Temfile + "\\地质灾害.tif";
                tReclass2.missing_values = "NODATA";
                tReclass2.out_raster     = txtSavePath.Text;
                tReclass2.reclass_field  = "VALUE";
                //tReclass.remap = "1400 2176 1;2176 2538 2;2538 3040 3;3040 4073 4";
                tReclass2.remap = dMin02.ToString() + " " + interval12.ToString() + " " + "1;" + interval12.ToString() + " " + interval22.ToString() + " " + "2;" + interval22.ToString() + " " + interval32.ToString() + " " + "3;" + interval32.ToString() + " " + dMax02.ToString() + " " + "4;";
                // ScrollToBottom("Reclassify");
                //tGeoResult = (IGeoProcessorResult)tGp.Execute(tReclass, null);
                GP.Execute(tReclass2, null);
                //删除临时文件夹
                string deleteFile = Temfile;
                DeleteFolder(deleteFile);
                this.rtxtState.AppendText("完成地质灾害生态红线的划分,已将结果成功保存...\n");
                this.rtxtState.ScrollToCaret();
            }
        }