Tactical Moving Map
LOE 2 — Aviation-optimized tactical display with React, MapLibre GL JS, and offline-first DDIL resilience
The Tactical Moving Map (map-app/) is OMEN’s primary presentation layer — an aviation-optimized display that renders the common operating picture for aircrew in contested environments.
Technology Stack
| Technology | Role |
|---|---|
| React + TypeScript | UI framework and type safety |
| MapLibre GL JS | Open-source map rendering engine (vector tiles) |
| CesiumJS | Optional 3D terrain rendering for enhanced SA |
| Vite | Build tool and development server |
| Vitest | Unit and component testing |
| Playwright | End-to-end testing |
Application Structure
Core Functions
Tactical Moving Map Display
The primary map view supports:
- Pan / zoom / rotate with smooth inertial scrolling
- Terrain rendering with hill shading and elevation data
- Airspace boundary visualization (classes, restricted, prohibited, danger areas)
- Route layer with waypoints, checkpoints, and ETAs
- Dynamic decluttering based on zoom level and cognitive load
Mission Overlays
Layered on top of the base map:
| Overlay | Data Source | Visual |
|---|---|---|
| Blue-Force Tracks | CoT via CAL | MIL-STD-2525D symbols with callsign labels |
| Threat Corridors | Threat entities from engine | Shaded engagement envelopes |
| Checkpoints | Route waypoints | Numbered markers with ETA |
| NOTAMs | NOTAM adapter | Boundary polygons with info popups |
| Sensor Readings | SensorReading entities | Color-coded indicator dots |
Alert Panel
Decision support for aircrew:
- Route deviation warnings — alerting when aircraft position diverges from planned route
- Airspace infringement alerts — proximity to restricted/prohibited areas
- Threat proximity alerts — tracks entering threat engagement envelopes
- Connectivity state indicators — DDIL status (connected, degraded, offline)
- Energy state display — battery SOC, thermal state, current operating mode
Offline Display
Pre-loaded mission package renderer for fully disconnected operation:
- Signed mission packages with manifest verification
- Pre-cached vector tiles and terrain data
- Route, threat, airspace, and NOTAM overlays from package JSON files
- Staleness indicators when data exceeds TTL
UX Design Principles
Cockpit Optimization
- Bright-light readability — high-contrast themes suitable for direct sunlight cockpit conditions
- Glove-friendly interaction — oversized touch targets (minimum 44×44px), simplified gestures
- Reduced cognitive load — progressive disclosure, automatic decluttering at high zoom
- Color safety — WCAG AA contrast ratios, colorblind-safe palettes, no color-only indicators
Map Decluttering
Under stress conditions, the map automatically:
- Reduces label density based on zoom level
- Clusters proximate tracks into group indicators
- Hides non-critical overlays (e.g., expired NOTAMs)
- Elevates threat and proximity alerts to top visual priority
Accessibility
- Keyboard navigation for all interactive elements
- Screen reader compatible alert notifications
- High-contrast mode toggle
- Configurable text scaling
Integration Points
Engine Event Bus
The map-app connects to the Mission Engine via the event bus to receive:
track_update— blue-force and other track position updatesproximity_alert— threat proximity notifications from plugins like BFT Monitorconnectivity_state_change— DDIL connectivity transitionsenergy_state_change— energy mode transitions
React Hooks
Custom hooks bridge the map-app to OMEN services:
| Hook | Purpose |
|---|---|
useMap |
MapLibre GL JS instance management and layer control |
useEngine |
Event bus subscription and plugin state |
useEnergy |
Energy state monitoring and mode display |
useMission |
Mission package loading and route management |
Mission Packages
Offline mission data is packaged as:
Performance Targets
| Metric | Target |
|---|---|
| Initial map render | < 2 seconds |
| Track update → visual refresh | < 200ms |
| Overlay toggle | < 100ms |
| Offline package load | < 5 seconds |
| Memory footprint (with 500 tracks) | < 256 MB |
| Frame rate during pan/zoom | ≥ 30 FPS |
Current Status
Phase 2 (LOE 2): Architecture complete, component structure defined. React/MapLibre implementation is in active development. The
map-app/directory contains the planned structure and README with full requirements.
Implemented:
- Application architecture and component hierarchy
- TypeScript type definitions (via SDK)
- Build tooling configuration (Vite)
- Testing framework setup (Vitest + Playwright)
In Progress:
- Map rendering components
- Layer implementations
- Event bus hook integration
- Offline mission package loader