From bb4ab65c83592c95effef58d2f8dfd9630800eb3 Mon Sep 17 00:00:00 2001 From: alanna-zhou Date: Sat, 2 Nov 2019 16:26:21 -0400 Subject: [PATCH] Readjust walking route departure and arrival time due to bus buffer time (#274) --- src/utils/ParseRouteUtils.js | 53 +++++++++++++++++++++++++++++++----- src/utils/RouteUtils.js | 5 +++- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/src/utils/ParseRouteUtils.js b/src/utils/ParseRouteUtils.js index 39b69f9a..7b693ebe 100644 --- a/src/utils/ParseRouteUtils.js +++ b/src/utils/ParseRouteUtils.js @@ -359,15 +359,15 @@ function parseWalkingRoute( ): Object { try { const path = data.paths[0]; - let startDateMs = dateMs; - let endDateMs = dateMs + path.time; + let startTimeMs = dateMs; + let endTimeMs = dateMs + path.time; if (isArriveBy) { - startDateMs = dateMs - path.time; - endDateMs = dateMs; + startTimeMs = dateMs - path.time; + endTimeMs = dateMs; } - const departureTime = convertMillisecondsToISOString(startDateMs); - const arrivalTime = convertMillisecondsToISOString(endDateMs); + const departureTime = convertMillisecondsToISOString(startTimeMs); + const arrivalTime = convertMillisecondsToISOString(endTimeMs); const totalDuration = getDifferenceInMinutes(departureTime, arrivalTime); const { startCoords, endCoords } = getStartEndCoords(path.points, path.points); @@ -453,7 +453,13 @@ function parseWalkingRoute( * @param destinationName * @returns {Promise>} */ -function parseRoutes(busRoutes: Array, originName: string, destinationName: string): Promise> { +function parseRoutes( + busRoutes: Array, + originName: string, + destinationName: string, + originalDepartureTimeMs: number, + isArriveByQuery: boolean, +): Promise> { return Promise.all(busRoutes.map(async (busRoute) => { try { // array containing legs of journey. e.g. walk, bus ride, walk @@ -656,6 +662,39 @@ function parseRoutes(busRoutes: Array, originName: string, destinationNa stopName: destinationName, }); + // Readjust the walking start and end times by accounting for the buffer + // times that were initially passed into Graphhopper to get routes + if (busRoute.transfers === -1) { + let startTimeMs = originalDepartureTimeMs; + let endTimeMs = originalDepartureTimeMs + busRoute.time; + + if (isArriveByQuery) { + startTimeMs = originalDepartureTimeMs - busRoute.time; + endTimeMs = originalDepartureTimeMs; + } + + const walkDepartureTime = convertMillisecondsToISOString(startTimeMs); + const walkArrivalTime = convertMillisecondsToISOString(endTimeMs); + + directions[0].startTime = walkDepartureTime; + directions[0].endTime = walkArrivalTime; + + return { + arrivalTime: walkArrivalTime, + boundingBox, + departureTime: walkDepartureTime, + directions, + endCoords, + endName: destinationName, + numberOfTransfers: busRoute.transfers, + routeSummary, + startCoords, + startName: originName, + totalDuration, + travelDistance, + }; + } + return { arrivalTime: arriveTime, boundingBox, diff --git a/src/utils/RouteUtils.js b/src/utils/RouteUtils.js index 69a8d1db..f0b4269d 100644 --- a/src/utils/RouteUtils.js +++ b/src/utils/RouteUtils.js @@ -153,7 +153,10 @@ async function getParsedWalkingAndBusRoutes( }; } - const parsedRoutes = await ParseRouteUtils.parseRoutes(routes, originName, destinationName); + const departureTimeMs = GraphhopperUtils.getDepartureTime(departureTimeQuery, isArriveBy, 0); + const parsedRoutes = await ParseRouteUtils.parseRoutes( + routes, originName, destinationName, departureTimeMs, isArriveBy, + ); let parsedWalkingRoute = parsedRoutes.find(route => route.numberOfTransfers === -1); // Make request to Ghopper walking service if the bus service doesn't provide walking directions