diff --git a/docs/features/trail-line-visualization.md b/docs/features/trail-line-visualization.md new file mode 100644 index 0000000..6e8eb76 --- /dev/null +++ b/docs/features/trail-line-visualization.md @@ -0,0 +1,64 @@ +# Trail Line Visualization + +## Overview + +When tracking a specific callsign, the map displays a trail line (polyline) connecting all position points chronologically at zoom levels ≤ 8, instead of showing a heat map. + +## User Experience + +### Viewing Trail Lines + +1. Search for and track a callsign using the search box +2. Zoom out to level 8 or below +3. A blue trail line appears connecting all positions in chronological order +4. The trail line respects the "Trail Duration" setting (1 hour, 6 hours, etc.) + +### Zoom Behavior + +- **Zoom ≤ 8 + Tracking:** Trail line visible +- **Zoom > 8 + Tracking:** Individual markers visible +- **Zoom ≤ 8 + No tracking:** Heat map visible +- **Zoom > 8 + No tracking:** Individual markers visible + +## Technical Details + +### Backend + +- `DisplayManager.send_trail_line_for_tracked_callsign/1` - Generates trail line data +- `DisplayManager.handle_zoom_threshold_crossing/2` - Handles mode switching +- Trail line data filtered by `packet_age_threshold` (trail duration setting) +- Points sorted chronologically by `received_at` timestamp + +### Frontend + +- `MapHook.trailLine` - Leaflet Polyline instance +- Event: `show_trail_line` - Display trail line +- Event: `clear_trail_line` - Remove trail line +- Trail line cleared when switching to heat map or markers + +### Styling + +- Color: `#3B82F6` (blue-500) +- Weight: 3 pixels +- Opacity: 0.8 +- Line Cap/Join: round +- Interactive: true + +## Continuous Path Connection + +Trail lines connect **all points regardless of distance** between them. This is important for: + +- High-altitude balloons traveling long distances +- Aircraft on cross-country flights +- Stations with intermittent coverage gaps +- Showing complete journey paths + +No distance-based filtering or gap detection is applied. The trail always shows the complete chronological path within the trail duration. + +## Future Enhancements + +- Direction arrows along the trail +- Time-based gradient coloring (old → new) +- Click on trail to show packet details +- Line simplification for very long trails +- Multiple callsign tracking with different colors