protected <P extends Position> PositionSequence<P> reverse(PositionSequence<P> positions) { PositionSequenceBuilder<P> builder = fixedSized(positions.size(), positions.getPositionClass()); Stack<P> stack = new Stack<P>(); for (P pos : positions) { stack.push(pos); } while (!stack.empty()) { builder.add(stack.pop()); } return builder.toPositionSequence(); }
private <P extends Position> boolean testPointSequenceEquality(PositionSequence<P> first, PositionSequence<P> second) { if (!first.getPositionClass().equals(second.getPositionClass())) return false; double[] c1 = new double[first.getCoordinateDimension()]; double[] c2 = new double[second.getCoordinateDimension()]; for (int idx = 0; idx < first.size(); idx++) { first.getCoordinates(idx, c1); second.getCoordinates(idx, c2); if(!this.positionEquality.equals(c1, c2)) return false; } return true; }
@Override public P next() { double[] coordinates = new double[sequence.getCoordinateDimension()]; if (hasNext()){ sequence.getCoordinates(index++, coordinates); return Positions.mkPosition(sequence.getPositionClass(), coordinates); } throw new NoSuchElementException(); }
public Class<P> getPositionClass() { return !getPositions().isEmpty() ? getPositions().getPositionClass() : this.crs.getPositionClass(); }
protected <P extends Position> PositionSequence<P> add(PositionSequence<P> seq1, int seq1Offset, PositionSequence<P> seq2, int seq2Offset) { if (seq1 == null) { return seq2; } if (seq2 == null) { return seq1; } int totalSize = seq1.size() - seq1Offset + seq2.size() - seq2Offset; PositionSequenceBuilder<P> builder = fixedSized(totalSize, seq1.getPositionClass()); CombiningVisitor<P> visitor = new CombiningVisitor<P>(builder); addToBuilder(seq1, seq1Offset, builder, visitor); addToBuilder(seq2, seq2Offset, builder, visitor); return builder.toPositionSequence(); }
@SuppressWarnings("unchecked") public <P extends Position> PositionSequence<P> toPositionSequence(CoordinateSequence cs, Class<P> posType, CoordinateReferenceSystem<P> crs) { if (cs instanceof PositionSequence && ((PositionSequence) cs).getPositionClass().equals(posType)) { return (PositionSequence<P>) cs; } Coordinate c = new Coordinate(); double[] psc = new double[crs.getCoordinateDimension()]; Arrays.fill(psc, Double.NaN); PositionSequenceBuilder<P> builder = PositionSequenceBuilders.fixedSized(cs.size(), posType); for (int i = 0; i < cs.size(); i++) { psc[0] = cs.getX(i); psc[1] = cs.getY(i); if (hasVerticalAxis(crs)) { psc[2] = cs.getZ(i); } // transfer measure values to position if (hasMeasureAxis(crs)) { final int idxM = hasVerticalAxis(crs) ? 3 : 2; final double mOrdinate = cs.getM(i); psc[idxM] = mOrdinate; } builder.add(psc); } return builder.toPositionSequence(); }