AirCPA is an offline analysis tool for deterministic air traffic conflict detection based on Closest Point of Approach (CPA) prediction using historic ADS-B state vector data.
The tool is intended for research, education, and exploratory safety analysis. It does not perform real-time monitoring or operational air traffic control functions.
A public demo of AirCPA is available at
👉 https://aircpa.streamlit.app/
AirCPA performs deterministic conflict analysis using a Closest Point of Approach (CPA) model under simplified kinematic assumptions.
For each snapshot of ADS-B state vectors:
- Aircraft motion is assumed to be linear and time-invariant over the selected look-ahead horizon.
- Relative horizontal motion between aircraft pairs is analyzed to compute the time and distance at CPA.
- A conflict is detected if both:
- horizontal separation at CPA falls below a configurable threshold (e.g. 5 NM), and
- vertical separation at CPA falls below a configurable threshold (e.g. 1000 ft).
- Horizontal and vertical separation are evaluated independently.
The analysis is fully deterministic and does not model aircraft intent, flight plans, sensor uncertainty, or nonlinear motion. A local Cartesian (flat-earth) approximation is used for geometric computations.
AirCPA uses ADS-B state vector data from the OpenSky Network.
The included example setup analyzes traffic over Germany for one hour (15:00–16:00 UTC) on 2022-06-27, chosen to provide a compact yet sufficiently dense traffic sample for demonstration purposes.
Due to OpenSky data licensing restrictions, raw ADS-B data is not redistributed via this repository. For local analysis, users must download the data themselves and agree to the OpenSky Network General Terms of Use & Data License Agreement.
For public demonstrations, AirCPA uses a synthetic ADS-B dataset that follows the OpenSky schema but does not contain any real aircraft data.
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtFrom the data/ directory:
cd data
./get_data.shThis script downloads the OpenSky dataset, extracts it, and runs a preprocessing step to filter the data for the example scenario.
From the project root:
streamlit run app.pyThe application will open in your browser.
The source code of this project is licensed under the MIT License.
See the LICENSE file for details.
This project uses ADS-B state vector data from the OpenSky Network.
The raw data is not redistributed via this repository. Users must download the data themselves and agree to the OpenSky Network General Terms of Use & Data License Agreement before using the data.
See data/LICENSE_OPENSKY.txt for the full license text.