Feat: GBFS v3 support for station names

GBFS v3 uses `LocalizedString` for `name` and `short_name` of the stations. This caused stations from v3 to have names like `[object Object]`.

This commit makes the code handle v3 names. It default to locale 'en' then fallbacks to the first option in the array.

Documentation for v3: https://gbfs.org/documentation/reference/#station_informationjson
This commit is contained in:
Kristóf Kékesi authored and Mazeyar Moeini Feizabadi committed 2026-10-13 23:35:48 +02:00
1 parent 9beadbda63
commit 16e0f35c74
1 file changed
+14 -2
+14 -2
View File
@@ -63,15 +63,27 @@ export function parseStationInformation(payload) {
const stationMap = new Map();
for (const raw of stations) {
// Accept both GBFS 2.x (station_id) and alternate (id) field names
// Accept both GBFS (station_id) and alternate (id) field names
const stationId = String(raw?.station_id ?? raw?.id ?? '').trim();
const lat = Number(raw?.lat ?? raw?.latitude);
const lon = Number(raw?.lon ?? raw?.longitude);
if (!stationId || !Number.isFinite(lat) || !Number.isFinite(lon)) continue;
let name;
if (payload?.version >= 3) {
const handleLocalizedString = (array) =>
array.find((localizedString) =>
localizedString.language.toLowerCase() === 'en') || array[0];
name = String(
handleLocalizedString(raw?.name).text ||
handleLocalizedString(raw?.short_name).text || '').trim();
} else {
name = String(raw?.name || raw?.short_name || '').trim();
}
stationMap.set(stationId, {
stationId,
name: String(raw?.name || raw?.short_name || '').trim(),
name,
lat,
lon,
capacity: toNonNegativeInteger(raw?.capacity),