AE开发第五天

1栅格累加

所谓栅格累加就是把一个文件夹里选中的栅格依次相加,相当于之前两个栅格相加的升级版。

public List<IRasterDataset> OpenTiffFiles()
        {
            // 创建一个打开文件对话框
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "TIFF 文件 (*.tif)|*.tif";
            openFileDialog.Title = "选择要打开的TIFF 文件";
            openFileDialog.Multiselect = true; // 允许多选文件

            List<IRasterDataset> rasterDatasets = new List<IRasterDataset>();

            // 如果用户点击了"确定"按钮
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                // 遍历用户选择的所有文件
                foreach (string tiffPath in openFileDialog.FileNames)
                {
                    // 使用工作空间工厂打开 TIFF 文件
                    IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactory();
                    string directory = System.IO.Path.GetDirectoryName(tiffPath);
                    string fileName = System.IO.Path.GetFileName(tiffPath);
                    IRasterWorkspace rasterWorkspace = workspaceFactory.OpenFromFile(directory, 0) as IRasterWorkspace;

                    // 使用工作空间打开栅格数据集
                    IRasterDataset rasterDataset = rasterWorkspace.OpenRasterDataset(fileName);

                    if (rasterDataset != null)
                    {
                        // 将栅格数据集添加到列表中
                        rasterDatasets.Add(rasterDataset);
                    }
                }
            }

            return rasterDatasets; // 返回选择的栅格数据集列表
        }
        private IRaster SumRasterDatasets(List<IRasterDataset> rasterDatasets)
        {
            if (rasterDatasets.Count == 0)
            {
                return null;
            }
            // 获取第一个栅格数据集作为基础进行相加
            IRasterDataset baseDataset = rasterDatasets[0];
            IMapAlgebraOp pMapAlgebraOp = new RasterMapAlgebraOpClass();
            IRasterAnalysisEnvironment pEnv = (IRasterAnalysisEnvironment)pMapAlgebraOp;
            pEnv.OutWorkspace = new RasterWorkspaceFactory().OpenFromFile(System.IO.Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)), 0);
            IGeoDataset baseDataset1 = baseDataset as IGeoDataset;
            // 绑定栅格数据
            pMapAlgebraOp.BindRaster(baseDataset1, "Ras01");
           
            // 从第二个栅格数据集开始进行相加
            for (int i = 1; i < rasterDatasets.Count; i++)
            {
                IRasterDataset currentDataset = rasterDatasets[i];
                pMapAlgebraOp.BindRaster((IGeoDataset)currentDataset, "Ras02");
                // 设置地图代数表达式
                string sOut = "[Ras01] " + "+ " + "[Ras02] ";
                // 创建栅格运算对象
                result = pMapAlgebraOp.Execute(sOut);

                // 如果栅格相加操作失败,则返回null
                if (result == null)
                {
                    return null;
                }

                // 将结果更新为新的基础栅格数据集,以便进行下一轮相加
                baseDataset1 = result;
            }

            return (IRaster)baseDataset1; // 返回相加后的栅格数据集
        }
        private void 多栅格累加ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // 用户选择的多个TIFF文件
            List<IRasterDataset> rasterDatasets = OpenTiffFiles();
            if (rasterDatasets == null)
            {
                MessageBox.Show("未选择任何TIFF文件或者打开文件失败。");
                return;
            }
            IRaster resultDataset1 = null;
 
            if (rasterDatasets.Count > 0)
            {
                // 执行栅格相加操作
                resultDataset1 = SumRasterDatasets(rasterDatasets);

                // 这里可以处理resultDataset,例如显示或保存
                MessageBox.Show("TIFF 文件相加完成。");
            }
            else
            {
                MessageBox.Show("未选择任何TIFF文件。");
            }
            IRasterLayer rasterLayer = new RasterLayerClass();
            rasterLayer.CreateFromRaster(resultDataset1);
            rasterLayer.Name = "累加";

            axMapControl2.AddLayer((ILayer)rasterLayer, 0);
            axMapControl2.ActiveView.Refresh();
            if (resultDataset1 != null)
            {
                SaveRasterToFile(resultDataset1);
            }
        }

2 栅格累乘操作

private IRaster MultiplyRasterDatasets(List<IRasterDataset> rasterDatasets)
        {
            if (rasterDatasets.Count == 0)
            {
                return null;
            }
            // 获取第一个栅格数据集作为基础进行相加
            IRasterDataset baseDataset = rasterDatasets[0];
            IMapAlgebraOp pMapAlgebraOp = new RasterMapAlgebraOpClass();
            IRasterAnalysisEnvironment pEnv = (IRasterAnalysisEnvironment)pMapAlgebraOp;
            pEnv.OutWorkspace = new RasterWorkspaceFactory().OpenFromFile(System.IO.Path.GetDirectoryName(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures)), 0);
            IGeoDataset baseDataset1 = baseDataset as IGeoDataset;
            // 绑定栅格数据
            pMapAlgebraOp.BindRaster(baseDataset1, "Ras01");

            // 从第二个栅格数据集开始进行相加
            for (int i = 1; i < rasterDatasets.Count; i++)
            {
                IRasterDataset currentDataset = rasterDatasets[i];
                pMapAlgebraOp.BindRaster((IGeoDataset)currentDataset, "Ras02");
                // 设置地图代数表达式
                string sOut = "[Ras01] " + "* " + "[Ras02] ";
                // 创建栅格运算对象
                result = pMapAlgebraOp.Execute(sOut);

                // 如果栅格相加操作失败,则返回null
                if (result == null)
                {
                    return null;
                }

                // 将结果更新为新的基础栅格数据集,以便进行下一轮相加
                baseDataset1 = result;
            }
            return (IRaster)baseDataset1; // 返回相加后的栅格数据集
        }
        private void 多栅格累乘ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // 用户选择的多个TIFF文件
            List<IRasterDataset> rasterDatasets = OpenTiffFiles();
            if (rasterDatasets == null)
            {
                MessageBox.Show("未选择任何TIFF文件或者打开文件失败。");
                return;
            }
            IRaster resultDataset1 = null;

            if (rasterDatasets.Count > 0)
            {
                // 执行栅格相加操作
                resultDataset1 = MultiplyRasterDatasets(rasterDatasets);

                // 这里可以处理resultDataset,例如显示或保存
                MessageBox.Show("TIFF 文件相乘完成。");
            }
            else
            {
                MessageBox.Show("未选择任何TIFF文件。");
            }
            IRasterLayer rasterLayer = new RasterLayerClass();
            rasterLayer.CreateFromRaster(resultDataset1);
            rasterLayer.Name = "累乘";

            axMapControl2.AddLayer((ILayer)rasterLayer, 0);
            axMapControl2.ActiveView.Refresh();
            if (resultDataset1 != null)
            {
                SaveRasterToFile(resultDataset1);
            }
        }

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值