From dd152231090799c29ef106440eb41ef97b52f1eb Mon Sep 17 00:00:00 2001 From: Sameh Khamis Date: Sat, 14 Nov 2026 12:22:30 -0800 Subject: [PATCH] Class only PID's trolleybus lines as trolleybuses, and name the new modes in the plural for voice PID's routes.txt types lines 51, 52, 53, 58, 59, 232 and 275 as trolleybuses (route type 11); the rest of 50 to 59 stay buses, as before. Voice now also knows trolleybuses, gondolas, cable cars, funiculars and monorails. --- src/data/transitFeeds.js | 8 ++++++-- src/data/transitFeeds.test.mjs | 1 + src/voice/layerManifest.js | 5 +++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/data/transitFeeds.js b/src/data/transitFeeds.js index 3e9f9cebc..0f6844c65 100644 --- a/src/data/transitFeeds.js +++ b/src/data/transitFeeds.js @@ -547,6 +547,9 @@ function astuceRouteLabel(routeId) { return ASTUCE_ROUTES[routeId ?? '']?.label ?? astuceNetworkLabel(routeId); } +/** PID trolleybus lines: route_type 11 in PID's routes.txt (checked 2026-11-14). */ +const PID_TROLLEYBUS_LINES = new Set([51, 52, 53, 58, 59, 232, 275]); + /** * Prague PID route ids are `L` plus a number whose range says what runs it, * per PID's GTFS routes.txt (data.pid.cz, checked 2026-11-09): 1–99 trams @@ -566,10 +569,11 @@ function pidRoute(routeId) { const n = Number(match[1]); // i18n-ignore: line code, as signed if (n === 49) return { mode: 'funicular', label: 'LD' }; - if (n >= 50 && n <= 59) return { mode: 'trolleybus', label: String(n) }; + if (PID_TROLLEYBUS_LINES.has(n)) + return { mode: 'trolleybus', label: String(n) }; + if (n >= 50 && n <= 59) return { mode: 'bus', label: String(n) }; if (n < 100) return { mode: 'tram', label: String(n) }; if (n >= 800 && n < 900) return { mode: 'bus', label: `X${n - 800}` }; - if (n === 232 || n === 275) return { mode: 'trolleybus', label: String(n) }; if (n < 991) return { mode: 'bus', label: String(n) }; // i18n-ignore: metro line letters, as signed if (n <= 993) return { mode: 'subway', label: 'ABC'[n - 991] }; diff --git a/src/data/transitFeeds.test.mjs b/src/data/transitFeeds.test.mjs index 37ad82a56..85a3a8243 100644 --- a/src/data/transitFeeds.test.mjs +++ b/src/data/transitFeeds.test.mjs @@ -734,6 +734,7 @@ test('Prague route-id ranges give metro, trains, ferries and trolleybuses their ]; assert.deepEqual(read('L22'), ['tram', '22']); assert.deepEqual(read('L58'), ['trolleybus', '58']); + assert.deepEqual(read('L55'), ['bus', '55'], 'not a PID trolleybus line'); assert.deepEqual(read('L275'), ['trolleybus', '275'], 'route type 11'); assert.deepEqual(read('L49'), ['funicular', 'LD'], 'Petřín funicular'); assert.deepEqual(read('L135'), ['bus', '135']); diff --git a/src/voice/layerManifest.js b/src/voice/layerManifest.js index 60cda6f25..52cb0f90f 100644 --- a/src/voice/layerManifest.js +++ b/src/voice/layerManifest.js @@ -309,10 +309,15 @@ const layers = [ 'trams', 'subway', 'trolleybus', + 'trolleybuses', 'gondola', + 'gondolas', 'cable car', + 'cable cars', 'funicular', + 'funiculars', 'monorail', + 'monorails', ], context: false, query: {