Where the data comes from
Sources
All data comes from public APIs and official GTFS files published by transport authorities. The service guesses nothing and fills in nothing with estimates of its own — it shows what the source publishes and marks whatever cannot be treated as a measurement.
| data | city | notes |
|---|---|---|
| departures from stops | Gdańsk, Gdynia | the basis of the board |
| shared ZTM/ZKM stop poles | Gdańsk, Gdynia | the official mapping combines both feeds into one board |
| vehicle GPS positions | Gdańsk, Gdynia | Gdańsk reports speed and schedule deviation; Gdynia (GTFS-RT) only location — we derive speed and heading ourselves, see below |
| fleet database (equipment) | Gdańsk only | air conditioning, low floor, ramp, bike racks |
| timetables and routes (GTFS) | Gdańsk, Gdynia | this is how we know where a line starts and ends |
route geometry on the map (GTFS shapes.txt) | Gdańsk, Gdynia | the road centreline as drawn by the operator |
| railway GTFS timetable | SKM Tricity | scheduled train departures |
| railway delays and platforms | PKP PLK (open railway data) | SKM, POLREGIO and PKP Intercity; delay in minutes, platform, cancelled passage |
| bus GTFS timetable | Słupsk, Tczew | scheduled departures, without an open real-time API |
Scheduled timetable sources are PKP SKM in Tricity, the Municipal Infrastructure Authority in Słupsk, and Tczew City Hall (Tczew Public Transport). These boards are always marked “scheduled”, so a timetable is never presented as a live measurement.
Railway boards KEEP the “scheduled” marking even though we have been adding PKP PLK data to them since 9 September 2026: the timetable is still the basis, and movement information arrives where it exists. The three states mean different things and must not be conflated: “on time” means the carrier confirmed the passage with no deviation, “+N min” is a measured delay, and no annotation means we do not know — usually because the train has not departed yet. For a train already running we show the last measurement from its route (the tooltip names the station), not a forecast for your station — because these data contain no forecast.
How often
Departures for the stops you are looking at refresh every few seconds. Separately from that, the service observes every stop in both cities, so that the statistics do not depend on what somebody happens to be looking at — otherwise a line's history would begin the moment the first user opened it.
The stop catalogue and the official ZTM/ZKM shared-pole mapping are checked hourly. A shared pole is displayed once and its board combines departures from both authorities. A temporary mapping-file failure does not split pairs that have already been recognised.
The SKM GTFS is downloaded daily. The official Słupsk and Tczew pages change the ZIP address when a timetable changes, so every 12 hours the service reads each “Open data” page again, discovers the current file, and rebuilds the index. A failed update retains the last valid timetable and is retried with increasing backoff.
How fresh the vehicle position on the map is
Under the vehicle map you will see “measured N s ago”, and that number almost never drops to zero. This is not a fault — it is made up of three stretches, and the first two are not on our side:
- Vehicle → city. The timestamp on a position is already a few seconds older than
the moment it is published.
- Published every ~22 s. The city puts out a new snapshot roughly every twenty-two
seconds. Between publications a newer position simply does not exist — nobody has it.
- Our fetch and display. This is the stretch we try to keep as short as possible:
instead of polling at a fixed rhythm and landing on a random phase of the city's cycle, we schedule each fetch for just after the expected publication. Measured against the live source: on arrival a snapshot is 6 s old instead of 18 s (median), with the same number of requests.
In practice this means the number under the map circles roughly between 11 and 33 seconds and grows by a second every second until a new snapshot arrives. We show it plainly rather than rounding it to “just now”, because for a vehicle doing 50 km/h twenty seconds is a quarter of a kilometre — and it is better that this is visible.
Vehicle speed and heading — measurement or estimate
It depends on the city, so we label it plainly.
Gdańsk publishes speed, heading and schedule deviation in its feed. We show those values as they arrive — that is a measurement from the vehicle.
Gdynia publishes location only in GTFS-RT: neither speed nor heading (verified: not one of nearly two hundred records carries those fields). So we compute them from two consecutive positions of the same vehicle — distance travelled over elapsed time. That is an estimate, which is why we print it with a tilde: "~12 km/h". The tilde means "this is what the arithmetic gives", not "this is what the dashboard shows".
Two things worth knowing about that estimate:
- It is an average over roughly a minute, because Gdynia's feed refreshes every
~60 s (Gdańsk every ~22 s). A bus that waited at a stop and a red light and then drove 300 m comes out slower than its speed in motion. The median for moving Gdynia vehicles is about 20 km/h, which is commercial speed rather than instantaneous speed.
- A stop is distinguished from missing data. When a new measurement arrives and the
vehicle has not moved, we show "stopped" — without a tilde, because that is an observation. When the feed repeats the same snapshot (which happens regularly, as we poll more often than it publishes), we keep the last result instead of announcing that the vehicle has halted.
The heading arrow on a Gdynia marker comes from the same arithmetic, so a vehicle gets one only after its second measurement — on the first marker after it appears on the map there is no arrow.
Where the route line on the map comes from
Route geometry is drawn from both cities' shapes.txt — the road centreline as drawn by the operator, not a track derived from vehicle GPS. The difference matters: GPS readings arrive every ~22 s, which at typical speeds puts points a median of 88 m apart, and up to 480 m on fast stretches. A route rebuilt from those points would cut corners exactly where the corner is.
The feed describes every variant of a service separately: a short turn, a night diversion, a run to the depot. Gdańsk has 1353 variants across 97 lines, Gdynia 3101 across 88. We show the longest run in each direction, because it contains the others as its own segments — the question "where does this line go" is about the corridor, not about a single journey.
We draw one line at a time. A map view of 1.8 × 1.2 km in central Gdańsk is crossed by 657 route variants from 49 lines, over 45 thousand points in total. Drawn together they are not a map but a smudge.
What is NOT in the data
A few things checked and confirmed as unavailable:
- Vehicle occupancy — neither the Gdańsk nor the Gdynia data says how many people
are on board. Checked periodically; unchanged so far.
- Driver number — not published. The
vehicleServicefield is a duty number, that
is, an identifier for a transport assignment, not for a person.
- Delays for Gdynia vehicles — Gdynia's GTFS-RT feed carries positions only
(vehiclePositions). There is no counterpart with delays (tripUpdates, alerts) at the analogous addresses, so we show no schedule deviation for Gdynia vehicles. The positions themselves have been on the map since 9 September 2026.
- Ghost runs for Gdynia — Gdynia vehicle positions have been written to the
analytics database since 9 September 2026, but they cannot be tied to a specific departure: departure boards identify a vehicle by an id from the transit API, while the GTFS-RT feed uses the fleet number painted on the bus. Those are two different namespaces, so Gdynia runs stay in the "outside GPS" class — the exception being Gdynia stops served by a Gdańsk vehicle (line 171, for instance). The statistics say so explicitly in their own caveats.
- The GPS section of the statistics describes Gdańsk — the speed of Gdynia vehicles
is our own calculation rather than a measurement, and that feed reports neither signal quality nor a trip identifier. One shared number would average a measurement with an estimate.
Equipment icons
The icons next to a vehicle come from the fleet database and say what the vehicle is fitted with — not whether a given thing is switched on right now. An air-conditioning icon does not mean the air conditioning is running; it means the vehicle has it. That distinction is also spelled out in the tooltip on every icon.