DIU OMEN Solicitation License

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

map-app/ ├── src/ │ ├── components/ # React components (Map, Overlays, StatusBar, AlertPanel) │ ├── layers/ # Map layer implementations (threats, tracks, airspace) │ ├── hooks/ # React hooks (useMap, useEngine, useEnergy, useMission) │ ├── types/ # TypeScript types (imported from SDK) │ └── utils/ # Utilities (geospatial math, formatting, coordinate transforms) ├── public/ # Static assets (icons, symbology, offline tiles) ├── tests/ # Unit and integration tests └── e2e/ # Playwright end-to-end tests

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:

  1. Reduces label density based on zoom level
  2. Clusters proximate tracks into group indicators
  3. Hides non-critical overlays (e.g., expired NOTAMs)
  4. 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 updates
  • proximity_alert — threat proximity notifications from plugins like BFT Monitor
  • connectivity_state_change — DDIL connectivity transitions
  • energy_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:

mission-package/ ├── manifest.json # Package metadata, checksums, signature, expiry ├── route.json # Route waypoints ├── threats.json # Threat entities ├── airspace.json # Airspace restrictions ├── notams.json # NOTAMs └── bluforce.json # Blue-force tracks (initial positions)

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