通常,我们使用GeoProcessorResultClass创建对象来获取GP工具的执行结果,如下所示:
IGeoProcessorResult result = new GeoProcessorResultClass(); //执行结果
ESRI.ArcGIS.SpatialAnalystTools.Reclassify reclassify = new ESRI.ArcGIS.SpatialAnalystTools.Reclassify();
reclassify.in_raster = inRaster;
reclassify.reclass_field = field;
reclassify.remap = remap;
reclassify.out_raster = outpath;
object sev = null;
try
{
result = (IGeoProcessorResult)GP.Execute(reclassify, null);
MessageBox.Show(GP.GetMessages(ref sev));
//将结果加载到显示
IRasterDataset pRasterDataset = GP.Open(result.ReturnValue) as IRasterDataset;
IRasterLayer resRasterLyr = new RasterLayerClass();
resRasterLyr.CreateFromDataset(pRasterDataset);
axMapControl1.AddLayer(resRasterLyr);
axMapControl1.ActiveView.Refresh();
}
catch
{
MessageBox.Show(GP.GetMessages(ref sev));
}
通过 result = (IGeoProcessorResult)GP.Execute(reclassify, null);将result赋值,result即为栅格数据的执行结果,而当数据位栅格数据时,result.ReturnValue即为栅格数据的保存路径,而通过GP.Open(result.ReturnValue) as IRasterDataset;可以打开栅格数据集。或者也可以直接从栅格数据路径创建图层。
出错位置
但是,当调用欧式距离工具时,以上GP.Open(result.ReturnValue) as IRasterDataset;一句报错,改为 resRasterLyr.CreateFromFilePath(path);也不对。经过调试发现,欧氏距离返回的(result.ReturnValue)路径最后多了一个分号。
解决方法
通过
path = path.Split(';')[0];
即可去除以上错误。
为防止以上Bug再出现,可以在每次执行完GP工具都加上这句。对于有Bug的工具,这句代码可以去除,若没有Bug,则没有影响。
出现原因
ArcToolBox中许多工具是有多个输出文件的,如欧式距离可输出欧式距离栅格和方向栅格。在输出多个文件时,result.ReturnValue返回的值为多个路径中间用 ; 分割。
在欧式距离中,由于是多输出,即使只有一个文件输出,后面也多了一个分号。