Polygon creation tool

11-11-2021 10:37 PM
Occasional Contributor II


I would like to create a tool that finds a hole in a polygon and then loads it into a new layer as a new polygon. Has anyone had a similar project? Somehow I don't know how to start.

With the code written below, I can create a polygon in which the holes are located, but I don't know how to write them to create those holes.

I will be happy for any advice, idea or solution.


 protected override async void OnClick()
            var polylineFeatureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(lyr => lyr.ShapeType == esriGeometryType.esriGeometryPolyline);

            if (polylineFeatureLayer == null)
            await CreateFcWithAttributesAsync("Polygon", EnumFeatureClassType.POLYGON);

            var polygonFeatureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(lyr => lyr.ShapeType == esriGeometryType.esriGeometryPolygon);

            if (polygonFeatureLayer == null)

            await ConstructSamplePolygon(polygonFeatureLayer, polylineFeatureLayer);
        private Task<bool> ConstructSamplePolygon(FeatureLayer polygonLayer, FeatureLayer lineLayer)

            return QueuedTask.Run(() =>
                var polygonFeatureClass = polygonLayer.GetTable() as FeatureClass;
                var polygonDefinition = polygonFeatureClass.GetDefinition();
                var lineFeatureClass = lineLayer.GetTable() as FeatureClass;

                var lineCursor = lineFeatureClass.Search(null, false);

                var createOperation = new EditOperation()
                    Name = "Vytvořit polygon",
                    SelectNewFeatures = false

                while (lineCursor.MoveNext())
                    using (var lineFeature = lineCursor.Current as Feature)
                        var polylineGeometry = lineFeature.GetShape() as Polyline;
                        ReadOnlyPointCollection pts = polylineGeometry.Points;
                        // var polygonBuilder = PolygonBuilder.CreatePolygon(pts, polygonDefinition.GetSpatialReference());
                        List<MapPoint> lineMapPoints = new List<MapPoint>();
                        var newPolygon =
                            PolygonBuilder.CreatePolygon(lineMapPoints, polygonDefinition.GetSpatialReference());
                        createOperation.Create(polygonLayer, newPolygon);

                return createOperation.ExecuteAsync();


thank you

0 Kudos
2 Replies
MVP Esteemed Contributor

A quick tour of creating tools with Python—ArcGIS Pro | Documentation

holes will make the shape multipart

Polygon—ArcGIS Pro | Documentation

Read geometries—ArcGIS Pro | Documentation

if you find holes, then the order of the points needs to be reversed

... sort of retired...
0 Kudos
Occasional Contributor II

Thank you. Creating a polygon is no problem.

0 Kudos