关于ArcGIS开发中栅格代数计算的说明

在ArcGIS的二次开发中我们可以通过接口“IMapAlgebraOp”的实现类“RasterMapAlgebraOpClass”进行栅格数据之间的代数运算,即实现栅格计算器的功能。

// 定义要计算的栅格数据
IRaster raster1;
IRaster raster2;
// 定义结果栅格保存文件
string file = "C:/result.tif";
// 获取结果栅格文件所在文件夹
string folder = Path.GetDirectoryName(file);
// 获取结果栅格文件名
string fileName = Path.GetFileName(file);
// 定义结果工作空间
IWorkspaceFactory workspaceFactory = new RasterWorkspaceFactoryClass();
IWorkspace workspace = workspaceFactory.OpenFromFile(folder, 0);
// 定义地图代数运算操作类
IMapAlgebraOp mapAlgebraOp = new RasterMapAlgebraOpClass();
// 设置地图代数运算结果工作空间
IRasterAnalysisEnvironment rasterAnalysisEnvironment = mapAlgebraOp as IRasterAnalysisEnvironment;
rasterAnalysisEnvironment.OutWorkspace = workspace;
// 绑定栅格数据到地图代数运算操作类中
IGeoDataset geoDataset1 = raster1 as IGeoDataset;
IGeoDataset geoDataset2 = raster2 as IGeoDataset;
mapAlgebraOp.BindRaster(geoDataset1, "raster1");
mapAlgebraOp.BindRaster(geoDataset2, "raster2");
// 定义计算函数,栅格数据名称使用中括号包围
string calc = "[raster1] + [raster2]";
// 开始栅格计算获取计算结果栅格
IRaster raster = mapAlgebraOp.Execute(calc) as IRaster;
// 保存结果栅格为TIFF文件
ISaveAs2 saveAs2 = raster as ISaveAs2;
IDataset dataset = saveAs2.SaveAs(fileName, workspace, "TIFF");
// 释放保存结果数据,完成TIFF文件的写入
Marshal.ReleaseComObject(dataset);
return raster;

发表回复