在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;