Commit Graph

4 Commits

Author SHA1 Message Date
denshooter
0b70891bca Phase 2: MapLibre GL with OpenSeaMap navigation
- Integrated MapLibre GL for professional maritime mapping
- Combined OSM base maps with OpenSeaMap layer for nautical overlays
  * Seamarks, buoys, channels, and depth information
  * Fully styled with MapLibre-compatible tiles

- Created NavigationMap component with:
  * Real-time ship position marker with heading indicator
  * Automatic centering and smooth flyTo animations
  * Waypoint display with current waypoint highlighting
  * Ship track visualization (last 500 points, dashed line)
  * Route polyline showing waypoints

- Professional map controls:
  * Zoom in/out buttons with smooth animations
  * Center-on-ship button for quick navigation
  * Info panel showing current position, heading, speed, distance
  * Glassmorphic info panel with dark/light mode support

- Enhanced SignalK mock:
  * Added trackPoints array to record ship movement
  * Automatically maintains last 500 points for performance
  * Integrated with map for visual track history

- Updated Navigation page to use new map
- Build: 68 modules, 1.24 MB (343 KB gzipped)
- Hot module reloading working smoothly

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-27 15:00:17 +01:00
denshooter
19b2c30a0a Implement realistic ship routing with waypoint navigation
Major feature: Ship now follows a real nautical track around Bornholm Island

Waypoint System:
- 6-waypoint loop: Kiel → Bornholm North → Rønne → Bornholm East →
  Bornholm South → Gdansk → back to Kiel
- Great circle bearing calculation (haversine formula)
- Automatic waypoint progression when within 0.1 nm
- Route loops continuously

Navigation Algorithm:
- Calculates bearing to next waypoint using geodetic formulas
- Distance tracking in nautical miles
- Speed adjustment based on waypoint proximity:
  * 6 knots cruising (far)
  * 5-5.5 knots approaching
  * Gradual slowdown in final 0.5 nm
- Heading includes wind/current drift (±2-5°)
- Realistic position updates every 1 second
- Rudder angle reflects heading correction needed

UI Enhancements - Navigation Page:
- Canvas-based chart showing:
  * Ship position (triangle) with heading
  * Ship track (cyan line, 500-point history)
  * Waypoints (numbered circles)
  * Current waypoint highlighted
- Waypoint Info Box:
  * Current waypoint name
  * Distance to next waypoint
  * Visual route indicator (6 waypoint tags)
- Full NMEA data table with route fields

Code Changes:
- signalk.mock.js: Complete rewrite with:
  * WAYPOINTS constant (6 locations)
  * Bearing/distance calculation functions
  * Waypoint navigation logic
  * Dynamic speed adjustment
  * Heading drift simulation

- ChartPlaceholder.jsx: New canvas-based map:
  * Ship position and track rendering
  * Waypoint visualization
  * Real-time position updates
  * Legend and coordinates display

- InstrumentPanel.jsx: Enhanced with:
  * Waypoint routing box
  * Current waypoint display
  * Distance to waypoint (highlighted)
  * Visual route progression

- useNMEA.js: Extended to include:
  * distanceToWaypoint state
  * Snapshot integration for waypoint data

Documentation:
- Added SHIP_ROUTING.md with complete guide:
  * How waypoint navigation works
  * Customization instructions
  * Example scenarios (Baltic, Mediterranean, coastal)
  * Testing procedures

Performance:
- 1 Hz update rate (1 second intervals)
- Canvas renders at 60 FPS
- Track history: 500 points (~8 minutes)
- Memory: <100KB for routing system

Compatibility:
- Works with mock mode (VITE_USE_MOCK=true)
- Ready for real SignalK server integration
- NMEA2000 compliant data format

The ship now runs a realistic, continuous nautical route with proper
bearing calculations and waypoint navigation!

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-27 14:35:38 +01:00
denshooter
2ed05dee2f Fix zones loading and mock data system
Critical fixes:
- Zones now load correctly: fixed snapcast mock to emit { result: buildStatus() }
- Mock data now enabled by default: VITE_USE_MOCK=true in docker-compose.dev.yml
- Added initial status broadcast and periodic updates (5s) in snapcast mock

NMEA2000 data enhancements:
- Added realistic fuel rate monitoring (10-15 L/hr)
- Added alternator output (30-60A)
- Added engine hours counter (continuous)
- Added tank level monitoring (fresh water, waste water, bilge)
- Added depth alarm threshold
- All values use correct SI units (radians, m/s, Kelvin)
- Data changes smoothly with random walk algorithm (no jumps)
- Position advances based on heading and speed

Documentation:
- Added MOCK_DATA_EXPLANATION.md with complete guide
- Explains NMEA 2000 standard
- Documents all 3 mock data sources
- Includes troubleshooting and customization guide

Changes:
- dashboard/src/mock/snapcast.mock.js: Fixed event format and added periodic updates
- dashboard/src/mock/signalk.mock.js: Enhanced with 7 new realistic parameters
- docker-compose.dev.yml: Set VITE_USE_MOCK=true for dev mode
- MOCK_DATA_EXPLANATION.md: New comprehensive documentation

Now zones load on app startup and all mock data is realistic and working!

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-03-27 14:07:30 +01:00
denshooter
77123a0df5 Move project from bordanlage/ to repo root
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 14:31:08 +01:00