cleanRing method

List<Coordinate> cleanRing(
  1. List<Coordinate> original
)

@param vertices the vertices of a linear ring, which may or may not be flattened (i.e. vertices collinear) @return the coordinates with unnecessary (collinear) vertices removed

Implementation

List<Coordinate> cleanRing(List<Coordinate> original) {
  Assert.equals(original[0], original[original.length - 1]);
  List<Coordinate> cleanedRing = [];
  Coordinate? previousDistinctCoordinate = null;
  for (int i = 0; i <= original.length - 2; i++) {
    Coordinate currentCoordinate = original[i];
    Coordinate nextCoordinate = original[i + 1];
    if (currentCoordinate.equals(nextCoordinate)) {
      continue;
    }
    if (previousDistinctCoordinate != null &&
        isBetween(
            previousDistinctCoordinate, currentCoordinate, nextCoordinate)) {
      continue;
    }
    cleanedRing.add(currentCoordinate);
    previousDistinctCoordinate = currentCoordinate;
  }
  cleanedRing.add(original[original.length - 1]);
  return cleanedRing;
  // List<Coordinate> cleanedRingCoordinates = new Coordinate[cleanedRing.size()];
  // return (List<Coordinate>) cleanedRing.toArray(cleanedRingCoordinates);
}