Arcgis GP工具(2)

矢量转栅格工具中,如果CellSize设置不对,会导致XX的失败,所以可以提前通过坐标系判断是经纬度的还是以米为单位的数据。

 /// <summary>
        /// 根据图层的信息判断要栅格的cellSize
        /// </summary>
        /// <param name="featureLayer"></param>
        /// <param name="cellSizeOfMeter"></param>
        /// <returns></returns>
        public double GetRasterfyCellSize(IFeatureLayer featureLayer, double cellSizeOfMeter = 30)
        {
            GeographicBoundingBox geoBox = CommonUtils.GetFeatureLayerBoundingBox(featureLayer);
            var m_isDegreeLayer = (geoBox.East - geoBox.West) < 10;
            if (m_isDegreeLayer)
            {
                return cellSizeOfMeter / MathAlgorithm.MeterPerDegree();
            }
            else
            {
                return cellSizeOfMeter;
            }
        }
        /// <summary>
        /// 使用原生接口进行栅格化
        /// -最好通过GetRasterfyCellSize来进行处理
        /// </summary>
        /// <param name="featureLayer">要素图层</param>
        /// <param name="valueField">栅格化字段名称</param>
        /// <param name="outputRasterFolderPath">输出tif文件全路径</param>
        /// <param name="cellSize">可选参数|与坐标系有关。像元分辨率,默认30</param>
        /// <returns></returns>
        public IRasterLayer Rasterify(IFeatureLayer featureLayer, string valueField, double cellSize = 30, string gdbStorePath = null)
        {
            IConversionOp conversionOp = new RasterConversionOpClass();
            IFeatureClassDescriptor descriptor = new FeatureClassDescriptorClass();
            descriptor.Create(featureLayer.FeatureClass, null, valueField);

            IGeoDataset geoDataset = descriptor as IGeoDataset;


            string outputRasterFolderPath = AG.COM.SDM.Utility.CommonConstString.STR_TempPath + "\\" + "Rasterify\\";
            if (Directory.Exists(outputRasterFolderPath) == false)
            {
                Directory.CreateDirectory(outputRasterFolderPath);
            }

            IRasterAnalysisEnvironment rasterAnalysisEnvironment = conversionOp as IRasterAnalysisEnvironment;
            rasterAnalysisEnvironment.SetCellSize(esriRasterEnvSettingEnum.esriRasterEnvValue, cellSize);
            rasterAnalysisEnvironment.SetExtent(esriRasterEnvSettingEnum.esriRasterEnvValue, geoDataset.Extent, null);

            string fileName = featureLayer.Name + "栅格";
           
            IWorkspace workspace = null;
            GDBHelper gdbHelper = null;
            if (string.IsNullOrEmpty(gdbStorePath))
            {
                IWorkspaceFactory factoryClass = new RasterWorkspaceFactoryClass();
                workspace = factoryClass.OpenFromFile(outputRasterFolderPath, 0);

                int index = 0;
                while (true)
                {
                    if (File.Exists(System.IO.Path.Combine(outputRasterFolderPath, fileName + ".tif")))
                    {
                        fileName = featureLayer.Name + "栅格" + (index++);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else
            {
                gdbHelper = CommonUtils.GetGDBHelper(gdbStorePath);
                gdbHelper.Open();
                gdbHelper.DeleteRasterLayer(fileName);
                workspace = gdbHelper.SourceWorkspace;
            }



            IRasterDataset resultDataset = conversionOp.ToRasterDataset(geoDataset, "TIFF", workspace, fileName);
            IRasterLayer resultLayer = new RasterLayerClass();
            resultLayer.CreateFromDataset(resultDataset);
            if (gdbHelper != null)
                gdbHelper.Close();

            return resultLayer;
        }

如果非GP工具调用直接死掉(不报异常,请删除C:\Users\PC25\AppData\Local\Temp)下面的所有文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值