网站查询功能怎么做,2024年还有新冠吗,河南红旗渠建设集团网站,编程猫少儿编程网站ArcGIS Pro SDK #xff08;九#xff09;几何 13 多部件 文章目录 ArcGIS Pro SDK #xff08;九#xff09;几何 13 多部件1 获取多部分要素的各个部分2 获取多边形的最外层环 环境#xff1a;Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 获取多部分要素的各个部分…ArcGIS Pro SDK 九几何 13 多部件 文章目录 ArcGIS Pro SDK 九几何 13 多部件1 获取多部分要素的各个部分2 获取多边形的最外层环 环境Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 获取多部分要素的各个部分
public IEnumerableGeometry MultipartToSinglePart(Geometry inputGeometry)
{// 保存输入几何的部分的列表ListGeometry singleParts new ListGeometry();// 检查输入是否为空指针或几何是否为空if (inputGeometry null || inputGeometry.IsEmpty)return singleParts;// 根据几何类型将各个部分/点单独添加到列表中switch (inputGeometry.GeometryType){case GeometryType.Envelope:singleParts.Add(inputGeometry.Clone() as Envelope);break;case GeometryType.Multipatch:singleParts.Add(inputGeometry.Clone() as Multipatch);break;case GeometryType.Multipoint:var multiPoint inputGeometry as Multipoint;foreach (var point in multiPoint.Points){// 将集合中的每个点作为独立的点添加到列表中singleParts.Add(point);}break;case GeometryType.Point:singleParts.Add(inputGeometry.Clone() as MapPoint);break;case GeometryType.Polygon:var polygon inputGeometry as Polygon;foreach (var polygonPart in polygon.Parts){// 使用PolygonBuilderEx将线段转换为独立的多边形实例singleParts.Add(PolygonBuilderEx.CreatePolygon(polygonPart));}break;case GeometryType.Polyline:var polyline inputGeometry as Polyline;foreach (var polylinePart in polyline.Parts){// 使用PolylineBuilderEx将线段转换为独立的折线实例singleParts.Add(PolylineBuilderEx.CreatePolyline(polylinePart));}break;case GeometryType.Unknown:break;default:break;}return singleParts;
}2 获取多边形的最外层环
public Polygon GetOutermostRings(Polygon inputPolygon)
{if (inputPolygon null || inputPolygon.IsEmpty)return null;ListPolygon internalRings new ListPolygon();// 将多边形的各个部分分解成单独的几何列表// 请参阅 获取多部分要素的各个部分 代码段中的 MultipartToSinglePartvar parts MultipartToSinglePart(inputPolygon);// 获取按面积排序的顺时针几何面积 0的枚举var clockwiseParts parts.Where(geom ((Polygon)geom).Area 0).OrderByDescending(geom ((Polygon)geom).Area);// 对于每个外环foreach (var part in clockwiseParts){// 将第一个最大的环添加到内部集合中if (internalRings.Count 0)internalRings.Add(part as Polygon);// 使用标志指示当前部分是否在已经选择的多边形内bool isWithin false;foreach (var item in internalRings){if (GeometryEngine.Instance.Within(part, item))isWithin true;}// 如果当前多边形不在内部集合的任何多边形内// 则它是分离的需要被添加if (isWithin false)internalRings.Add(part as Polygon);}PolygonBuilderEx outerRings new PolygonBuilderEx();// 现在基于内部多边形集合组装一个新的多边形几何foreach (var ring in internalRings){outerRings.AddParts(ring.Parts);}// 返回最终的外环几何return outerRings.ToGeometry();
}