A comprehensive web application for tracking high-altitude weather balloons using APRS (Automatic Packet Reporting System) with intelligent landing point prediction.
- Real-time APRS Tracking: Live tracking of balloon and chaser positions via APRS.fi API
- KML Prediction Integration: Upload and overlay flight predictions from ppredictor
- Intelligent Landing Calculation: Automatically calculates new landing points when burst is detected
- Burst Detection: Automatic detection of balloon burst based on altitude changes
- Chaser Tracking: Track multiple chaser vehicles simultaneously
- Interactive Map: Real-time map display with flight paths, markers, and search areas
- Responsive Design: Works on desktop and mobile devices
- Node.js (v14 or higher)
- npm or yarn
- APRS.fi API key (free registration at https://aprs.fi/)
-
Clone the repository
git clone <repository-url> cd balloontrack
-
Install backend dependencies
npm install
-
Install frontend dependencies
cd client npm install cd ..
-
Set up environment variables Create a
.env
file in the root directory:APRS_API_KEY=your_aprs_api_key_here PORT=3001
-
Build the frontend
cd client npm run build cd ..
-
Start the server
npm start
-
Access the application Open your browser and navigate to
http://localhost:3001
-
Set Balloon Callsign
- Open the control panel (gear icon)
- Enter your balloon's APRS callsign
- The system will automatically start tracking
-
Add Chaser Callsigns
- Go to the "Chasers" tab in the control panel
- Add callsigns for vehicles chasing the balloon
- Each chaser will appear on the map with their current position
-
Upload KML Prediction
- Go to the "Configuration" tab
- Drag and drop your ppredictor KML file
- The prediction path, burst point, and landing point will be displayed
- Real-time Updates: Data updates every 30 seconds automatically
- Flight Path: Balloon's complete flight path is displayed as a red line
- Prediction Overlay: Predicted flight path shown as a blue dashed line
- Burst Detection: Automatically detects when balloon bursts (below 5km altitude)
- Landing Calculation: When burst is detected, calculates new landing point using prediction metrics
- Balloon Marker: Red balloon icon showing current position
- Chaser Markers: Blue star icons for each chaser
- Burst Point: Orange burst icon for actual burst location
- Landing Points: Green landing icons for predicted and calculated landing sites
- Search Radius: Green circle around calculated landing point (5km radius)
GET /api/config
- Get current configurationPUT /api/config
- Update configurationPUT /api/config/balloon-callsign
- Set balloon callsignPOST /api/config/chaser-callsigns
- Add chaser callsignDELETE /api/config/chaser-callsigns/:callsign
- Remove chaser callsign
GET /api/tracking
- Get current tracking dataPOST /api/tracking/reset
- Reset tracking dataGET /api/tracking/balloon/history
- Get balloon flight historyGET /api/tracking/chasers
- Get chaser dataGET /api/tracking/prediction
- Get prediction dataGET /api/tracking/burst
- Get burst information
POST /api/kml/upload
- Upload KML prediction filePOST /api/kml/content
- Upload KML content directlyGET /api/kml
- Get current prediction dataPOST /api/kml/calculate-metrics
- Calculate prediction metricsPOST /api/kml/calculate-landing
- Calculate new landing pointDELETE /api/kml
- Clear prediction data
- Express.js: Web server and API framework
- Socket.IO: Real-time communication
- APRS.fi API: Balloon and chaser position data
- KML Parser: XML parsing for prediction files
- Geographic Calculations: Distance, bearing, and destination point calculations
- React: User interface framework
- Leaflet: Interactive mapping
- Socket.IO Client: Real-time updates
- React Dropzone: File upload interface
- Lucide React: Icon library
- Calculate distance and bearing between predicted burst and landing points
- When actual burst is detected, apply the same distance and bearing from actual burst location
- Result provides highly accurate landing prediction
- Monitors altitude changes
- Detects burst when altitude drops below threshold (default: 5km)
- Confirms burst with descending altitude pattern
- Burst Detection Altitude: Altitude threshold for burst detection (default: 5000m)
- Update Interval: How often to fetch new APRS data (default: 30 seconds)
- Max History Length: Maximum number of historical points to keep (default: 1000)
-
No balloon data appearing
- Verify APRS API key is set correctly
- Check balloon callsign is correct
- Ensure balloon is transmitting APRS data
-
KML file not loading
- Verify file is valid KML format
- Check file size (max 10MB)
- Ensure file contains burst and landing point placemarks
-
Chasers not appearing
- Verify chaser callsigns are correct
- Check chasers are transmitting APRS data
- Ensure chasers are within APRS.fi coverage area
- Go to https://aprs.fi/
- Create a free account
- Go to your account settings
- Generate an API key
- Add the key to your
.env
file
-
Start backend in development mode
npm run dev
-
Start frontend in development mode
cd client npm start
-
Access frontend Navigate to
http://localhost:3000
balloontrack/
├── server.js # Main server file
├── services/ # Backend services
│ ├── aprsService.js # APRS data fetching
│ ├── kmlService.js # KML parsing and calculations
│ ├── trackingService.js # Real-time tracking logic
│ └── configService.js # Configuration management
├── routes/ # API routes
│ ├── config.js # Configuration endpoints
│ ├── tracking.js # Tracking endpoints
│ └── kml.js # KML processing endpoints
├── client/ # React frontend
│ ├── src/
│ │ ├── App.js # Main application component
│ │ ├── components/ # React components
│ │ └── index.js # React entry point
│ └── public/ # Static assets
└── data/ # Configuration storage
MIT License - see LICENSE file for details
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
For issues and questions:
- Check the troubleshooting section
- Review the API documentation
- Open an issue on GitHub
Happy Balloon Tracking! 🎈