fix(directions): show a 996 m leg as 1.0 km, not 1000 m (#1386)

Choose route distance units after rounding so near-kilometre legs display in kilometres.

Contribution by @rudycelekli.
This commit is contained in:
Sameh Khamis authored and GitHub committed 2026-10-25 09:01:26 -07:00
commit 81af549ad7
4 files changed
+11 -1

No files matched your search

@@ -0,0 +1,3 @@
- Show a route leg of 995 m or more as 1.0 km. The route summary and step
cards kept meters below 1000, then rounded 996 m up to "1000 m"
(Rudy Celekli, @rudycelekli, #1386).
+4
View File
@@ -4081,6 +4081,10 @@ routing it shows `Routing…`, and a router miss reads
The layer holds continuous render only while a route is drawn (the dashes The layer holds continuous render only while a route is drawn (the dashes
animate). Disable clears all state. animate). Disable clears all state.
At the metre/kilometre boundary, route distance labels use the rounded
ten-metre value to select the unit, switching to kilometres at 995 metres;
a 996-metre leg displays as `1.0 km` rather than `1000 m`.
**Keys needed: none.** Directions works on a keyless boot, and the layer is off **Keys needed: none.** Directions works on a keyless boot, and the layer is off
until the operator turns it on. until the operator turns it on.
+2
View File
@@ -846,6 +846,8 @@ test('route numbers follow the page language and never break from their unit', (
t.after(() => setLocale('en')); t.after(() => setLocale('en'));
assert.equal(routeDistanceText(8.4), '8\u00a0m'); assert.equal(routeDistanceText(8.4), '8\u00a0m');
assert.equal(routeDistanceText(236), '240\u00a0m'); assert.equal(routeDistanceText(236), '240\u00a0m');
assert.equal(routeDistanceText(994), '990\u00a0m');
assert.equal(routeDistanceText(996), '1.0\u00a0km');
assert.equal(routeDistanceText(1500), '1.5\u00a0km'); assert.equal(routeDistanceText(1500), '1.5\u00a0km');
assert.equal(routeDistanceText(2_345_000), '2345\u00a0km'); assert.equal(routeDistanceText(2_345_000), '2345\u00a0km');
assert.equal(routeDurationText(39), '39\u00a0s'); assert.equal(routeDurationText(39), '39\u00a0s');
+2 -1
View File
@@ -112,7 +112,8 @@ export const FLIGHT_PROGRESS_MS = 250;
export function routeDistanceText(meters) { export function routeDistanceText(meters) {
if (!Number.isFinite(meters) || meters < 0) return ''; if (!Number.isFinite(meters) || meters < 0) return '';
if (meters < 100) return formatQuantity(Math.round(meters), 'm'); if (meters < 100) return formatQuantity(Math.round(meters), 'm');
if (meters < 1000) return formatQuantity(Math.round(meters / 10) * 10, 'm'); const tens = Math.round(meters / 10) * 10;
if (tens < 1000) return formatQuantity(tens, 'm');
const km = meters / 1000; const km = meters / 1000;
return km < 10 return km < 10
? formatQuantity(km, 'km', { ? formatQuantity(km, 'km', {