cleanRing method
@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);
}