FlyWind is a lightweight aviation visualization system that overlays real-time aircraft telemetry with global wind field data on an interactive map.
The system integrates multiple external data sources and converts them into a format suitable for live visualization. Aircraft positions are retrieved from the OpenSky Network, while atmospheric wind data is obtained from NOAA’s Global Forecast System (GFS). These datasets are processed and displayed using a Leaflet-based web interface.
This project demonstrates a complete data pipeline, from external API ingestion and data transformation to real-time geospatial visualization in the browser.
- Real-time aircraft tracking
- Aircraft metadata display:
- Callsign
- Heading
- Speed (knots)
- Altitude (feet)
- Global wind speed and direction overlay
- Interactive map with zoom and layer controls
- Rotating aircraft markers aligned with heading
- Aircraft data refresh every 10 seconds
NOAA GFS Weather Data (GRIB2) │ │ curl download ▼ getwinddata.py │ │ GRIB2 → JSON conversion │ (grib2json) ▼ winddata.json
OpenSky Network API │ ▼ getaircraftdata.py │ ▼ aircraftdata.json
Backend Controller commence.py │ ├── Runs wind data pipeline ├── Fetches aircraft data periodically └── Starts HTTP server
▼
Frontend Web Application │ ├── index.html ├── script.js └── styles.css
▼
Leaflet Map Visualization │ ├── Wind velocity layer ├── Aircraft markers └── Aircraft information popups
FlyWind/ │ ├── index.html # Web interface and map container ├── script.js # Map logic and aircraft visualization ├── styles.css # UI styling │ ├── getwinddata.py # Downloads and converts NOAA wind data ├── getaircraftdata.py # Retrieves aircraft states from OpenSky ├── commence.py # Orchestrates backend pipeline and HTTP server │ ├── winddata.json # Generated wind velocity dataset ├── aircraftdata.json # Generated aircraft telemetry dataset │ ├── planeicon.png # Aircraft marker icon │ ├── grib2json-* # GRIB → JSON conversion utility └── node_modules # Leaflet plugin dependencies
Wind velocity data is obtained from the NOAA Global Forecast System (GFS).
Steps:
- Download GRIB2 weather data using
curl - Extract wind components (UGRD / VGRD)
- Convert GRIB2 → JSON using
grib2json - Serve the processed dataset to the frontend visualization
The converted data is used by the Leaflet Velocity plugin to render animated wind vectors.
Aircraft telemetry is retrieved from the OpenSky Network API.
Each aircraft state includes:
- Latitude and longitude
- Heading
- Velocity
- Barometric altitude
- Callsign
The data is periodically refreshed and saved to aircraftdata.json for rendering on the map.
The frontend interface is built using Leaflet.js.
Features include:
- OpenStreetMap basemap
- Wind velocity overlay
- Rotating aircraft markers
- Popup aircraft details
- Layer toggles for aircraft and wind data
Aircraft positions are updated every 10 seconds to approximate real-time tracking.
- Python
- OpenSky API
- NOAA GFS Weather Model
- GRIB2 weather data
- grib2json
- HTML
- CSS
- JavaScript
- Leaflet.js
- Leaflet Velocity
- jQuery
- OpenSky Network
- NOAA NOMADS Weather Data
git clone https://github.com/YOUR_USERNAME/FlyWind.git
cd FlyWind
Install Python dependencies
pip install opensky-api
Install frontend dependencies
npm install leaflet leaflet-velocity leaflet-rotatedmarker
Install grib2json
Download or build from:
https://github.com/cambecc/grib2json
Update the path in:
getwinddata.py
to match your local installation.
Running the Project
Start the backend pipeline and HTTP server:
python3 commence.py
This script will:
Download the latest wind dataset
Fetch aircraft telemetry from OpenSky
Start a local HTTP server
Continuously refresh aircraft data every 10 seconds
Open the application in your browser:
http://localhost:8000
Future Improvements
Potential extensions include:
Global aircraft coverage
Historical flight path visualization
Wind-adjusted trajectory prediction
Altitude-layer wind visualization
WebSocket-based streaming instead of polling
GPU-accelerated rendering for large aircraft datasets
Motivation
This project explores how aviation telemetry and atmospheric data can be combined to create a real-time situational awareness visualization tool.
The system demonstrates concepts used in modern flight tracking and aviation analytics platforms, including:
external API ingestion
data transformation pipelines
geospatial visualization
real-time UI updates
License
MIT License