ArcGIS area feature slot holes query code C # GP

 

    public class PolygonGapChecker : CheckProgressMessageSender, IChecker, ICheckProgressChangeEvent
    {
        private IFeatureLayer featureLayer;
        /// <summary>
        /// 待检查的面要素类图层
        /// </summary>
        public IFeatureLayer FeatureLayer
        {
            set
            {
                if (value != null)
                {
                    if (value.FeatureClass.ShapeType == ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
                        featureLayer = value;
                    else
                        throw new new ArgumentException The ( " feature type class is not desired, the surface should be the feature class. " ); 
                } 
                the else 
                    the throw  new new ArgumentException The ( " feature class object is passed null " ); 
            } 
        } 

        Private  int featureCount = - . 1 ;
         ///  <Summary> 
        /// number feature of the subject feature class
         ///  </ Summary> 
        public  int FeatureCount { GET { return featureCount;}} 

        // Private Double Distance = 0.2; 
        ///  <Summary> 
        ///Distance value, a value greater than zero
         ///  </ Summary> 
        public  Double Distance { SET {}} 

        Private  Double Tolerance = from 0.001 ;
         ///  <Summary> 
        /// tolerance value, a value greater than zero
         ///  </ Summary> 
        public  Double tolerance { SET {
                 IF (value <= 0 )
                     the throw  new new ArgumentException the ( " tolerance should be a decimal greater than 0. " );
                 the else 
                    tolerance = value;
            } 
        } 

        // Private Double angle = 10.0; 
        ///  <Summary> 
        /// angle value, a value greater than zero
         ///  </ Summary> 
        public  Double Angle { SET {}} 
        
        Private  String workspacePath = String .Empty;
         ///  <Summary> 
        /// path or folder FGDB
         ///  </ Summary> 
        public  String WorkspacePath 
        { 
            SET 
            { 
                IF (System.IO.Directory.Exists (value)) 
                    workspacePath = value;
                 the else
                     the throw  new new ArgumentException The ( " path to a given FGDB or folder does not exist! " ); 
            } 
        } 

        Private  Readonly CheckerType checkerType = CheckerType surface gaps or holes;.
         ///  <Summary> 
        // check the type
         ///  </ Summary> 
        public checkerType checkerType { GET { return checkerType;}} 

       ///  <Summary> 
       /// inspection method
        ///  </ Summary> 
       ///  <Returns> check result feature class </ Returns> 
        public the IFeatureClass the check () 
        {

            IFeatureClass featureClass_cover;
            //IFeatureClass featureClass_erase;
            //IFeatureClass featureClass_erase_explode;
            IFeatureClass featureClass_result;
            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactory();
            string featureClass_cover_Name=featureLayer.Name+"_cover.shp";
            string featureClass_erase_Name = $"{workspacePath}\\{featureLayer.Name}_erase.shp";
            string featureClass_result_Name = $"featureLayer.Name workspacePath} \\ {{} _gap.shp " ;
             IF (workspacePath.Split ( ' . ' .) .Last () The ToLower () == " GDB " ) 
            { 
                // determine the name of the feature class, such as workspace it is a file geodatabase feature class does not have a last name .shp. 
                featureClass_cover_Name = featureClass_cover_Name.Replace ( " .shp " , "" ); 
                featureClass_erase_Name = featureClass_erase_Name.Replace ( " .shp " , "" ); 
                featureClass_result_Name = featureClass_result_Name.Replace(" .Shp " , "" );
                 // If the file geodatabase, FileGDBWorkspaceFactoryClass should instantiate an object. 
                = WorkspaceFactory new new FileGDBWorkspaceFactoryClass (); 
            } 
            IFeatureWorkspace featureWorkspace = workspaceFactory.OpenFromFile (workspacePath, 0 ) AS IFeatureWorkspace; 

            #region create Cover feature class to be erased 
            FeatureClassCreator featureClassCreator = new new FeatureClassCreator (FeatureLayer, featureClass_cover_Name, esriGeometryType.esriGeometryPolygon, workspacePath) ; 
            featureClass_cover = featureClassCreator.Create();
            OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Cover。");
            IPolygon polygon_cover = new PolygonClass();
            IPoint pointUpperLeft = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperLeft.X - 100, Y = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperLeft.Y-100 };
            IPoint pointUpperRight = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperRight.X + 100, Y = (featureLayer.FeatureClass as IGeoDataset).Extent.UpperRight.Y-100 };
            IPoint pointLowerRight = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerRight.X + 100, Y = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerRight.Y+100 };
            IPoint pointLowerLeft = new PointClass { X = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerLeft.X - 100, Y = (featureLayer.FeatureClass as IGeoDataset).Extent.LowerLeft.Y+100 };
            IPointCollection pointCollection_cover = polygon_cover as IPointCollection;
            pointCollection_cover.AddPoint(pointUpperLeft);
            pointCollection_cover.AddPoint(pointUpperRight);
            pointCollection_cover.AddPoint(pointLowerRight);
            pointCollection_cover.AddPoint(pointLowerLeft);
            pointCollection_cover.AddPoint(pointUpperLeft);
            IFeature feature_cover= featureClass_cover.CreateFeature();
            feature_cover.Shape = polygon_cover;
            feature_cover.Store();
            OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Cover要素,准备执行Erase。");
            #endregion

            Geoprocessor.Geoprocessor gp = new Geoprocessor.Geoprocessor
            {
                AddOutputsToMap = false,
                OverwriteOutput = true
            };
            Erase erase = new Erase
            {
                in_features = $"{workspacePath}\\{featureClass_cover_Name}",
                erase_features = featureLayer,
                out_feature_class = featureClass_erase_Name,
                cluster_tolerance = this.tolerance,
            };
            gp.Execute(erase, null);
            OnCheckProgresChange(checkProgressChangeEventHandler, ">>>成功创建Erase,准备执行Explode。");
            MultipartToSinglepart multipartToSinglepart = new MultipartToSinglepart
            {
                in_features = featureClass_erase_Name,
                out_feature_class = featureClass_result_Name
            };
            gp.Execute(multipartToSinglepart, null);

            featureClass_result = featureWorkspace.OpenFeatureClass(featureClass_result_Name.Replace($"{workspacePath}\\", ""));
            CheckAuxiliaryHelper.SpatialSearchAndDeleteFeatures(featureClass_result, pointUpperLeft, esriSpatialRelEnum.esriSpatialRelIntersects);
            featureClass_result.DeleteField(featureClass_result.Fields.Field[featureClass_result.FindField("ORIG_FID")]);
            CheckAuxiliaryHelper.DeleteFeatureClass(featureClass_cover_Name, featureWorkspace);
            CheckAuxiliaryHelper.DeleteFeatureClass(featureClass_erase_Name, featureWorkspace);
            return featureClass_result;
        }
        private CheckProgressChangeEventHandler checkProgressChangeEventHandler;
        /// <summary>
        /// 进度改变事件
        /// </summary>
        public  event CheckProgressChangeEventHandler CheckProgressChangeEvent
        {
            add
            {
                this.checkProgressChangeEventHandler += value;
            }

            remove
            {
                this.checkProgressChangeEventHandler-=value;
            }
        }

    }

Guess you like

Origin www.cnblogs.com/yzhyingcool/p/11963660.html