ADS-B Flight Tracking to Parquet Converter
ADS-B (Automatic Dependent Surveillance–Broadcast) is the backbone of modern global aviation tracking. Aircraft continuously broadcast their satellite-derived position, altitude, velocity, and transponder identification over 1090 MHz and 978 MHz RF links.
ADS-B Exchange provides historical trace dumps containing billions of aircraft observation records. However, querying raw monthly archives formatted as deeply nested, multi-gigabyte JSON files creates a massive data processing bottleneck.
adsb_to_parquet is a high-throughput C++ data processing tool designed to parse raw ADS-B trace dumps and stream them directly into columnar Apache Parquet format.
Ingestion & Transformation
Raw transponder transmissions arrive as sparse JSON records with dozens of optional telemetry fields. The parser normalizes and projects these into a strongly typed tabular schema:
- Aircraft Identification: 24-bit ICAO transponder hex address (
hex), registration tail number, operator callsign (flight), and aircraft category. - 3D Spatial Position: WGS-84 latitude, longitude, barometric altitude, and geometric/GPS altitude.
- Kinematics & Dynamics: Ground speed (knots), true track heading angle (degrees), and vertical climb/descent rate (ft/min).
- Avionics State: Transponder squawk code, emergency flags, and Navigation Integrity Category (NIC) parameters.
Why Parquet?
Converting raw ADS-B JSON to Apache Parquet yields immense performance and storage gains:
| Metric | Raw JSON Dumps | Compressed Parquet | Gain |
|---|---|---|---|
| Disk Footprint | ~45 GB / month | ~3.8 GB / month | > 90% reduction |
| Query Speed | Minutes (grep / python) | < 250ms (DuckDB) | ~100x speedup |
| Encoding | Uncompressed Text | Snappy / ZSTD Columnar | Zero-copy vector loads |
Analytics & Trajectory Visualization
With flight records stored in Parquet, analytical queries become trivial using embedded SQL engines like DuckDB:
-- Find all aircraft exceeding 600 knots below 15,000 feet
SELECT hex, flight, MAX(ground_speed) AS max_speed, MIN(alt_baro) AS min_alt
FROM 'flights_2025_12.parquet'
WHERE ground_speed > 600 AND alt_baro < 15000
GROUP BY hex, flight
ORDER BY max_speed DESC;
High-density ADS-B flight trajectories ingested and correlated in tsim across the Gulf Coast and Texas corridor.
The repository also includes py_adsb_converter bindings and adsb_plot.py, enabling rapid geospatial trajectory plots, route mapping, and radar corridor visualization directly in Python.