Skip to content

Repository files navigation

FlyWind

Real-Time Aircraft Tracking with Wind Visualization

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.


Demo Features

  • 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

System Architecture

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


Project Structure

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


Data Pipeline

Wind Data

Wind velocity data is obtained from the NOAA Global Forecast System (GFS).

Steps:

  1. Download GRIB2 weather data using curl
  2. Extract wind components (UGRD / VGRD)
  3. Convert GRIB2 → JSON using grib2json
  4. Serve the processed dataset to the frontend visualization

The converted data is used by the Leaflet Velocity plugin to render animated wind vectors.


Aircraft Data

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.


Map Visualization

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.


Technologies Used

Backend

  • Python
  • OpenSky API
  • NOAA GFS Weather Model
  • GRIB2 weather data
  • grib2json

Frontend

  • HTML
  • CSS
  • JavaScript
  • Leaflet.js
  • Leaflet Velocity
  • jQuery

Data Sources

  • OpenSky Network
  • NOAA NOMADS Weather Data

Installation

Clone the repository

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages