ArcGIS Engine基础(8)之栅格计算器 您所在的位置:网站首页 栅格计算器如何输入幂函数的值 ArcGIS Engine基础(8)之栅格计算器

ArcGIS Engine基础(8)之栅格计算器

2024-07-11 22:49| 来源: 网络整理| 查看: 265

1、实现类似arctoolbox中的 空间分析工具-》地图代数-》栅格计算器功能,对于需要使用表达式进行栅格计算时非常有效果。

如:实现两个栅格相加,并且将NODATA值设置为0,这样NODATA也可以参与计算。

 string expression = string.Format("Con(IsNull([{0}]),0,[{0}])+ Con(IsNull([{1}]),0,[{1}])", rasterSymbol1, rasterSymbol2);

2、要保证输出范围与最大栅格范围一致时,需预先设置栅格分析环境

 //设置所有图层中的最大范围作为栅格计算器的处理范围。  pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvMaxOf);

3、在进行栅格计算保存到地理数据库时,如果工作空间saveWorkspace内容发生变化,注意工作空间一定要获取最新的,否则会保存失败。

public static void UsingRasterMapAlgebra(IRasterLayer rasterLayer,string rasterSymbol, string expression, string saveFileName, IWorkspace saveWorkspace,string format="FGDBR") { IRasterDataset pRasterDataset =RasterLayerWrapper.GetRasterDataset(rasterLayer); IMapAlgebraOp pMapAlgebraOp; pMapAlgebraOp = new RasterMapAlgebraOpClass(); IRasterAnalysisEnvironment pEnv = default(IRasterAnalysisEnvironment); pEnv = (IRasterAnalysisEnvironment)pMapAlgebraOp; //设置所有图层中的最大范围作为栅格计算器的处理范围。 pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvMaxOf); pMapAlgebraOp.BindRaster((IGeoDataset)pRasterDataset, rasterSymbol); string sOut = expression; IGeoDataset rasOut = (IGeoDataset)pMapAlgebraOp.Execute(sOut); ISaveAs2 pSaveAs = (ISaveAs2)rasOut; //默认保存到文件地理库中,如果工作空间saveWorkspace内容发生变化,注意工作空间一定要获取最新的。 pSaveAs.SaveAs(saveFileName, saveWorkspace, format); // 释放IDataset对象 Marshal.ReleaseComObject(rasOut); pMapAlgebraOp.UnbindRaster(rasterSymbol); } public static void UsingRasterMapAlgebraWithMoreLayers(Dictionary rasterLayerSymbolDic, string expression,string saveFileName, IWorkspace saveWorkspace, string format = "FGDBR") { IMapAlgebraOp pMapAlgebraOp; pMapAlgebraOp = new RasterMapAlgebraOpClass(); IRasterAnalysisEnvironment pEnv = default(IRasterAnalysisEnvironment); pEnv = (IRasterAnalysisEnvironment)pMapAlgebraOp; //设置所有图层中的最大范围作为栅格计算器的处理范围。 pEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvMaxOf); //绑定栅格符号 foreach (KeyValuePair item in rasterLayerSymbolDic) { IRasterLayer rasterLayer = item.Key; string rasterSymbol = item.Value; IRasterDataset pRasterDataset = RasterLayerWrapper.GetRasterDataset(rasterLayer); pMapAlgebraOp.BindRaster((IGeoDataset)pRasterDataset, rasterSymbol); } //执行栅格计算 string sOut = expression; IGeoDataset rasOut = (IGeoDataset)pMapAlgebraOp.Execute(sOut); ISaveAs2 pSaveAs = (ISaveAs2)rasOut; //默认保存到文件地理库中,如果工作空间saveWorkspace内容发生变化,注意工作空间一定要获取最新的。 pSaveAs.SaveAs(saveFileName, saveWorkspace, format); //解绑栅格符号 foreach (KeyValuePair item in rasterLayerSymbolDic) { IRasterLayer rasterLayer = item.Key; string rasterSymbol = item.Value; pMapAlgebraOp.UnbindRaster(rasterSymbol); } }

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有