mergeSequences method
CoordinateSequence
mergeSequences(
- List<
CoordinateSequence> sequences, - List<
Ordinate> ordinateFlags
Merges an array of one-coordinate-{@link CoordinateSequence}s into one {@link CoordinateSequence}.
@param sequences an array of coordinate sequences. Each sequence contains exactly one coordinate. @param ordinateFlags a bit-mask of required ordinates. @return a coordinate sequence containing all coordinate
Implementation
CoordinateSequence mergeSequences(
List<CoordinateSequence> sequences, List<Ordinate> ordinateFlags) {
// if the sequences array is empty or null create an empty sequence
if (sequences == null || sequences.isEmpty)
return csFactory.createSizeDim(0, toDimension(ordinateFlags));
if (sequences.length == 1) return sequences[0];
List<Ordinate> mergeOrdinates;
if (this.isAllowOldJtsCoordinateSyntax && ordinateFlags.length == 2) {
mergeOrdinates = []
..addAll(ordinateFlags); // TODO check if this clone is enough
for (int i = 0; i < sequences.length; i++) {
if ((sequences[i]).hasZ()) {
mergeOrdinates.add(Ordinate.Z);
break;
}
}
} else
mergeOrdinates = ordinateFlags;
// create and fill the result sequence // TODO check
CoordinateSequence sequence = this.csFactory.createSizeDimMeas(
sequences.length,
toDimension(mergeOrdinates),
mergeOrdinates.contains(Ordinate.M) ? 1 : 0);
int offsetM =
CoordinateSequence.Z + (mergeOrdinates.contains(Ordinate.Z) ? 1 : 0);
for (int i = 0; i < sequences.length; i++) {
CoordinateSequence item = sequences[i];
sequence.setOrdinate(
i, CoordinateSequence.X, item.getOrdinate(0, CoordinateSequence.X));
sequence.setOrdinate(
i, CoordinateSequence.Y, item.getOrdinate(0, CoordinateSequence.Y));
if (mergeOrdinates.contains(Ordinate.Z)) {
sequence.setOrdinate(
i, CoordinateSequence.Z, item.getOrdinate(0, CoordinateSequence.Z));
}
if (mergeOrdinates.contains(Ordinate.M)) {
sequence.setOrdinate(i, offsetM, item.getOrdinate(0, offsetM));
}
}
// return it
return sequence;
}