Where Am I now ?

The "breadcrumbs" element is always present, on top of the page.

It shows you where you are on the lab.

It enables you to reach any page on the lab.

Nmbs line number

Read more

What is a line number?

NMBS/SNCB describes its offer as lines: a train type plus a number — IC 01, IC 12, S 01, L 01. A line is a commercial corridor with a fixed list of served stations and a regular cadence, typically one train per hour in each direction. It is the number printed on the network map, on the platform screens and on the IC leaflets NMBS/SNCB publishes (one pdf per line, with its timetable).

Each line owns one or more blocks of train numbers, per schedule (week, saturday, sunday). The block is what identifies the line — a weekday train numbered 517 falls in 500-549, so it is an IC 01. A line can own several blocks (IC 04 has one towards Poperinge and one towards Lille), and the blocks change from one schedule to the next, which is why every row below is keyed on a period.

Why it is not in the gtfs

The NMBS/SNCB gtfs feed carries none of this. A gtfs route is only an origin–destination pair ("Oostende – Eupen"), and a gtfs trip is one departure, identified by its train number (gtfsTrips.shortName). Nothing in the feed says "this trip is an IC 01". The line number is a shadow numbering: it only exists through the train-number blocks, and those live on the leaflets, not in the data.

So we keep the blocks ourselves. gtfsNmbsTrainNumbers is the reference table transcribed from the leaflets, one row per (period, type, line, range). On every ingest the enricher looks up each trip's train number in the ranges of its schedule and writes the match to gtfsNmbsTripTrainNumbers. That join is what gives every NMBS/SNCB trip a line.

How we use it: trip patterns

Gtfs has two layers — routes and trips — and misses the one in between. Between "the Oostende – Eupen route" and "the 07:23 departure" sits the train that leaves every hour: a set of trips that are all exactly the same except for their times. Same origin, same destination, same stop sequence, only the clock moves. That set is a trip pattern, and it is the unit people actually reason about: "the IC 01 towards Eupen", not one of its 18 daily trips.

The line number is what lets us build it. Grouping the trips of a line by headsign gives NMBS/SNCB trip patterns: gtfsNmbsTripPatterns is keyed on the line row plus the headsign (gtp$gnt:nmbssncb:week:ic:1:500-549$Eupen), and gtfsNmbsTripTripPatterns links every trip to its pattern. Aribus inbound rules select on these patterns rather than on a gtfs routeId, so a rule targets a line in one direction and holds for every hourly train instead of a single trip id.

The strict, stop-sequence based version of the same idea, computed for every agency, lives on the Trip Patterns page.

Loading line numbers…

gtfsNmbsTrainNumbers

< prevpage 1next >

Current page CSV export preview

gtfsNmbsTrainNumbers.csv0 rows · 13/13 columns
No rows to export.
agencyId
string | null
↕
entityType
string | null
↕
id
string
↕
lastUpdated
string | null
↑
lineNumber
number | null
↕
period
string | null
↕
priority
number | null
↕
range
string | null
↕
rangeEnd
number | null
↕
rangeStart
number | null
↕
route
string | null
↕
tsCreatedAt
string
↕
type
string | null
↕
Initializing...

gtfsNmbsTripTrainNumbers

< prevpage 1next >

Current page CSV export preview

gtfsNmbsTripTrainNumbers.csv0 rows · 7/7 columns
No rows to export.
agencyId
string | null
↕
entityType
string | null
↕
id
string
↕
lastUpdated
string | null
↑
nmbsTrainNumberId
string | null
↕
tripId
string | null
↕
tsCreatedAt
string
↕
Initializing...
Command Palette
?
LabData/en/data
ApidateAPI params in:BMC v1BMC v2OTP 1ApidateTimeAPI params in:BMC v1BMC v2OTP 1OTP 2OTP 2.9
LabDataGtfs/en/data/gtfs
LabDataGtfs RT/en/data/gtfs-rt
LabDataGbfs/en/data/gbfs
LabDataRedis/en/data/redis
LabDataGtfsAgencies/en/data/gtfs/feed/agencies/
LabDataGtfsRoutes/en/data/gtfs/feed/routes/
LabDataGtfsTrips/en/data/gtfs/feed/trips/
LabDataGtfsStops/en/data/gtfs/feed/stops/
LabDataGtfsTrip Patterns/en/data/gtfs/trip-patterns
LabDataGtfsGtfs Archives/en/data/gtfs/archives
LabDataGtfs RTAlerts/en/data/gtfs-rt/feed/alerts
LabDataGtfs RTTrip Updates/en/data/gtfs-rt/feed/trip-updates
LabDataGbfsAgencies/en/data/gbfs/agencies
LabDataGbfsStations/en/data/gbfs/stations
LabDataGbfsStation Statuses/en/data/gbfs/station-statuses
LabDataGbfsFree Floating Bikes/en/data/gbfs/free-floating-bikes
LabDataGbfsMap/en/data/gbfs/map
LabDataRedisredisCacher/gtfsRtAlertsDeLijn/en/data/redis/redisCacher/gtfsRtAlertsDeLijn
LabDataRedisredisCacher/gtfsRtAlertsEurostar/en/data/redis/redisCacher/gtfsRtAlertsEurostar
LabDataRedisredisCacher/gtfsRtAlertsNmbsSncb/en/data/redis/redisCacher/gtfsRtAlertsNmbsSncb
LabDataRedisredisCacher/gtfsRtAlertsStibMivb/en/data/redis/redisCacher/gtfsRtAlertsStibMivb
LabDataRedisredisCacher/gtfsRtAlertsTec/en/data/redis/redisCacher/gtfsRtAlertsTec
LabDataRedisredisCacher/gtfsRtAlertsTecRaw/en/data/redis/redisCacher/gtfsRtAlertsTecRaw
LabDataRedisredisCacher/gtfsRtTripUpdatesDeLijn/en/data/redis/redisCacher/gtfsRtTripUpdatesDeLijn
LabDataRedisredisCacher/gtfsRtTripUpdatesEurostar/en/data/redis/redisCacher/gtfsRtTripUpdatesEurostar
LabDataRedisredisCacher/gtfsRtTripUpdatesNmbsSncb/en/data/redis/redisCacher/gtfsRtTripUpdatesNmbsSncb
LabDataRedisredisCacher/gtfsRtTripUpdatesStibMivb/en/data/redis/redisCacher/gtfsRtTripUpdatesStibMivb
LabDataRedisredisCacher/gtfsRtTripUpdatesTec/en/data/redis/redisCacher/gtfsRtTripUpdatesTec
LabDataRedisredisCacher/gtfsRtTripUpdatesDeLijnRaw/en/data/redis/redisCacher/gtfsRtTripUpdatesDeLijnRaw
LabDataRedisredisCacher/gtfsRtTripUpdatesEurostarRaw/en/data/redis/redisCacher/gtfsRtTripUpdatesEurostarRaw
LabDataRedisredisCacher/gtfsRtTripUpdatesNmbsSncbRaw/en/data/redis/redisCacher/gtfsRtTripUpdatesNmbsSncbRaw
LabDataRedisredisCacher/gtfsRtTripUpdatesTecRaw/en/data/redis/redisCacher/gtfsRtTripUpdatesTecRaw
LabDataRedisredisCacher/pointsByLinesStibMivb/en/data/redis/redisCacher/pointsByLinesStibMivb
LabDataRedisredisCacher/waitingTimesStibMivb/en/data/redis/redisCacher/waitingTimesStibMivb
LabSearch/en/search
LabPlan/en/planner-home
LabPlanPlanner v1/en/planner-tec-app
LabPlanPlanner v2/en/planner-v2-bmc
LabPlanOTP 1/en/planner
LabPlanOTP 2/en/planner-v2
LabPlanOTP 2.9/en/planner-otp-2-9
LabPlanPlanner v2.1/en/planner-v2-1
LabPlanPlanner v2.1 preset/en/planner-v2-1-preset
LabPlanMigrating to OTP2/en/planner/migrating-to-otp2
LabPlanMigrating to OTP2Get started/en/planner/migrating-to-otp2
LabMigrating to OTP2Get startedHow the engine thinks/en/planner/migrating-to-otp2
LabMigrating to OTP2Get startedTwo recipes/en/planner/migrating-to-otp2
LabMigrating to OTP2Get startedOn these pages/en/planner/migrating-to-otp2
LabPlanMigrating to OTP2Mode selection UX/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UXSettings/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UXUser preferences/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UXRestrict modes/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UX1 Monomodal presets/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UX2 Multimodal presets/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UX3 Simple select, progressive reveal/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UX4 Rent and park toggles/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UX5 Rent or park switches/en/planner/migrating-to-otp2/mode-ux
LabMigrating to OTP2Mode selection UXPros & cons/en/planner/migrating-to-otp2/mode-ux
LabPlanMigrating to OTP2Query matrix/en/planner/migrating-to-otp2/query-matrix
LabPlanMigrating to OTP2Coverage review/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewStreet modes/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewTransit-vs-street filter/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewUnset slots/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewTransit modes/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewWho: operators, lines/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewWhere: places/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewWhen: time/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewTraveller profile/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewIntents check/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewPreset recipe/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewOne cursor, many queries/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewBudget per shape/en/planner/migrating-to-otp2/coverage-review
LabMigrating to OTP2Coverage reviewRecommendations/en/planner/migrating-to-otp2/coverage-review
LabMap/en/map
LabMapMap Base/en/map/base-light
LabMapMap Transit/en/map/transit-light
LabMapMap Transit (via proxy)/en/map/transit-light-proxy
LabDeparture/en/departure
LabDoc/en/doc
LabDocPlanner Cases Library/en/doc/planner-lib
LabDocUi/Ux/en/doc/user-interface
LabDocUi/UxPlanner/en/doc/user-interface/planner/
LabUi/UxPlannerInstant | Duration | Distance/en/doc/user-interface/planner/
LabUi/UxPlannerItinerary Time Overview/en/doc/user-interface/planner/
LabUi/UxPlannerLeg Overview/en/doc/user-interface/planner/
LabUi/UxPlannerItinerary Overview/en/doc/user-interface/planner/
LabUi/UxPlannerLeg Detail/en/doc/user-interface/planner/
LabDocUi/UxDeparture/en/doc/user-interface/departure
LabDocUi/UxInput/en/doc/user-interface/input/
LabHelp/en/help
ApifromPlaceAPI params in:BMC v1BMC v2OTP 1OTP 2OTP 2.9ApitoPlaceAPI params in:BMC v1BMC v2OTP 1OTP 2OTP 2.9ApiarriveByAPI params in:BMC v1BMC v2OTP 1OTP 2OTP 2.9ApitimeAPI params in:BMC v1BMC v2OTP 1ApibannedAgenciesAPI params in:BMC v1OTP 1OTP 2OTP 2.9ApibannedRoutesAPI params in:BMC v1OTP 1ApiwalkSpeedAPI params in:BMC v1OTP 1OTP 2OTP 2.9ApiwheelchairAPI params in:BMC v1BMC v2OTP 1ApinumItinerariesAPI params in:BMC v1BMC v2OTP 1ApimodeAPI params in:BMC v1BMC v2OTP 1ApialightSlackAPI params in:BMC v1BMC v2OTP 1ApiboardSlackAPI params in:BMC v1BMC v2OTP 1ApilocaleAPI params in:BMC v1OTP 1ApishowIntermediateStopsAPI params in:BMC v1OTP 1ApimaxWalkDistanceAPI params in:BMC v1OTP 1ApistartTransitStopIdAPI params in:BMC v1OTP 1ApistartTransitTripIdAPI params in:BMC v1OTP 1ApiwaitReluctanceAPI params in:BMC v1OTP 1OTP 2OTP 2.9ApiwalkReluctanceAPI params in:BMC v1OTP 1OTP 2OTP 2.9ApiroutingProfileAPI params in:BMC v2ApipageCursorsAPI params in:BMC v2ApibannedStopsAPI params in:OTP 1ApibannedStopsHardAPI params in:OTP 1ApibannedTripsAPI params in:OTP 1ApibatchAPI params in:OTP 1ApibikeBoardCostAPI params in:OTP 1ApibikeSpeedAPI params in:OTP 1OTP 2OTP 2.9ApibikeSwitchCostAPI params in:OTP 1ApidisableAlertFilteringAPI params in:OTP 1ApidisableRemainingWeightHeuristicAPI params in:OTP 1ApigeoidElevationAPI params in:OTP 1ApiignoreRealtimeUpdatesAPI params in:OTP 1OTP 2OTP 2.9ApiintermediatePlacesAPI params in:OTP 1ApimaxHoursAPI params in:OTP 1ApimaxPreTransitTimeAPI params in:OTP 1ApimaxTransfersAPI params in:OTP 1ApiminTransferTimeAPI params in:OTP 1ApinonpreferredTransferPenaltyAPI params in:OTP 1ApioptimizeAPI params in:OTP 1ApiotherThanPreferredRoutesPenaltyAPI params in:OTP 1ApipreferredAgenciesAPI params in:OTP 1ApipreferredRoutesAPI params in:OTP 1ApireverseOptimizeOnTheFlyAPI params in:OTP 1ApitransferPenaltyAPI params in:OTP 1OTP 2OTP 2.9ApitriangleSafetyFactorAPI params in:OTP 1ApitriangleSlopeFactorAPI params in:OTP 1ApitriangleTimeFactorAPI params in:OTP 1ApiunpreferredAgenciesAPI params in:OTP 1ApiunpreferredRoutesAPI params in:OTP 1ApiuseRequestedDateTimeInMaxHoursAPI params in:OTP 1ApiwaitAtBeginningFactorAPI params in:OTP 1ApiwalkBoardCostAPI params in:OTP 1ApitimetableViewAPI params in:OTP 2OTP 2.9ApinumTripPatternsAPI params in:OTP 2OTP 2.9ApimaximumTransfersAPI params in:OTP 2OTP 2.9ApimaximumAdditionalTransfersAPI params in:OTP 2OTP 2.9ApisearchWindowAPI params in:OTP 2OTP 2.9ApiincludePlannedCancellationsAPI params in:OTP 2OTP 2.9ApiincludeRealtimeCancellationsAPI params in:OTP 2OTP 2.9ApitransferSlackAPI params in:OTP 2OTP 2.9ApiboardSlackDefaultAPI params in:OTP 2OTP 2.9ApiboardSlackListAPI params in:OTP 2OTP 2.9ApialightSlackDefaultAPI params in:OTP 2OTP 2.9ApialightSlackListAPI params in:OTP 2OTP 2.9ApibicycleOptimisationMethodAPI params in:OTP 2OTP 2.9ApitransportModesAPI params in:OTP 2OTP 2.9ApiegressModeAPI params in:OTP 2OTP 2.9ApidirectModeAPI params in:OTP 2OTP 2.9ApiaccessModeAPI params in:OTP 2OTP 2.9ApiitineraryFiltersDebugAPI params in:OTP 2OTP 2.9ApipageCursorAPI params in:OTP 2OTP 2.9ApiwheelchairAccessibleAPI params in:OTP 2OTP 2.9ApitriangleFactorsSafetyAPI params in:OTP 2OTP 2.9ApitriangleFactorsSlopeAPI params in:OTP 2OTP 2.9ApitriangleFactorsTimeAPI params in:OTP 2OTP 2.9ApiuseBikeRentalAvailabilityInformationAPI params in:OTP 2OTP 2.9ApimaxDirectDurationForModeAPI params in:OTP 2OTP 2.9ApifiltersAPI params in:OTP 2OTP 2.9ApirelaxTransitGroupPriorityAPI params in:OTP 2OTP 2.9ApiwhiteListedAgenciesAPI params in:ApibannedLinesAPI params in:ApiwhiteListedLinesAPI params in:ApibannedServiceJourneysAPI params in:ApibannedRentalNetworksAPI params in:ApiwhiteListedRentalNetworksAPI params in:ApipassThroughPointsAPI params in:ApirelaxTransitGroupPriorityRatioAPI params in:ApirelaxTransitGroupPriorityConstantAPI params in:ApimaxAccessEgressDurationForModeAPI params in:ApimodePresetAPI params in:
DocOTP 1Full Open API Documentation
DocOTP 2Full Open API Documentation
DocOTP 2.9Full Open API Documentation
DocPlanner v1Full Open API Documentation
DocPlanner v2Full Open API Documentation
DocPlanner v2.1Full Open API Documentation
DocPlanner v2.1 presetFull Open API Documentation