首页 > 编程知识 正文

ArcGIS Engine基础8之栅格计算器,arcgis计算栅格面积

时间:2023-05-03 22:56:55 阅读:195757 作者:628

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<IRasterLayer,string> 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<IRasterLayer, string> 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<IRasterLayer, string> item in rasterLayerSymbolDic) { IRasterLayer rasterLayer = item.Key; string rasterSymbol = item.Value; pMapAlgebraOp.UnbindRaster(rasterSymbol); } }

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。