Modern multi-source ADS-B web interface with real-time aircraft tracking, signal analysis, and 3D visualization. Connects to multiple dump1090 receivers via Beast TCP streams, serves responsive web UI with Leaflet maps, aircraft tables, and statistics dashboards. Single Go binary deployment.
  • Go 61.8%
  • JavaScript 25.8%
  • HTML 7.2%
  • CSS 3%
  • Shell 1.6%
  • Other 0.5%
Find a file
Ole-Morten Duesund f364ffe061 Fix CPR zone ambiguity causing aircraft to appear 100km away from actual position
PROBLEM:
- Aircraft were appearing ~100km from receiver when actually ~5km away
- CPR (Compact Position Reporting) algorithm has zone ambiguity issue
- Without reference position, aircraft can appear in wrong 6-degree zones

SOLUTION:
- Add receiver reference position to CPR decoder for zone resolution
- Modified NewDecoder() to accept reference latitude/longitude parameters
- Implement distance-based zone selection (choose solution closest to receiver)
- Updated all decoder instantiations to pass receiver coordinates

TECHNICAL CHANGES:
- decoder.go: Add refLatitude/refLongitude fields and zone ambiguity resolution
- beast.go: Pass source coordinates to NewDecoder()
- beast-dump/main.go: Use default coordinates (0,0) for command-line tool
- merger.go: Add position update debugging for verification
- JavaScript: Add coordinate validation and update logging

RESULT:
- Aircraft now appear at correct distances from receiver
- CPR zone selection based on proximity to known receiver location
- Resolves fundamental ADS-B position accuracy issue

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-24 14:40:36 +02:00
assets Fix CPR zone ambiguity causing aircraft to appear 100km away from actual position 2025-08-24 14:40:36 +02:00
cmd/beast-dump Fix CPR zone ambiguity causing aircraft to appear 100km away from actual position 2025-08-24 14:40:36 +02:00
debian Complete multi-source Beast format implementation 2025-08-23 23:51:37 +02:00
docs Fix CPR zone ambiguity causing aircraft to appear 100km away from actual position 2025-08-24 14:40:36 +02:00
internal Fix CPR zone ambiguity causing aircraft to appear 100km away from actual position 2025-08-24 14:40:36 +02:00
scripts Complete multi-source Beast format implementation 2025-08-23 23:51:37 +02:00
.gitignore Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
config.example.json Create asset module and add origin configuration 2025-08-24 00:19:00 +02:00
config.json.example Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
docker-compose.yml Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
Dockerfile Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
go.mod Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
go.sum Initial implementation of SkyView - ADS-B aircraft tracker 2025-08-23 22:09:37 +02:00
main Fix aircraft markers not updating positions in real-time 2025-08-24 14:04:17 +02:00
Makefile Complete multi-source Beast format implementation 2025-08-23 23:51:37 +02:00
old.json Complete multi-source Beast format implementation 2025-08-23 23:51:37 +02:00
README.md Clean up, format, lint and document entire codebase 2025-08-24 10:29:25 +02:00

SkyView - Multi-Source ADS-B Aircraft Tracker

A high-performance, multi-source ADS-B aircraft tracking application that connects to multiple dump1090 Beast format TCP streams and provides a modern web interface with advanced visualization capabilities.

Features

Multi-Source Data Fusion

  • Beast Binary Format: Native support for dump1090 Beast format (port 30005)
  • Multiple Receivers: Connect to unlimited dump1090 sources simultaneously
  • Intelligent Merging: Smart data fusion with signal strength-based source selection
  • Real-time Processing: High-performance concurrent message processing

Advanced Web Interface

  • Interactive Maps: Leaflet.js-based mapping with aircraft tracking
  • Real-time Updates: WebSocket-powered live data streaming
  • Mobile Responsive: Optimized for desktop, tablet, and mobile devices
  • Multi-view Dashboard: Map, Table, Statistics, Coverage, and 3D Radar views

Professional Visualization

  • Signal Analysis: Signal strength heatmaps and coverage analysis
  • Range Circles: Configurable range rings for each receiver
  • Flight Trails: Historical aircraft movement tracking
  • 3D Radar View: Three.js-powered 3D visualization (optional)
  • Statistics Dashboard: Real-time charts and metrics
  • Smart Origin: Auto-calculated map center based on receiver locations
  • Map Controls: Center on aircraft, reset to origin, toggle overlays

Aircraft Data

  • Complete Mode S Decoding: Position, velocity, altitude, heading
  • Aircraft Identification: Callsign, category, country, registration
  • Multi-source Tracking: Signal strength from each receiver
  • Historical Data: Position history and trail visualization

🚀 Quick Start

Using Command Line

# Single source
./skyview -sources "primary:Local:localhost:30005:51.47:-0.46"

# Multiple sources  
./skyview -sources "site1:North:192.168.1.100:30005:51.50:-0.46,site2:South:192.168.1.101:30005:51.44:-0.46"

# Using configuration file
./skyview -config config.json

Using Debian Package

# Install
sudo dpkg -i skyview_2.0.0_amd64.deb

# Configure 
sudo nano /etc/skyview/config.json

# Start service
sudo systemctl start skyview
sudo systemctl enable skyview

⚙️ Configuration

Configuration File Structure

{
  "server": {
    "host": "",
    "port": 8080
  },
  "sources": [
    {
      "id": "primary",
      "name": "Primary Receiver",
      "host": "localhost",
      "port": 30005,
      "latitude": 51.4700,
      "longitude": -0.4600,
      "altitude": 50.0,
      "enabled": true
    }
  ],
  "settings": {
    "history_limit": 1000,
    "stale_timeout": 60,
    "update_rate": 1
  },
  "origin": {
    "latitude": 51.4700,
    "longitude": -0.4600,
    "name": "Custom Origin"
  }
}

Command Line Options

skyview [options]

Options:
  -config string
        Configuration file path
  -server string
        Server address (default ":8080")  
  -sources string
        Comma-separated Beast sources (id:name:host:port:lat:lon)
  -verbose
        Enable verbose logging

🗺️ Web Interface

Access the web interface at http://localhost:8080

Views Available:

  • Map View: Interactive aircraft tracking with receiver locations
  • Table View: Sortable aircraft data with multi-source information
  • Statistics: Real-time metrics and historical charts
  • Coverage: Signal strength analysis and heatmaps
  • 3D Radar: Three-dimensional aircraft visualization

🔧 Building

Prerequisites

  • Go 1.21 or later
  • Make

Build Commands

make build          # Build binary
make deb            # Create Debian package  
make docker-build   # Build Docker image
make test           # Run tests
make clean          # Clean artifacts

🐳 Docker

# Build
make docker-build

# Run  
docker run -p 8080:8080 -v $(pwd)/config.json:/app/config.json skyview

📊 API Reference

REST Endpoints

  • GET /api/aircraft - All aircraft data
  • GET /api/aircraft/{icao} - Individual aircraft details
  • GET /api/sources - Data source information
  • GET /api/stats - System statistics
  • GET /api/origin - Map origin configuration
  • GET /api/coverage/{sourceId} - Coverage analysis
  • GET /api/heatmap/{sourceId} - Signal heatmap

WebSocket

  • ws://localhost:8080/ws - Real-time updates

🛠️ Development

Project Structure

skyview/
├── cmd/skyview/           # Main application
├── assets/                # Embedded static web assets
├── internal/
│   ├── beast/             # Beast format parser
│   ├── modes/             # Mode S decoder  
│   ├── merger/            # Multi-source merger
│   ├── client/            # Beast TCP clients
│   └── server/            # HTTP/WebSocket server
├── debian/                # Debian packaging
└── scripts/               # Build scripts

Development Commands

make dev            # Run in development mode
make format         # Format code
make lint           # Run linter  
make check          # Run all checks

📦 Deployment

Systemd Service (Debian/Ubuntu)

# Install package
sudo dpkg -i skyview_2.0.0_amd64.deb

# Configure sources in /etc/skyview/config.json
# Start service
sudo systemctl start skyview
sudo systemctl enable skyview

# Check status
sudo systemctl status skyview
sudo journalctl -u skyview -f

Manual Installation

# Build binary
make build

# Create user and directories
sudo useradd -r -s /bin/false skyview
sudo mkdir -p /etc/skyview /var/lib/skyview /var/log/skyview
sudo chown skyview:skyview /var/lib/skyview /var/log/skyview

# Install binary and config
sudo cp build/skyview /usr/bin/
sudo cp config.example.json /etc/skyview/config.json
sudo chown root:skyview /etc/skyview/config.json
sudo chmod 640 /etc/skyview/config.json

# Create systemd service
sudo cp debian/lib/systemd/system/skyview.service /lib/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable skyview
sudo systemctl start skyview

🔒 Security

The application includes security hardening:

  • Runs as unprivileged user
  • Restricted filesystem access
  • Network isolation where possible
  • Systemd security features enabled

📄 License

MIT License - see LICENSE file for details.

🤝 Contributing

  1. Fork the repository
  2. Create feature branch
  3. Make changes with tests
  4. Submit pull request

🆘 Support


SkyView - Professional multi-source ADS-B tracking with Beast format support.