Skip to content

Commit

Permalink
Readjust walking route departure and arrival time due to bus buffer t…
Browse files Browse the repository at this point in the history
…ime (#274)
  • Loading branch information
alanna-zhou authored Nov 2, 2019
1 parent bb2ad2f commit bb4ab65
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 8 deletions.
53 changes: 46 additions & 7 deletions src/utils/ParseRouteUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -453,7 +453,13 @@ function parseWalkingRoute(
* @param destinationName
* @returns {Promise<Array<Object>>}
*/
function parseRoutes(busRoutes: Array<Object>, originName: string, destinationName: string): Promise<Array<Object>> {
function parseRoutes(
busRoutes: Array<Object>,
originName: string,
destinationName: string,
originalDepartureTimeMs: number,
isArriveByQuery: boolean,
): Promise<Array<Object>> {
return Promise.all(busRoutes.map(async (busRoute) => {
try {
// array containing legs of journey. e.g. walk, bus ride, walk
Expand Down Expand Up @@ -656,6 +662,39 @@ function parseRoutes(busRoutes: Array<Object>, 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,
Expand Down
5 changes: 4 additions & 1 deletion src/utils/RouteUtils.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit bb4ab65

Please sign in to comment.