From 48d3f7b8ae5439aa2187c2b2be75e3dd82fc6f58 Mon Sep 17 00:00:00 2001 From: galela Date: Fri, 28 Jun 2024 09:51:47 +0200 Subject: [PATCH] fix (transit, directions): compute duration and distance for all legs instead of picking them from first leg --- samples/directions-advanced/index.ts | 32 +++++++++++++++++++++++++--- samples/transit-advanced/index.ts | 13 ++++++----- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/samples/directions-advanced/index.ts b/samples/directions-advanced/index.ts index e06c9da8..d0fe5db2 100644 --- a/samples/directions-advanced/index.ts +++ b/samples/directions-advanced/index.ts @@ -156,6 +156,14 @@ function createRoutesTable(response: woosmap.map.DirectionResult) { const directionTripElements = response.routes.map( (route: woosmap.map.DirectionRoute, index: number) => { const leg = route.legs[0]; + const distanceTotal = route.legs.reduce( + (total, leg) => total + leg.distance.value, + 0, + ); + const durationTotal = route.legs.reduce( + (total, leg) => total + leg.duration.value, + 0, + ); const directionTrip = document.createElement("div"); directionTrip.className = "directionTrip"; if (index === 0) { @@ -169,11 +177,11 @@ function createRoutesTable(response: woosmap.map.DirectionResult) {
-
${leg.duration.text}
-
${leg.distance.text}
+
${formatTime(durationTotal)}
+
${formatDistance(distanceTotal)}
through ${leg.start_address ? leg.start_address : JSON.stringify(leg.start_location)}
-
${leg.duration.text} ${(directionsRequest.departure_time || directionsRequest.arrival_time) ? "with" : "without"} traffic
+
${formatTime(durationTotal)} ${directionsRequest.departure_time || directionsRequest.arrival_time ? "with" : "without"} traffic
`; @@ -187,6 +195,24 @@ function createRoutesTable(response: woosmap.map.DirectionResult) { }, ); + function formatDistance(meters: number): string { + if (meters < 1000) { + return `${meters} m`; + } else { + return `${(meters / 1000).toFixed(2)} km`; + } + } + + function formatTime(seconds: number): string { + const minutes = Math.round(seconds / 60); + if (minutes < 60) { + return `${minutes}m`; + } else { + const hours = Math.floor(minutes / 60); + const remainingMinutes = minutes % 60; + return `${hours}h${remainingMinutes}m`; + } + } function selectCorrectRoute(index: number) { document .querySelectorAll(".directionTrip__selected") diff --git a/samples/transit-advanced/index.ts b/samples/transit-advanced/index.ts index 98d4ff11..d58b1ee7 100644 --- a/samples/transit-advanced/index.ts +++ b/samples/transit-advanced/index.ts @@ -89,7 +89,10 @@ function setLatLngToContainer( function createRoutesTable(response: woosmap.map.transit.TransitRouteResponse) { const directionTripElements = response.routes.map( (route: woosmap.map.transit.TransitRoute, index: number) => { - const leg = route.legs[0]; + const distanceTotal = route.legs.reduce( + (total, leg) => total + leg.distance, + 0, + ); const directionTrip = document.createElement("div"); directionTrip.className = "directionTrip"; if (index === 0) { @@ -111,11 +114,11 @@ function createRoutesTable(response: woosmap.map.transit.TransitRouteResponse) {
-
${formatTime(leg.duration)}
-
${formatDistance(leg.distance)}
+
${formatTime(route.duration)}
+
${formatDistance(distanceTotal)}
through ${startName}
-
${formatTime(leg.duration)}
+
${formatTime(route.duration)}
`; @@ -138,7 +141,7 @@ function createRoutesTable(response: woosmap.map.transit.TransitRouteResponse) { } function formatTime(seconds: number): string { - const minutes = Math.round(seconds/60); + const minutes = Math.round(seconds / 60); if (minutes < 60) { return `${minutes}m`; } else {