Exemplo n.º 1
0
 /// <summary>
 /// Normalizes a <c>LineString</c>.  A normalized linestring
 /// has the first point which is not equal to it's reflected point
 /// less than the reflected point.
 /// </summary>
 public override void Normalize()
 {
     for (int i = 0; i < _points.Count / 2; i++)
     {
         int j = _points.Count - 1 - i;
         // skip equal points on both ends
         if (!_points.GetCoordinate(i).Equals(_points.GetCoordinate(j)))
         {
             if (_points.GetCoordinate(i).CompareTo(_points.GetCoordinate(j)) > 0)
             {
                 CoordinateArrays.Reverse(Coordinates);
             }
             return;
         }
     }
 }
Exemplo n.º 2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ring"></param>
        /// <param name="clockwise"></param>
        private static void Normalize(ILinearRing ring, bool clockwise)
        {
            if (ring.IsEmpty)
            {
                return;
            }
            var uniqueCoordinates = new Coordinate[ring.Coordinates.Length - 1];

            Array.Copy(ring.Coordinates, 0, uniqueCoordinates, 0, uniqueCoordinates.Length);
            var minCoordinate = CoordinateArrays.MinCoordinate(ring.Coordinates);

            CoordinateArrays.Scroll(uniqueCoordinates, minCoordinate);
            Array.Copy(uniqueCoordinates, 0, ring.Coordinates, 0, uniqueCoordinates.Length);
            ring.Coordinates[uniqueCoordinates.Length] = uniqueCoordinates[0];
            if (Orientation.IsCCW(ring.Coordinates) == clockwise)
            {
                CoordinateArrays.Reverse(ring.Coordinates);
            }
        }