Compare commits

...

4 commits

Author SHA1 Message Date
275a346e85 feat: Implement comprehensive signal quality visualization and enhanced trail effects
Adds advanced visual feedback system for 3D radar aircraft with real-time signal quality indicators:

Signal Quality Visualization:
- Opacity mapping based on signal strength (-60 to -5 dBFS range)
- Emissive glow intensity reflects signal quality (Excellent/Good/Fair/Poor)
- Multi-source data indicators (small spheres for aircraft with multiple receivers)
- Dynamic signal strength analysis from aircraft sources data
- Real-time updates with changing signal conditions

Enhanced Trail System:
- Gradient coloring with age-based fading (30% to 100% intensity)
- Aircraft type-based trail colors (cyan=helicopter, blue=heavy, yellow=light, teal=medium)
- Signal quality affects trail brightness and visibility
- Custom BufferGeometry with per-vertex colors
- Memory-efficient geometry disposal and rebuilding

Technical Improvements:
- Modular signal data extraction from aircraft sources
- Linear signal strength to opacity mapping
- Quality multiplier system for visual feedback
- Proper Three.js BufferAttribute management
- Dynamic visual updates synchronized with aircraft data

Visual Results:
- Strong signals = bright, opaque aircraft with vivid trails
- Weak signals = dim, transparent aircraft with faded trails
- Multi-source aircraft display small indicator spheres
- Trail colors match aircraft types for consistency
- Smooth gradient effects enhance flight path visualization

Addresses core signal quality and trail enhancement requirements from issue #42.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:29:53 +02:00
51a74ac85e feat: Implement aircraft type differentiation and movement indicators
Adds comprehensive visual differentiation system for 3D radar aircraft:

Aircraft Type Differentiation:
- Different 3D geometries for aircraft categories (helicopter, heavy, medium, light)
- Color coding: cyan=helicopter, blue=heavy, green=medium, yellow=light
- Size scaling based on aircraft weight class
- Emergency override: red color for emergency squawks and alerts

Movement Indicators:
- Aircraft orientation based on track/heading data
- Climb/descent indicators with 500 fpm threshold
- Green upward arrows for climbing aircraft
- Red downward arrows for descending aircraft
- Dynamic indicator management (add/remove based on vertical rate)

Technical Implementation:
- Modular aircraft geometry creation system
- Visual type detection based on Category field
- Enhanced material system with emissive properties
- Proper cleanup of climb/descent indicators
- Updated selection system to restore original aircraft colors

Addresses core visual enhancement requirements from issue #42.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:22:14 +02:00
c6aab821a3 feat: Enhance flight trails with historical altitude data and fix label display
- Extend PositionPoint struct to include altitude field in position history
- Update position history population to store altitude with each position
- Fix 3D aircraft labels to show GroundSpeed instead of undefined Speed field
- Enable true 3D flight trails with proper altitude visualization
- Improve trail accuracy by using historical altitude data per position

Resolves trails showing flat paths and labels showing N/A for speed.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:08:43 +02:00
fec2f111a1 feat: Complete 3D radar enhancements with labels, interactions, and trails
Implements comprehensive 3D radar view enhancements:

- Fixed map tile alignment using proper Web Mercator projection calculations
- Added dynamic aircraft labels showing callsign, altitude, and speed
- Implemented click interactions with raycasting for aircraft selection
- Created flight trail visualization with toggle functionality
- Enhanced visual feedback with selection highlighting
- Improved tile positioning with precise geographic calculations

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-01 21:02:22 +02:00
3 changed files with 929 additions and 38 deletions

View file

@ -413,6 +413,7 @@
<div class="radar3d-controls"> <div class="radar3d-controls">
<button id="radar3d-reset" disabled>Reset View</button> <button id="radar3d-reset" disabled>Reset View</button>
<button id="radar3d-auto-rotate" disabled>Auto Rotate</button> <button id="radar3d-auto-rotate" disabled>Auto Rotate</button>
<button id="radar3d-trails" disabled>Show Trails</button>
<label> <label>
<input type="range" id="radar3d-range" min="10" max="500" value="100" disabled> <input type="range" id="radar3d-range" min="10" max="500" value="100" disabled>
Range: <span id="radar3d-range-value">100</span> km Range: <span id="radar3d-range-value">100</span> km

File diff suppressed because it is too large Load diff

View file

@ -227,10 +227,11 @@ type SourceData struct {
// PositionPoint represents a timestamped position update in aircraft history. // PositionPoint represents a timestamped position update in aircraft history.
// Used to build position trails for visualization and track analysis. // Used to build position trails for visualization and track analysis.
type PositionPoint struct { type PositionPoint struct {
Time time.Time `json:"time"` // Timestamp when position was received Time time.Time `json:"time"` // Timestamp when position was received
Latitude float64 `json:"lat"` // Latitude in decimal degrees Latitude float64 `json:"lat"` // Latitude in decimal degrees
Longitude float64 `json:"lon"` // Longitude in decimal degrees Longitude float64 `json:"lon"` // Longitude in decimal degrees
Source string `json:"source"` // Source that provided this position Altitude int `json:"altitude"` // Altitude in feet (0 if unknown)
Source string `json:"source"` // Source that provided this position
} }
// SignalPoint represents a timestamped signal strength measurement. // SignalPoint represents a timestamped signal strength measurement.
@ -655,6 +656,7 @@ func (m *Merger) updateHistories(state *AircraftState, aircraft *modes.Aircraft,
Time: timestamp, Time: timestamp,
Latitude: aircraft.Latitude, Latitude: aircraft.Latitude,
Longitude: aircraft.Longitude, Longitude: aircraft.Longitude,
Altitude: aircraft.Altitude, // Include altitude in position history
Source: sourceID, Source: sourceID,
}) })
} }