21 package org.matsim.core.trafficmonitoring;
23 class LinearInterpolatingTravelTimeGetter
implements TravelTimeGetter {
25 private final TimeSlotComputation travelTimeAggregator ;
26 private final int numSlots;
27 private final double travelTimeBinSize;
28 private final double halfBinSize;
30 public LinearInterpolatingTravelTimeGetter(
int numSlots,
double travelTimeBinSize, TimeSlotComputation aggregator ) {
31 this.numSlots = numSlots;
32 this.travelTimeBinSize = travelTimeBinSize;
33 this.halfBinSize = ((double) travelTimeBinSize) / 2;
34 this.travelTimeAggregator = aggregator ;
38 public double getTravelTime(TravelTimeData travelTimeData,
double time) {
39 final int timeSlot = travelTimeAggregator.getTimeSlotIndex(time);
42 if (time <= halfBinSize)
return travelTimeData.getTravelTime(timeSlot, time);
45 else if (time >= numSlots * travelTimeBinSize - halfBinSize)
return travelTimeData.getTravelTime(timeSlot, time);
53 if (timeSlot * travelTimeBinSize + halfBinSize > time) {
54 firstSlot = timeSlot - 1;
55 secondSlot = timeSlot;
58 secondSlot = timeSlot + 1;
62 double firstTravelTime = travelTimeData.getTravelTime(firstSlot, time);
63 double secondTravelTime = travelTimeData.getTravelTime(secondSlot, time);
66 double dx = time - (firstSlot * travelTimeBinSize + halfBinSize);
75 double dy = (secondTravelTime - firstTravelTime) * dx / travelTimeBinSize;
77 return firstTravelTime + dy;