protected void writePoints(PositionSequence<P> points, int coordinateDimension, ByteBuffer output) { double[] coordinates = new double[coordinateDimension]; for (int i = 0; i < points.size(); i++) { points.getCoordinates(i, coordinates); writePoint(coordinates, output); } }
@Override public void getCoordinates(int position, double[] coordinates) { int childOffset = position; for (PositionSequence<P> child : getChildren()) { if (childOffset < child.size()) { child.getCoordinates(childOffset, coordinates); return; } else { childOffset -= child.size(); } } throw new ArrayIndexOutOfBoundsException(String.format("Index %d not found in collection of size %d", position, size())); }
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(); }
/** * Returns the position at the specified index in the <code>PositionSequence</code> of this <code>Geometry</code>. * * @param index the position in the <code>PositionSequence</code> (first point is at index 0). * @return the position at the specified index in the <code>PositionSequence</code> of this <code>Geometry</code>. */ public P getPositionN(int index) { if (index >= getPositions().size()) { throw new IndexOutOfBoundsException(); } double[] coords = new double[getCoordinateDimension()]; getPositions().getCoordinates(index, coords); return Positions.mkPosition(getCoordinateReferenceSystem(), coords); }
private <P extends Position> void addPointList(PositionSequence<P> points) { addStartList(); double[] coords = new double[points.getCoordinateDimension()]; for (int i = 0; i < points.size(); i++) { if (i > 0) { addDelimiter(); } points.getCoordinates(i, coords); addPoint(coords); } addEndList(); }
private <T extends C2D & Measured> LineString<T> measure(LineString<T> geometry) { CoordinateReferenceSystem<T> crs = geometry.getCoordinateReferenceSystem(); PositionSequence originalPoints = geometry.getPositions(); PositionSequenceBuilder<T> builder = PositionSequenceBuilders.fixedSized(originalPoints.size(), geometry.getPositionClass()); int mIdx = hasVerticalAxis(crs) ? 3 :2; double[] coordinates = new double[geometry.getCoordinateDimension()]; double[] prevCoordinates = new double[geometry.getCoordinateDimension()]; for (int i = 0; i < originalPoints.size(); i++) { originalPoints.getCoordinates(i, coordinates); if (i > 0) { length += Math.hypot(coordinates[0] - prevCoordinates[0], coordinates[1] - prevCoordinates[1]); } coordinates[mIdx] = length; builder.add(coordinates); prevCoordinates[0] = coordinates[0]; prevCoordinates[1] = coordinates[1]; } return new LineString<T>(builder.toPositionSequence(), crs); }