利用ArcGIS Engine求算成本距离

class RasterCostDistance
{
    private IRasterLayer costRasterlayer;

    public RasterCostDistance(IRasterLayer costRasterlayer)
    {
        this.costRasterlayer = costRasterlayer;
    }
    public IRasterLayer CalCostDistance(IRasterLayer sourceRasterlayer, string outputFileName)
    {
        if (System.IO.File.Exists(outputFileName))
        {
            System.IO.File.Delete(outputFileName);
        }

        IGeoDataset sourceRaster = sourceRasterlayer.Raster as IGeoDataset;

        IGeoDataset costRaster = costRasterlayer.Raster as IGeoDataset;

        IDistanceOp2 distanceOp = new RasterDistanceOpClass();
        IRasterAnalysisEnvironment rasAnaEnv = distanceOp as IRasterAnalysisEnvironment;

        //设置生成图层的工作空间
        IWorkspaceFactory wsf = new RasterWorkspaceFactoryClass();
        string outputPath = System.IO.Path.GetDirectoryName(outputFileName);
        string fileName = System.IO.Path.GetFileName(outputFileName);
        IWorkspace ws = wsf.OpenFromFile(outputPath, 0);
        rasAnaEnv.OutWorkspace = ws;

        //设置生成图层的范围
        object extent = (object)costRaster.Extent;
        object missing = System.Reflection.Missing.Value;
        rasAnaEnv.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, ref extent, ref missing);

        //设置生成图层的栅格大小
        rasAnaEnv.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvMinOf, ref cellsize);
        //进行成本距离的计算 
        object maxDistance = System.Reflection.Missing.Value;
        object valueRaster = System.Reflection.Missing.Value;
        IGeoDataset outputDataset = distanceOp.CostDistance(sourceRaster, costRaster, ref maxDistance, ref valueRaster);
        //生成的IRaster是保存在内存中的数据,要保存在硬盘文件中还应使用ISaveas
        ISaveAs pSaveAs = outputDataset as ISaveAs;
        pSaveAs.SaveAs(fileName, ws, "IMAGINE Image");
        IRasterLayer pCreatRalyr = new RasterLayerClass();
        pCreatRalyr.CreateFromFilePath(outputFileName);

        return pCreatRalyr;
    }
}

转载于:https://www.cnblogs.com/enjoylives/archive/2010/01/13/1646668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值