首先,在Visual Studio中新建一个ArcGIS桌面插件项目,选择C#语言。

然后,在插件项目中添加以下控件:

  1. MapControl控件:用于显示地图和栅格数据。
  2. Button控件1和Button控件2:用于读取栅格数据。
  3. Button控件3和Button控件4:用于计算像元值之和。
  4. Textbox控件:用于显示计算结果。

然后,在代码中添加以下功能实现:

  1. 在Button控件1和Button控件2的Click事件中分别调用ArcObjects中的RasterLayerClass和IRasterDataset接口读取栅格数据,并将读取到的栅格数据添加到MapControl控件中显示。
  2. 在Button控件3和Button控件4的Click事件中分别遍历两个栅格数据的像元值,并计算像元值之和,并将结果显示在Textbox控件中。

下面是示例代码:

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesRaster;
using ESRI.ArcGIS.Geodatabase;
using System;
using System.Windows.Forms;

namespace RasterAddin
{
    public partial class RasterAddin : UserControl
    {
        private IRasterLayer rasterLayer1 = null;
        private IRasterLayer rasterLayer2 = null;

        public RasterAddin()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 读取栅格数据1
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Raster files (*.tif)|*.tif";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
                IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(dlg.FileName), 0);
                IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(dlg.FileName));
                rasterLayer1 = new RasterLayerClass();
                rasterLayer1.CreateFromDataset(rasterDataset);
                axMapControl1.AddLayer(rasterLayer1);
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // 读取栅格数据2
            OpenFileDialog dlg = new OpenFileDialog();
            dlg.Filter = "Raster files (*.tif)|*.tif";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
                IRasterWorkspace rasterWorkspace = (IRasterWorkspace)workspaceFactory.OpenFromFile(System.IO.Path.GetDirectoryName(dlg.FileName), 0);
                IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(System.IO.Path.GetFileName(dlg.FileName));
                rasterLayer2 = new RasterLayerClass();
                rasterLayer2.CreateFromDataset(rasterDataset);
                axMapControl1.AddLayer(rasterLayer2);
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            // 计算像元值之和1
            if (rasterLayer1 != null)
            {
                IRaster2 raster = (IRaster2)rasterLayer1.Raster;
                IPnt pnt = new PntClass();
                pnt.SetCoords(0, 0);
                double sum = 0;
                for (int i = 0; i < raster.Width; i++)
                {
                    for (int j = 0; j < raster.Height; j++)
                    {
                        object val = raster.GetPixelValue(0, i, j);
                        if (val != null && val is double)
                        {
                            sum += (double)val;
                        }
                    }
                }
                textBox1.Text = sum.ToString();
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            // 计算像元值之和2
            if (rasterLayer2 != null)
            {
                IRaster2 raster = (IRaster2)rasterLayer2.Raster;
                IPnt pnt = new PntClass();
                pnt.SetCoords(0, 0);
                double sum = 0;
                for (int i = 0; i < raster.Width; i++)
                {
                    for (int j = 0; j < raster.Height; j++)
                    {
                        object val = raster.GetPixelValue(0, i, j);
                        if (val != null && val is double)
                        {
                            sum += (double)val;
                        }
                    }
                }
                textBox1.Text = sum.ToString();
            }
        }
    }
}
使用C#开发ArcGIS桌面插件:读取和计算栅格数据

原文地址: https://www.cveoy.top/t/topic/nJO0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录