Skip to content

Commit bb4ab65

Browse files
authored
Readjust walking route departure and arrival time due to bus buffer time (#274)
1 parent bb2ad2f commit bb4ab65

2 files changed

Lines changed: 50 additions & 8 deletions

File tree

src/utils/ParseRouteUtils.js

Lines changed: 46 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -359,15 +359,15 @@ function parseWalkingRoute(
359359
): Object {
360360
try {
361361
const path = data.paths[0];
362-
let startDateMs = dateMs;
363-
let endDateMs = dateMs + path.time;
362+
let startTimeMs = dateMs;
363+
let endTimeMs = dateMs + path.time;
364364

365365
if (isArriveBy) {
366-
startDateMs = dateMs - path.time;
367-
endDateMs = dateMs;
366+
startTimeMs = dateMs - path.time;
367+
endTimeMs = dateMs;
368368
}
369-
const departureTime = convertMillisecondsToISOString(startDateMs);
370-
const arrivalTime = convertMillisecondsToISOString(endDateMs);
369+
const departureTime = convertMillisecondsToISOString(startTimeMs);
370+
const arrivalTime = convertMillisecondsToISOString(endTimeMs);
371371
const totalDuration = getDifferenceInMinutes(departureTime, arrivalTime);
372372

373373
const { startCoords, endCoords } = getStartEndCoords(path.points, path.points);
@@ -453,7 +453,13 @@ function parseWalkingRoute(
453453
* @param destinationName
454454
* @returns {Promise<Array<Object>>}
455455
*/
456-
function parseRoutes(busRoutes: Array<Object>, originName: string, destinationName: string): Promise<Array<Object>> {
456+
function parseRoutes(
457+
busRoutes: Array<Object>,
458+
originName: string,
459+
destinationName: string,
460+
originalDepartureTimeMs: number,
461+
isArriveByQuery: boolean,
462+
): Promise<Array<Object>> {
457463
return Promise.all(busRoutes.map(async (busRoute) => {
458464
try {
459465
// array containing legs of journey. e.g. walk, bus ride, walk
@@ -656,6 +662,39 @@ function parseRoutes(busRoutes: Array<Object>, originName: string, destinationNa
656662
stopName: destinationName,
657663
});
658664

665+
// Readjust the walking start and end times by accounting for the buffer
666+
// times that were initially passed into Graphhopper to get routes
667+
if (busRoute.transfers === -1) {
668+
let startTimeMs = originalDepartureTimeMs;
669+
let endTimeMs = originalDepartureTimeMs + busRoute.time;
670+
671+
if (isArriveByQuery) {
672+
startTimeMs = originalDepartureTimeMs - busRoute.time;
673+
endTimeMs = originalDepartureTimeMs;
674+
}
675+
676+
const walkDepartureTime = convertMillisecondsToISOString(startTimeMs);
677+
const walkArrivalTime = convertMillisecondsToISOString(endTimeMs);
678+
679+
directions[0].startTime = walkDepartureTime;
680+
directions[0].endTime = walkArrivalTime;
681+
682+
return {
683+
arrivalTime: walkArrivalTime,
684+
boundingBox,
685+
departureTime: walkDepartureTime,
686+
directions,
687+
endCoords,
688+
endName: destinationName,
689+
numberOfTransfers: busRoute.transfers,
690+
routeSummary,
691+
startCoords,
692+
startName: originName,
693+
totalDuration,
694+
travelDistance,
695+
};
696+
}
697+
659698
return {
660699
arrivalTime: arriveTime,
661700
boundingBox,

src/utils/RouteUtils.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,10 @@ async function getParsedWalkingAndBusRoutes(
153153
};
154154
}
155155

156-
const parsedRoutes = await ParseRouteUtils.parseRoutes(routes, originName, destinationName);
156+
const departureTimeMs = GraphhopperUtils.getDepartureTime(departureTimeQuery, isArriveBy, 0);
157+
const parsedRoutes = await ParseRouteUtils.parseRoutes(
158+
routes, originName, destinationName, departureTimeMs, isArriveBy,
159+
);
157160
let parsedWalkingRoute = parsedRoutes.find(route => route.numberOfTransfers === -1);
158161

159162
// Make request to Ghopper walking service if the bus service doesn't provide walking directions

0 commit comments

Comments
 (0)