调用gp工具_要素转线、计算面积

问题描述:如题

 

 

(1)要素转线(gp工具)

        private bool FeatureToPolyline(string inputFile,string outputFile)
        {
            bool result = true;
            ESRI.ArcGIS.DataManagementTools.FeatureToLine featureToLine = new ESRI.ArcGIS.DataManagementTools.FeatureToLine();
            featureToLine.in_features = inputFile;
            featureToLine.out_feature_class = outputFile;
            Geoprocessor geoProcessor = new Geoprocessor();
            try
            {
                geoProcessor.Execute(featureToLine, null);
            }
            catch (Exception ex)
            {
                result = false;
            }
            return result;            
        }

(1.1)面转线,非GP工具 (获取面边界,转线)

       /// <summary>
        ///     面转线 非GP
        /// </summary>
        /// <param name="in_features"></param>
        /// <param name="update_features"></param>
        /// <param name="out_feature_class"></param>
        /// <returns></returns>
        private IFeatureClass FeatureToPolygon(IFeatureClass in_features)
        {
            var fc = in_features;
            var geoDataset = fc as IGeoDataset;
            var featureClass = CreateTempFeatureClass(geoDataset.SpatialReference);//生成临时featureClass
            var featureCursor = fc.Search(null, false);
            var feature = featureCursor.NextFeature();
            while (feature != null)
            {
                var newfeature = featureClass.CreateFeature();

                var geometry = feature.Shape;
                var pTopologBoundary = geometry as ITopologicalOperator;
                var pGeometry = pTopologBoundary.Boundary;
                newfeature.Shape = pGeometry;
                newfeature.Store();
                feature = featureCursor.NextFeature();
            }

            var aaa = featureClass.FeatureCount(null);
            return featureClass;
        }



//生成临时featureClass
        public IFeatureClass CreateTempFeatureClass(ISpatialReference pSpatialReference)
        {
            //在内存中创建工作空间
            const string strShapeFieldName = "shape";
            InMemoryWorkspaceFactory pMWF = new InMemoryWorkspaceFactoryClass();
            var pWName = pMWF.Create("", "MyWorkspace", null, 0);
            var pWorkSpace = (IWorkspace) ((IName) pWName).Open();
            var pFW = (IFeatureWorkspace) pWorkSpace;
            //设置字段集
            IFields pFields = new FieldsClass();
            var pFieldsEdit = (IFieldsEdit) pFields;
            //设置字段
            IField pField = new FieldClass();
            var pFieldEdit = (IFieldEdit) pField;
            //创建类型为几何类型的shape字段(必须)
            pFieldEdit.Name_2 = strShapeFieldName;
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeGeometry;
            //为esriFieldTypeGeometry类型的字段创建几何定义,包括类型和空间参照 
            IGeometryDef pGeoDef = new GeometryDefClass();
            var pGeoDefEdit = (IGeometryDefEdit) pGeoDef;
            pGeoDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline;
            pGeoDefEdit.SpatialReference_2 = pSpatialReference;
            pFieldEdit.GeometryDef_2 = pGeoDef;
            pFieldsEdit.AddField(pField);
            //添加ID字段
            pField = new FieldClass();
            pFieldEdit = (IFieldEdit) pField;
            pFieldEdit.Name_2 = "OBJECTID";
            pFieldEdit.Type_2 = esriFieldType.esriFieldTypeOID;
            pFieldsEdit.AddField(pField);
            添加StationName字段
            //pField = new FieldClass();
            //pFieldEdit = (IFieldEdit)pField;
            //pFieldEdit.Name_2 = "StationNM";
            //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            //pFieldsEdit.AddField(pField);
            //pField = new FieldClass();
            //pFieldEdit = (IFieldEdit)pField;
            //pFieldEdit.Name_2 = "STCD";
            //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
            //pFieldsEdit.AddField(pField);
            //pField = new FieldClass();
            //pFieldEdit = (IFieldEdit)pField;
            //pFieldEdit.Name_2 = "DYP";
            //pFieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
            //pFieldsEdit.AddField(pField);
            //创建shapefile
            var pFC = pFW.CreateFeatureClass("Temp", pFields, null, null, esriFeatureType.esriFTSimple,
                strShapeFieldName, ""); //在内存中创建临时的shape文件
            return pFC;
        }

 

 

 

(2)计算多边形面积  (计算面积)

  /// <summary>
        /// 计算多边形面积
        /// </summary>
        /// <param name="inputPath"></param>
        /// <param name="outputPath"></param>
        public bool CalculateAreas(string inputPath,string outputFileName)
        {
            bool result = true;
            Geoprocessor GP = new Geoprocessor();
            CalculateAreas calculate =new CalculateAreas();
            calculate.Input_Feature_Class = _outfilepath;
            calculate.Output_Feature_Class = outputFileName;
            
            try
            {                
                GP.Execute(calculate, null);
            }
            catch (Exception ex)
            {
                writeLog("    gp工具执行错误:" + ex.Message);
                result = false;
            }
            return result;
           
        }

(3)交集取反,gp工具


        /// <summary>
        ///     交集取反
        /// </summary>
        /// <param name="in_features"></param>
        /// <param name="update_features"></param>
        /// <param name="out_feature_class"></param>
        /// <returns></returns>
        private bool SymDiff(IFeatureClass in_features, string update_features, string out_feature_class)
        {
            var result = true;
            var symDiff = new SymDiff();
            symDiff.in_features = in_features;
            symDiff.update_features = update_features;
            symDiff.out_feature_class = out_feature_class;
            var geoProcessor = new Geoprocessor();
            geoProcessor.OverwriteOutput = true;
            try
            {
                geoProcessor.Execute(symDiff, null);
            }
            catch (Exception ex)
            {
                result = false;
                writeLog("    交集取反gp工具执行错误:" + ex.Message);
            }

            return result;
        }

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值