TrackViewer

Handleiding

Bijgewerkt 9 september 2026

Over Realtime Treinen

Realtime Treinen biedt een live overzicht van alle treinen in Nederland. Posities, vertragingen, uitval en statistieken worden continu verzameld uit officiële databronnen en in real-time weergegeven op een interactieve kaart en dashboards.

De website is volledig gratis en zonder registratie te gebruiken. Enkele geavanceerde functies zoals de reisplanner vereisen een inlog. Het doel is om reizigers, treinliefhebbers en onderzoekers inzicht te geven in de actuele status en historische prestaties van het Nederlandse spoornetwerk.

Databronnen

NDOV Loket (BISON) ZeroMQ
Landelijke database voor openbaar vervoer data, beheerd door NDOV Loket. Via het ZeroMQ-protocol worden real-time berichten ontvangen:
  • KV6 — Voertuigposities: GPS-coördinaten, ritinformatie en stiptheid van bussen, trams en metro's
  • KV15 — Verstoringen en reisinformatie: actuele storingen en omleidingen
  • KV17 — Dienstregeling-mutaties: wijzigingen in de geplande dienstregeling
NStreinposities Treinposities
Positie, snelheid en richting van treinen. Nieuwe berichten komen niet ieder animatieframe binnen: de kaart beweegt tussen metingen op basis van snelheid en spoorgeometrie. BISON KV6 is niet de bron voor deze NS-treinposities.
NS InfoPlus DVS ZeroMQ
Vertrek- en aankomstinformatie per station voor treinen. Bevat geplande en actuele vertrektijden, vertragingen in seconden, perronwijzigingen, omleidingen en routewijzigingen.
NS Reisinformatie API REST API
Officiële API van NS voor uitvalmeldingen, actuele verstoringen en materieelsamenstelling. Gegevens worden periodiek of op aanvraag opgehaald en kort bewaard om onnodige API-verzoeken te voorkomen. Niet ieder veld is voor iedere trein beschikbaar.
Verwerking
Alle data wordt ontvangen via ZeroMQ of REST API, geparsed uit XML/JSON, opgeslagen in PostgreSQL (historische data) en Redis (real-time cache), en beschikbaar gesteld via een REST API die de frontend voedt.

Berekeningen

Vertrekbeeld en punctualiteit per 5 minuten
De hoofdteller, vervoerderstabel en grafiek gebruiken dezelfde vertrekmomenten per station: afgelopen twee uur en het lopende vijfminutentijdvak. Op tijd gemeld, vertraagd en vervallen zijn afzonderlijke categorieën. Een vervallen vertrek met nul seconden vertraging telt als uitval, nooit als op tijd. Onbekende vertraging telt niet als nul. Dezelfde trein kan op meerdere stations voorkomen.
Percentage = op tijd gemeld / (op tijd gemeld + vertraagd + vervallen) × 100%
Sprinters: minder dan 3 minuten; overige typen: minder dan 5 minuten vertraging. Nul vertraging of een actuele tijd is geen bewijs dat de trein daadwerkelijk vertrokken is. Dit is ons vertrekbeeld, geen officiële reizigerspunctualiteit. De grafiek gebruikt opgeslagen DVS-statussen; NS-uitval vult ontbrekende stationvertrekken aan. Minder dan 10 bekende waarnemingen levert geen percentage. Het lopende tijdvak is voorlopig.
Dagkaarten tellen unieke treinnummers in meldingen voor vandaag, inclusief aangekondigde ritten. Gedeeltelijke of volledige uitval telt één keer per treinnummer. Dit zijn geen aantallen daadwerkelijk gereden treinen. De daguitval wordt niet gemengd met het twee-uurspercentage. Ontbrekende bronberichten kunnen de telling nog beïnvloeden.
Vertraging
Het verschil in seconden tussen de geplande vertrektijd en de werkelijke vertrektijd, zoals gemeld door NS InfoPlus DVS. Per station wordt een apart vertragingscijfer ontvangen.
De actuele gemiddelde vertraging gebruikt de beschikbare vertrekberichten in het meetvenster. De dagteller voor vertraagde treinen gebruikt juist de maximale vertraging per uniek treinnummer. Geplande of verwachte tijden zijn geen garantie dat vertrek al heeft plaatsgevonden.
Geannuleerde treinen
Uitval wordt herkend via expliciete vervallen-vertrekmeldingen in DVS en uitvalmeldingen uit de NS Reisinformatie API. Een gewone vertrekstatus of nul vertraging is geen uitvalbewijs.
In de meldingenlijst worden meldingen van hetzelfde treinnummer per dag samengevoegd; alle gemelde stations blijven zichtbaar. De dagteller en redenen van uitval tellen ieder treinnummer maximaal één keer per Nederlandse kalenderdag.
Annuleringsredenen
Bij elke annulering levert de NS een of meerdere tekstuele berichten. Het systeem classificeert deze automatisch in categorieën via keyword-matching:
Defect materieel Defect spoor Seinstoring Wisselstoring Aanrijding / Persoon Werkzaamheden Weer Overwegstoring Infrastructuur Staking Dienstregelingswijziging Onbekende oorzaak
Berichten die niet in een van deze categorieën passen, worden geclassificeerd als "Overig".
Treinen vandaag
Het aantal unieke treinnummers in vertrek- en uitvalmeldingen voor vandaag, inclusief aangekondigde ritten. Dit bewijst niet dat die treinen gereden hebben. Meerdere stations met hetzelfde treinnummer tellen op de dagkaart één keer.
Actieve treinen (radar)
De radar toont beschikbare treinposities uit NStreinposities en, waar beschikbaar, regionale schattingen. De legenda toont de treinen binnen de actieve selectie. Bronouderdom en beschikbaarheid kunnen dit aantal beïnvloeden; het is geen volledige dienstregeling.

Radar, volgen en kaartinstellingen

Kaart kiezen
Kies bij de kaartinstellingen voor automatisch, licht, donker of Luchtfoto. In Focus staat de kaartkeuze bij de volgbediening; op de radar bij de kaartinstellingen. De keuze wordt op dit apparaat onthouden. Treinen en spoorlijnen blijven over de achtergrond zichtbaar. Luchtfoto’s zijn achtergrondbeelden en niet live; ze kunnen ouder zijn dan de spoorindeling.
Eén trein volgen, verkeer eromheen zien
Open een trein in Focus om de camera automatisch mee te laten bewegen. Andere treinen in de buurt blijven zichtbaar. Door de kaart zelf te verschuiven kun je rondkijken; met Volgen keer je terug. Ingezoomd verschijnen bakken en dakdetails. Bij onbekende samenstelling wordt tijdelijk een neutrale trein getekend met ‘Mat. Onbekend’; de werkelijke lengte kan afwijken.
Labels naar wens
In de labelinstellingen van radar en Focus kies je welke informatie verschijnt en in welke volgorde: bijvoorbeeld snelheid, vertraging, volgend station en station met vertrekcountdown. Stationsnamen kunnen voluit of afgekort. Een countdown en spoornummer verschijnen alleen als de beschikbare haltegegevens dat ondersteunen. Een driehoek bij de snelheid geeft optrekken of afremmen aan.
Hoe actueel is een positie?
Het gekleurde statusicoon onderscheidt recente broninformatie, een geschatte positie en een positie zonder recent signaal. Bekijk de toelichting bij het label voor de laatste ontvangen positie. Door animatie en schatting kan de getekende locatie afwijken van de laatste GPS-meting. Dakdetails en bakken zijn een visualisatie, geen bewijs van het exacte spoor of de werkelijke positie van iedere bak.
Treinstilstanden
De actuele pagina richt zich op gemeten stilstanden buiten stations en emplacementen, met kaart, snelheidsgrafiek en duur. Archief en records staan apart. Detectie vereist recente posities; ontbrekende GPS is geen bewijs van stilstand. Mijn treinen volgen vereist een account.
Beheer en metingen
Beheerders zien via Meer → Beheer de submenu’s Gebruikers, Performance en Bezoekcijfers. Performance toont servercijfers per uur en een anonieme steekproef van browserlaadtijden. Er worden daarvoor geen accountgegevens, IP-adressen of URL-zoekparameters opgeslagen. Deze metingen worden maximaal zeven dagen bewaard en respecteren Do Not Track.

Technologie

Backend
Python 3.12 · FastAPI
SQLAlchemy (async) + asyncpg
Database
PostgreSQL 16
TimescaleDB extensie voor time-series
Cache
Redis
Real-time state: posities, vertragingen
Data transport
ZeroMQ
NDOV besteffort protocol
Deployment
Docker Compose
Hetzner Cloud (Duitsland)
Frontend
Vanilla HTML/CSS/JS
Leaflet.js voor kaarten

Bronvermelding

Bronnen en onafhankelijkheid

NS · NDOV Loket

NS levert onder meer reisinformatie en materieelgegevens via zijn API’s. Treinpositie- en InfoPlus-berichten worden via NDOV ontvangen. TrackViewer verwerkt en visualiseert deze gegevens zelfstandig; bronvermelding betekent geen samenwerking of goedkeuring door een vervoerder.

Namen worden als bronvermelding gebruikt. De NS API-voorwaarden staan het NS-logo in deze applicatie niet toe.

NS API-voorwaarden

Contact

Een vraag, idee of fout gevonden? Neem contact op met Stijn.

stijn@pointiful.com