Hello,
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)
return;
await CreateFcWithAttributesAsync("Polygon", EnumFeatureClassType.POLYGON);
var polygonFeatureLayer = MapView.Active.Map.GetLayersAsFlattenedList().OfType<FeatureLayer>().FirstOrDefault(lyr => lyr.ShapeType == esriGeometryType.esriGeometryPolygon);
if (polygonFeatureLayer == null)
return;
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>();
lineMapPoints.AddRange(pts);
var newPolygon =
PolygonBuilder.CreatePolygon(lineMapPoints, polygonDefinition.GetSpatialReference());
createOperation.Create(polygonLayer, newPolygon);
}
}
return createOperation.ExecuteAsync();
});
}
thank you
David
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
Thank you. Creating a polygon is no problem.