C# 栅格计算:使用 IMapAlgebraOp 接口和 RasterMapAlgebraOp 类
在 C# 中进行多个栅格数据的栅格计算,需要使用 ArcObjects 中的 IMapAlgebraOp 接口和 RasterMapAlgebraOp 类。这些接口和类都位于 ESRI.ArcGIS.SpatialAnalyst 命名空间中。
首先需要创建一个 RasterMapAlgebraOp 对象,并通过其属性设置输入栅格数据和栅格计算表达式。栅格计算表达式可以使用 C# 中的算术运算符和函数,例如加法、减法、乘法、除法、求平均值等等。
接着使用 IMapAlgebraOp 接口中的 Execute 方法,执行栅格计算并生成结果栅格数据。生成的结果栅格数据可以将其添加到地图控件(MapControl)中,并设置其显示样式,例如颜色、透明度等等。
以下是一个示例代码,演示了如何使用 IMapAlgebraOp 接口和 RasterMapAlgebraOp 类进行多个栅格数据的栅格计算,并将结果显示在 MapControl 中:
using ESRI.ArcGIS.SpatialAnalyst;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.DataSourcesRaster;
// 创建 RasterMapAlgebraOp 对象
RasterMapAlgebraOp rasterMapAlgebraOp = new RasterMapAlgebraOp();
// 设置输入栅格数据
IRasterDataset rasterDataset1 = OpenRasterDataset('path/to/raster1');
IRasterDataset rasterDataset2 = OpenRasterDataset('path/to/raster2');
IRasterDataset rasterDataset3 = OpenRasterDataset('path/to/raster3');
rasterMapAlgebraOp.BindRaster(rasterDataset1, 'raster1');
rasterMapAlgebraOp.BindRaster(rasterDataset2, 'raster2');
rasterMapAlgebraOp.BindRaster(rasterDataset3, 'raster3');
// 设置栅格计算表达式
string expression = '((raster1 + raster2) * raster3) / 3.0';
rasterMapAlgebraOp.Expression = expression;
// 执行栅格计算
IRasterDataset resultRasterDataset = (IRasterDataset)rasterMapAlgebraOp.Execute();
// 将结果栅格数据添加到地图控件中
IMap map = axMapControl1.Map;
IRasterLayer rasterLayer = new RasterLayer();
rasterLayer.CreateFromDataset(resultRasterDataset);
rasterLayer.Name = 'Result Raster';
ISimpleRenderer renderer = new SimpleRenderer();
IRgbColor color = new RgbColor();
color.Red = 255;
renderer.Symbol = new SimpleFillSymbolClass() { Color = color };
rasterLayer.Renderer = renderer as IRasterRenderer;
map.AddLayer(rasterLayer as ILayer);
// 刷新地图控件
axMapControl1.ActiveView.Refresh();
在这个示例代码中,使用了 ESRI.ArcGIS.DataSourcesRaster 命名空间中的 OpenRasterDataset 方法打开了三个栅格数据集,将它们绑定到 RasterMapAlgebraOp 对象中。然后使用算术运算符和函数构建了一个栅格计算表达式,并将其赋值给 RasterMapAlgebraOp 对象的 Expression 属性。最后通过 Execute 方法执行栅格计算,并将结果栅格数据添加到地图控件中,并设置了其显示样式。
原文地址: https://www.cveoy.top/t/topic/nN7W 著作权归作者所有。请勿转载和采集!