C#+Arcengine实现GP工具中Data Management Tool》raster》raster processing中的clip功能(矢量数据对栅格数据的裁剪)

Arcgisdesktop中Data Management Tool中有一个clip的功能,即可以实现根据矢量数据的范围对栅格数据的裁剪的功能,在这里它有一个可选项use input features for Clipping Geometry,即是否按照所输入shp数据的图形范围对栅格数据进行裁剪,根据其是否勾选,clip有两种实现方法,具体如下:

1,、勾选,即按照矢量数据的范围对栅格数据进行裁剪(裁剪后输出范围和输入的shp相同):

 /// <summary>

        /// 按shp范围裁剪Raster数据
        /// </summary>
        /// <param name="inShp">输入shp数据</param>
        /// <param name="inRaster">输入Raster数据</param>
        private string ClipDem(string inShp, string inRaster)
        {
            try
            {
                //调用GP工具

                Geoprocessor clipGeoprocessor = new Geoprocessor();

                 //这个工作空间大家电脑上都有,可以都写这个,不必更换路径(只要你装了arcgis)

                clipGeoprocessor.SetEnvironmentValue("workspace", @"C:\Users\TOMATO\Documents\ArcGIS\Default.gdb");

                clipGeoprocessor.OverwriteOutput = true;


               //要保存的裁剪raster名称

                string clipRasterName = "clipRaster.tif";

               //路径+raster名称(newFolder是你想保存裁剪影像的路径)

                string clipRaster = newFolder + "\\" + clipRasterName;


  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
通过以下代码可以实现基于ArcEngine栅格数据转换成栅格数据集: ``` // 获取栅格工作空间对象 IRasterWorkspace rasterWorkspace = engineWorkspace.OpenRasterWorkspace(rasterWorkspacePath); // 获取待转换的栅格数据对象 IRaster raster = new RasterClass(); raster.CreateFromFile(inputFilePath); // 构造栅格数据集参数对象 IRasterDatasetEdit2 rasterDataset = rasterWorkspace.CreateRasterDataset(rasterDatasetName, "GRID", extent, cellSize, bandCount, pixelType, null); rasterDataset.SetNoDataValue(0, noDataValue); // 设置无效像元值 // 获取栅格数据集编辑对象 IRasterEdit rasterEdit = (IRasterEdit)rasterDataset.Create(); // 将栅格数据写入到栅格数据 IPixelBlock pixelBlock = rasterEdit.CreatePixelBlock(new Envelope() { XMin = 0, YMin = 0, XMax = width, YMax = height }); IRasterProps rasterProps = (IRasterProps)raster; IRasterBandCollection rasterBands = (IRasterBandCollection)raster; for (int i = 0; i < bandCount; i++) { // 获取栅格数据的像元值,并设置到栅格数据集的像元块 IPnt blockSize = new PntClass() { X = width, Y = height }; rasterBands.Item(i).Read(pixelBlock, null, null); rasterEdit.Write(0, 0, blockSize.X, blockSize.Y, pixelBlock.get_SafeArray(0) as System.Array, null); // 设置栅格数据集的像元块属性 IPixelBlock3 pixelBlock3 = (IPixelBlock3)pixelBlock; rasterEdit.WriteBlock(i, 0, 0, width, height, pixelBlock3.get_PixelDataByRef(0)); rasterEdit.Flush(); } // 完成栅格数据集编辑操作 rasterEdit.Refresh(); rasterEdit.CalculateStatistics(); // 释放资源 System.Runtime.InteropServices.Marshal.ReleaseComObject(pixelBlock); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterEdit); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterBands); System.Runtime.InteropServices.Marshal.ReleaseComObject(rasterProps); System.Runtime.InteropServices.Marshal.ReleaseComObject(raster); ``` 以上代码,需要定义的变量有:`rasterWorkspacePath`(栅格工作空间路径)、`inputFilePath`(待转换的栅格数据路径)、`rasterDatasetName`(栅格数据集名称)、`extent`(栅格数据集范围)、`cellSize`(栅格数据集像元大小)、`bandCount`(栅格数据集波段数)、`pixelType`(栅格数据集像元类型)、`noDataValue`(栅格数据集无效像元值)、`width`(栅格数据集宽度)和`height`(栅格数据集高度)。 根据实际需求进行相应的参数设定即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值