ensureValidRing static method
Ensures that a CoordinateSequence forms a valid ring, returning a new closed sequence of the correct length if required. If the input sequence is already a valid ring, it is returned without modification. If the input sequence is too short or is not closed, it is extended with one or more copies of the start point.
@param fact the CoordinateSequenceFactory to use to create the new sequence @param seq the sequence to test @return the original sequence, if it was a valid ring, or a new sequence which is valid.
Implementation
static CoordinateSequence ensureValidRing(
CoordinateSequenceFactory fact, CoordinateSequence seq) {
int n = seq.size();
// empty sequence is valid
if (n == 0) return seq;
// too short - make a new one
if (n <= 3) return _createClosedRing(fact, seq, 4);
bool isClosed = seq.getOrdinate(0, CoordinateSequence.X) ==
seq.getOrdinate(n - 1, CoordinateSequence.X) &&
seq.getOrdinate(0, CoordinateSequence.Y) ==
seq.getOrdinate(n - 1, CoordinateSequence.Y);
if (isClosed) return seq;
// make a new closed ring
return _createClosedRing(fact, seq, n + 1);
}