GPツールヨーロッパ式距離の小さなBug

1983 ワード

通常、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.ReturnValueはグリッドデータの保存経路であり、GP.Open(result.ReturnValue)as IrasterData setを通過する.グリッドデータセットを開くことができます.または、グリッドデータパスから直接レイヤーを作成することもできます.
エラー位置
ただし、上記GP.Open(result.ReturnValue)as IrasterDatasetは、ヨーロッパ式距離ツールを呼び出すと、一言がまちがっている                resRasterLyr.CreateFromFilePath(path);間違っています.デバッグにより、オーステナイト距離が返される(result.ReturnValue)パスに最後にセミコロンが追加されたことが分かった.
解決策
に合格
path = path.Split(';')[0];

以上のエラーを削除できます.
以上のバグが再発しないように,GPツールを実行するたびにこの文を加えることができる.Bugのあるツールでは、このコードは削除できますが、Bugがなければ影響はありません.
原因が現れる
ArcToolBoxの多くのツールには、ヨーロッパ距離出力可能なヨーロッパ距離グリッドや方向グリッドなど、複数の出力ファイルがあります.複数のファイルを出力する場合、result.ReturnValueが返す値は複数のパスの中間用です.分割.
ヨーロッパ式距離では、マルチ出力なので、ファイル出力が1つでも後ろにセミコロンが1つ増えます.