← Back to Zabuscope

About the Data

Last updated: 2026-10-11

Contains information from ADSB.lol, which is made available here under the Open Database License (ODbL) 1.0.

1. Scope

The route lines and the per-route statistics behind them (support, spread, confidence and hourly traffic) shown in Zabuscope for airports that carry the “Aircraft track data © ADSB.lol” credit are a Derivative Database of the ADSB.lol historical data, and so are the flow particles at those airports except where the particle view is built from a different source (in which case the particles are not covered by this page). This derived data is made available under ODbL 1.0. As required by ODbL section 4.6(b), this page describes the method used to make it, including the additional contents that were added. Data for airports without the ADSB.lol credit is not derived from ADSB.lol and is not covered by this page.

2. Source

3. Method

  1. Decoding and legs (scripts/adsblol_history/). Each aircraft’s daily position history is decoded into points (time, latitude, longitude, altitude and altitude type). The history is split into flight legs at the archive’s own new-leg flag or at a reception gap of more than 900 seconds, and legs crossing midnight UTC are joined. Points are not smoothed or invented; missing values stay empty and are flagged.
  2. Airport extraction. A leg is kept for an airport when it comes close to the airport at low altitude. Kept legs are clipped to about 100 to 120 km from the airport reference point.
  3. Arrival / departure and runway (tsukidon2/ingest/taiwan_lol_to_geojson.py). Each leg is classified as an arrival or a departure from its end points. The runway is assigned by matching the airborne points nearest the airport to each runway’s extended centreline (cross-track distance, with a 0.6 km limit). Where runways are close and parallel, departures are assigned from the take-off roll points that lie on the runway pavement. Altitudes are converted from feet to metres.
  4. Lanes, stage 1: groups (tsukidon2/ingest/lane_routes_common.py). Flights are grouped by runway end and phase (arrival or departure). Groups with fewer than 20 flights are not split into lanes. At some airports the groups are first divided into direction flows, using the gaps between the bearings at which flights leave or join the airport area.
  5. Lanes, stage 2: density corridors. For every flight, the local density is the number of flights that pass the same place in the same direction and altitude band, inside the terminal area. Flights are taken in order of their median density, and a flight starts a new corridor when its median distance to every corridor already chosen is more than 1.2 km (non-maximum suppression). A corridor needs a median density of at least 10, or 3% of the group if that is larger. Each flight then joins the nearest corridor if its median distance to it is 1.2 km or less. Lanes with fewer than 10 member flights are not published. Tracks are resampled every 500 m along their length for these measurements (250 m at the airports that use direction flows).
  6. Representative line. Each published line is one real recorded flight from the lane, not an average or a synthetic line. Candidates must pass quality checks: a departure must start within 1.5 km of the runway end below 3,000 ft and keep climbing; an arrival must end within 200 m of the threshold without climbing; tracks that loop back on themselves are rejected. Among the candidates, the flight with the most lane members within 2 km of it along its whole length is chosen (at some airports, the flight with the smallest spread among the 30 densest is chosen). Lines run up to 120 km from the runway. Where the chosen flight has a reception gap (more than 5 km or 8 km depending on the airport), another flight without the gap is chosen, or the line is cut before the first gap that is not a straight segment. A line that lies completely inside another line’s band is merged into it.
  7. Direction groups (tsukidon2/ingest/phase4_direction_groups.py). For the “recommended” display, lines are grouped by their direction (16 compass sectors); lines that stay within 4 km of each other beyond the naming radius are put in the same group.
  8. Support, spread and confidence. At every 500 m station along a line, the number of member flights that reach the station and the 80th-percentile sideways spread of those flights are counted. The confidence colour is computed from these two numbers (a smaller spread and more flights give a higher value). The same numbers set the width and height of the 3D tube.
  9. Time of day. Flights assigned to each route are counted per local hour and divided by the number of recorded days (tsukidon2/ingest/build_route_hourly_traffic.py).
  10. Reference checks. Each line is also measured with our centreline checker (tsukidon2/eval/centerline_verify.py). For lanes with few flights the results are kept as reference values, and lines are reviewed visually before publication.
  11. Flow particles. The particle view replays the extracted legs. Coordinates are rounded to 0.0001° (about 11 m; representative lines keep 0.00001°), altitudes to 10 m, and points closer than 250 m to the previous kept point are dropped (representative lines are not thinned).
  12. Light version for phones. For large airports a light version is made by keeping the same fraction of tracks in every flow and route group, so that the file holds at most 4,000,000 numbers. Every group keeps at least 3 tracks, representative flights are always kept, and the selection is deterministic (ordered by a SHA-256 hash of the track name).

4. Additional contents (not from ADSB.lol)

5. Using this data

If you reuse the ADSB.lol-derived data from this site, keep the ADSB.lol notice above, keep the result under ODbL 1.0 where the licence requires it, and see the full licence text for the details.

6. Contact

Questions about the data: than.heavier_6k@icloud.com