SimpleRouteExtraInfoBuilder.java
/* This file is part of Openrouteservice.
*
* Openrouteservice 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 2.1
* of the License, or (at your option) any later version.
* This library 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 this library;
* if not, see <https://www.gnu.org/licenses/>.
*/
package org.heigit.ors.routing.util.extrainfobuilders;
import com.graphhopper.util.PointList;
import org.heigit.ors.routing.RouteExtraInfo;
import org.heigit.ors.routing.RouteSegmentItem;
public class SimpleRouteExtraInfoBuilder extends RouteExtraInfoBuilder {
private int prevIndex = 0;
private int segmentLength = 0;
private long prevValueIndex = -1;
private double prevValue = Double.MAX_VALUE;
private double segmentDist = 0;
public SimpleRouteExtraInfoBuilder(RouteExtraInfo extraInfo) {
super(extraInfo);
}
public void addSegment(double value, long valueIndex, PointList geom, double dist, boolean lastEdge) {
int nPoints = geom.size() - 1;
if ((prevValue != Double.MAX_VALUE && value != prevValue) || (lastEdge)) {
RouteSegmentItem item = null;
if (lastEdge) {
if (value != prevValue) {
if (prevValueIndex != -1) {
item = new RouteSegmentItem(prevIndex, prevIndex + segmentLength, prevValueIndex, segmentDist);
extraInfo.add(item);
}
item = new RouteSegmentItem(prevIndex + segmentLength, prevIndex + segmentLength + nPoints, valueIndex, dist);
extraInfo.add(item);
} else {
item = new RouteSegmentItem(prevIndex, prevIndex + segmentLength + nPoints, valueIndex, segmentDist + dist);
extraInfo.add(item);
}
} else {
item = new RouteSegmentItem(prevIndex, prevIndex + segmentLength, prevValueIndex, segmentDist);
prevIndex += segmentLength;
segmentDist = dist;
segmentLength = nPoints;
extraInfo.add(item);
}
} else {
segmentLength += nPoints;
segmentDist += dist;
}
prevValue = value;
prevValueIndex = valueIndex;
}
public void addSegment(double value, long valueIndex, PointList geom, double dist) {
throw new UnsupportedOperationException("SimpleRouteExtraInfoBuilder does not support method addSegment without lastEdge flag.");
}
public void finish() {
throw new UnsupportedOperationException("SimpleRouteExtraInfoBuilder does not support method finish.");
}
}