How live public transport reaches the map
From the vehicle to the marker on your screen: which open feeds OVatlas reads, how often positions refresh, and why a trip sometimes disappears.
Every vehicle reports its own trip
Almost every vehicle in Dutch public transport keeps a running account of its own trip. A bus, tram or metro sends out short messages as it goes — arrived at a stop, departed, under way — and each message carries the vehicle's coordinates, the trip it is running, and how far ahead of or behind its own timetable it is. That message format is called KV6, and it is open data: operators publish it through the NDOV loket, the national counter for open transit data. Trains travel a separate path: NS train positions come from the NS and NDOV train feeds.
Open here means genuinely open. There is no contract, no commercial licence and no private arrangement between OVatlas and those messages; they are the same open feeds that other national transit services build on. That cuts both ways. The good half: whatever an operator shows the whole country, OVatlas can show too. The awkward half: whatever an operator does not publish does not exist as far as the map is concerned.
From feed to marker
One part of OVatlas listens to those feeds all day. It takes in the incoming messages, matches them against the national timetable — which line is this, which direction, which stop comes next — and keeps track of where each vehicle last reported itself. Your browser does not poll for that picture over and over; it receives it as a continuous stream, so the moment a new position arrives the marker on your screen moves with it. In practice that works out to a refresh every few seconds.
What you are watching is therefore neither an animation nor a guess at where a bus ought to be by now. Every marker sits at the place that vehicle last reported. Tap one and you get the line number, the destination, the next stop and the delay the vehicle itself is reporting. The departure times you see when you open a stop come from the same feeds, but they are worked out separately: a planned time from the timetable, corrected by the reported deviation, fetched as its own list rather than arriving on the stream of positions. Small differences between the two views are therefore normal — a bus running a shade late can still read as on time on the map while the stop panel already shows a minute. It is also why an operator can publish departures without publishing positions at all.
Why a trip sometimes disappears
Not every vehicle reports reliably. Equipment fails, a trip is run at short notice by a different vehicle that was never signed on, or the messages stop arriving for some other reason. As long as they keep coming, the marker keeps moving. When they stop, the position goes stale and the vehicle is removed from the map rather than left standing somewhere it has long since left. A marker that is missing is more honest than a marker that is wrong.
There is a second reason something may be absent: not every operator publishes positions at all. An operator that only shares departure times per stop still shows up at the stop, delay included, but not as a moving marker between stops. All NS trains and the vehicles of the operators that do publish positions are there.
What it is good for
The plain benefit of live positions is that you stop guessing. Standing at a stop with a bus a few minutes overdue, you can see whether it is three streets away or still at the far end of the line. Open a trip and the arrival time at your stop counts down live, tracking what is actually happening rather than what the timetable promised. If someone is picking you up, that saves a round of phone calls.
What the map cannot do is know the future. The delay you read is the situation now, as reported by the vehicle; whatever happens further along the route is not in it. There is a separate guide for reading that number, and another for the full list of data sources behind the map.