private void Normalize(LinearRing ring, bool clockwise) { if (ring.IsEmpty) { return; } CoordinateCollection uniqueCoordinates = new CoordinateCollection(); for (int i = 0; i < ring.NumPoints - 1; i++) { uniqueCoordinates.Add(ring.GetCoordinate(i)); // copy all but last one into uniquecoordinates } Coordinate minCoordinate = CoordinateCollection.MinimumCoordinate(ring.Coordinates); uniqueCoordinates.Scroll(minCoordinate); ICoordinateList ringCoordinates = ring.Coordinates; ringCoordinates.Clear(); ringCoordinates.AddRange(uniqueCoordinates); ringCoordinates.Add(uniqueCoordinates[0].Clone()); // add back in the closing point. if (CGAlgorithms.IsCCW(ringCoordinates) == clockwise) { ringCoordinates.Reverse(); } }
/// <summary> /// Creates a <see cref="LineString"/> whose coordinates are in the /// reverse order of this objects. /// </summary> /// <returns> /// A <see cref="LineString"/> with coordinates in the reverse order. /// </returns> public virtual LineString ReverseAll() { ICoordinateList seq = points.Clone(); seq.Reverse(); LineString revLine = this.Factory.CreateLineString(seq); return(revLine); }