Example #1
0
        /// <summary>
        /// Identifies each exterior ring as separate part, containing all its interior rings
        /// </summary>
        /// <param name="polygon"></param>
        /// <returns></returns>
        private static IEnumerable <GeometryPart> GetPolygonExteriorRingParts(
            [NotNull] IPolygon4 polygon)
        {
            // for all interior rings, assign to exterior ring's part
            // all exterior rings, add them to result if not yet added
            var partsByExteriorRing = new Dictionary <IRing, GeometryPart>();

            var geometryCollection = (IGeometryCollection)polygon;

            for (var i = 0; i < geometryCollection.GeometryCount; i++)
            {
                var ring = (IRing)geometryCollection.Geometry[i];

                if (ring.IsExterior)
                {
                    partsByExteriorRing.Add(ring, new GeometryPart(ring));
                }
                else
                {
                    IRing exteriorRing = polygon.FindExteriorRing(ring);

                    Assert.NotNull("No exterior ring found for inner ring");

                    GeometryPart part;
                    if (!partsByExteriorRing.TryGetValue(exteriorRing, out part))
                    {
                        part = new GeometryPart(exteriorRing);
                        partsByExteriorRing.Add(exteriorRing, part);
                    }

                    part.AddInnerRingGeometry(ring);
                }
            }

            return(partsByExteriorRing.Values);
        }