Some visualizations animate, pulse, and flash. If you're sensitive to motion or flashing, turn on Reduce motion in your system settings.

poopdeck.gl

Netherlands — National Transit Ballet

Moving heads · schedule expansion

Every scheduled train, bus, tram, metro and ferry in the Netherlands for one Friday — 121,031 journeys moving on the national timetable.

About this demo

A whole country’s public transport as one animated timetable, at national scale. Every vehicle scheduled for Friday 2026-07-03 is a dot moving along its real route: intercity trains across the Randstad, night buses after midnight, ferries to the Wadden islands.

No vehicle positions are recorded — the static GTFS feed is the data. The build expands the service calendar to one concrete day, then places each trip along its published route shape by matching the stop-time distances (shape_dist_traveled), interpolating per-vertex timestamps between consecutive stops (dwell included). 97.5% of trips carry exact shape-distance timing; the rest (shapeless trips) fall back to stop-to-stop lines.

The archive holds all 121,031 trips with per-vertex timing; AnimatedTripHeadsLayer interpolates every active vehicle per frame. Zoom into Amsterdam or Utrecht Centraal at rush hour for dense platform activity, or zoom out for the whole network.

How it was built
stt-generate gtfs --feed data/gtfs-nl/feed --date 20260703 \
--output examples/showcase/public/data/gtfs-nl

Download + unzip https://gtfs.ovapi.nl/nl/gtfs-nl.zip first; the feed refreshes daily and only covers its published window, so pick a --date inside it. The build prints the exact archive time span to paste into the dataset’s timeRange.

Full recipes for every dataset live in the data-generation guide.

Related demos