org.geolatte.geom.PositionSequence Maven / Gradle / Ivy
Show all versions of geolatte-geom Show documentation
/*
* This file is part of the GeoLatte project.
*
* GeoLatte is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GeoLatte is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with GeoLatte. If not, see .
*
* Copyright (C) 2010 - 2011 and Ownership of code is shared by:
* Qmino bvba - Romeinsestraat 18 - 3001 Heverlee (http://www.qmino.com)
* Geovise bvba - Generaal Eisenhowerlei 9 - 2140 Antwerpen (http://www.geovise.com)
*/
package org.geolatte.geom;
import java.util.List;
import java.util.Spliterator;
import java.util.Spliterators;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
/**
* A PositionSequence
is an ordered sequence of Position
s.
*
* A PositionSequence
is typically used to store the Position
s (vertices) that define a
* curve (a 1-dimensional geometric primitive), with the subtype of the curve specifying the form of interpolation between
* consecutive Position
s. (E.g.a LineString
uses linear interpolation between Position
s.)
*
* @author Karel Maesen, Geovise BVBA, 2011
*/
public interface PositionSequence extends Iterable
{
PositionSequence
clone();
Class
getPositionClass();
PositionFactory
getPositionFactory();
/**
* Returns true iff this PositionSequence
contains no Position
s
*
* @return true iff this PositionSequence
contains no Position
s
*/
boolean isEmpty();
/**
* Returns the coordinate dimension of this PositionSequence
.
*
*
The coordinate dimension is number of measurements or axes needed to describe Position
* in the coordinate system associated with this PositionSequence
.
*
* @return the coordinate dimension of this PositionSequence
*/
int getCoordinateDimension();
/**
* Returns the number of Position
s contained in this PositionSequence
.
*
* @return the number of Position
s contained in this PositionSequence
.
*/
int size();
/**
* Copies the coordinates at position i into the specified array.
*
* @param position the position index to copy
* @param coordinates the destination array
* @throws IllegalArgumentException if the destination array is smaller than the coordiante dimension.
*/
void getCoordinates(int position, double[] coordinates);
P getPositionN(int index);
default P first() {
return getPositionN(0);
}
default P last() {
return getPositionN(size() - 1);
}
/**
* Accepts a PositionVisitor
.
*
* This instance will pass the visitor to all of its Position
s.
*
* @param visitor the visitor for this instance's Position
s
*/
void accept(PositionVisitor visitor);
/**
* Accepts a LLAPositionVisitor
.
*
* @param visitor the visitor for this object
*/
void accept(LLAPositionVisitor visitor);
/**
* Creates a new PositionSequence
with positions in reverse order.
*
* @return a PositionSequence with the positions of this instance in reverse order.
*/
PositionSequence
reverse();
default Stream
stream() {
return StreamSupport.stream(this.spliterator(), false);
}
default List
toList() {
return this.stream().collect(Collectors.toList());
}
default Spliterator
splitIterator() {
return Spliterators.spliteratorUnknownSize(this.iterator(), Spliterator.ORDERED | Spliterator.IMMUTABLE);
}
}