diff --git a/src/app/components/GtfsVisualizationMap.tsx b/src/app/components/GtfsVisualizationMap.tsx index d7752c05..3f998a88 100644 --- a/src/app/components/GtfsVisualizationMap.tsx +++ b/src/app/components/GtfsVisualizationMap.tsx @@ -294,9 +294,12 @@ export const GtfsVisualizationMap = ({ out.push(s); } } - out.sort((a, b) => - a.name.localeCompare(b.name, undefined, { sensitivity: 'base' }), - ); + out.sort((a, b) => { + if (a.sequence != null && b.sequence != null) { + return a.sequence - b.sequence; + } + return 0; + }); setSelectedRouteStops(out); } }, [filteredRoutes]); diff --git a/src/app/components/MapElement.tsx b/src/app/components/MapElement.tsx index 87dbf013..4da7cc7b 100644 --- a/src/app/components/MapElement.tsx +++ b/src/app/components/MapElement.tsx @@ -24,6 +24,7 @@ export interface MapStopElement extends BaseMapElement { stopId: string; stopLat: number; stopLon: number; + sequence?: number; } export type MapElementType = MapRouteElement | MapStopElement; diff --git a/src/app/utils/precompute.ts b/src/app/utils/precompute.ts index 62bce45e..15dfb851 100644 --- a/src/app/utils/precompute.ts +++ b/src/app/utils/precompute.ts @@ -239,6 +239,12 @@ export function createPrecomputation(deps: PrecomputeDeps): { const stopId = String(f.properties?.stop_id ?? ''); const stopName = String(f.properties?.stop_name ?? ''); const locationType = Number(f.properties?.location_type ?? 0); + const sequence = + f.properties?.stop_sequence != null + ? Number(f.properties.stop_sequence) + : f.properties?.sequence != null + ? Number(f.properties.sequence) + : undefined; const routeIds = extractRouteIds(f.properties?.route_ids); if (routeIds.length === 0) continue; @@ -265,6 +271,7 @@ export function createPrecomputation(deps: PrecomputeDeps): { stopId, stopLat: lat2, stopLon: lon2, + sequence, }); } @@ -280,9 +287,12 @@ export function createPrecomputation(deps: PrecomputeDeps): { routeIdToBBoxRef.current = idToBBox; routeTypeToBBoxRef.current = typeToBBox; Object.keys(byRouteId).forEach((rid) => { - byRouteId[rid].sort((a, b) => - a.name.localeCompare(b.stopId, undefined, { sensitivity: 'base' }), - ); + byRouteId[rid].sort((a, b) => { + if (a.sequence != null && b.sequence != null) { + return a.sequence - b.sequence; + } + return 0; + }); }); stopsByRouteIdRef.current = byRouteId;