Contains modified Copernicus Sentinel data
Contents
Context
The platform simulates missions and visualises command and control across a whole country, and it runs with no network at all. Its core is runtime generation: real-time 2D tactical drawing drives a 3D terrain engine, so formations drawn on the 2D map play out as those formations in 3D, on a timeline.
Constraints
- Fully offline. It is delivered into high-security sites with no network, so every map, terrain, search and routing source ships with the system.
- Country scale. Nationwide terrain, imagery, roads and urban data, prepared by the country-scale data pipeline.
- Real time. The 3D scene has to hold frame rate while a scenario plays.
- Many users, different clearances. Several authors and viewers work on one scenario, and sharing follows clearance.
- Hardware in scope. The servers and projection hardware are part of the delivery.
- Team. A 10-person team.
Architecture
Components and flows
Components
- 2D authoring
- 2D tactical map (OpenLayers → MapLibre, MIL-STD-2525, MGRS)
- Timeline
- 3D scene
- Procedural 3D generator (glTF and 3D Tiles at runtime)
- 3D terrain engine (CesiumJS, deck.gl)
- Services
- Scenario service (Node.js, event-driven)
- Offline data
- PostgreSQL / PostGIS
- Tiles, terrain, search, routing
Flows
- 2D tactical map to Procedural 3D generator (drawings)
- Procedural 3D generator to 3D terrain engine (3D features)
- Timeline to 3D terrain engine (entities)
- 2D tactical map to Scenario service (layers)
- Scenario service to PostgreSQL / PostGIS
- Tiles, terrain, search, routing to 3D terrain engine
- Tiles, terrain, search, routing to 2D tactical map
The 2D map is the authoring surface. Everything in 3D is generated from it at runtime.
- 2D tactical map (OpenLayers, moving to MapLibre, in Vue.js): MIL-STD-2525 symbology and QGIS-class layer management in the browser, including XYZ, tile and image layers, ordering, merging, import and export, MGRS and coordinate grids, switchable coordinate reference systems and measurement tools.
- Procedural 3D generator: turns 100+ feature types drawn in 2D into terrain-following glTF and 3D Tiles at runtime. A drawn road becomes a textured road; a drawn polygon becomes buildings, forest or parkland.
- Executable symbology on a timeline: a unit drawn in 2D becomes its entities in 3D (a single-soldier symbol a soldier, an armour symbol its formation of tanks) and moves along an editable timeline, following the terrain.
- 3D terrain engine (CesiumJS, with deck.gl): renders the scene the timeline drives.
- Scenario service (Node.js, event-driven, on PostgreSQL and PostGIS): multi-user scenarios, each author's own layers, per-user attribution of every drawing, and an admin panel that decides who may see or edit each saved scenario.
- Offline data: terrain, imagery, roads, place search and routing from the country-scale pipeline, served on site.
- Delivery: Docker and Kubernetes on air-gapped servers, with the projection hardware specified as part of the system.
Terrain MISSION SCENARIO
- VIEWSHED
- DRAWN AREA
- DRAWN ROAD
- GENERATED AT RUNTIME
- UNIT FRAMES
- MAP GRID
Illustrative concept, not a product screenshot. Terrain: public Terrarium elevation tiles over the Karakoram, chosen for relief.
Key decisions
-
- Chose
- Generating the 3D scene at runtime from the 2D drawing
- Over
- Authoring 3D scenes separately for each scenario
- Because
- Every scenario had to stay editable on the 2D map and play in 3D straight away, with no modelling step in between.
-
- Chose
- Sharing each saved scenario by clearance, decided in an admin panel
- Over
- Layers that every user on the system can see
- Because
- Authors and viewers on the same system hold different clearances.
My role
I was the solution architect and engineering lead for a 10-person team. I owned the requirements, the architecture and the technology decisions; set the architecture documentation from system design down to code-level standards; assigned the work, set the timelines and reviewed the code; and specified the servers and projection hardware the platform was delivered on. I also worked hands-on in the production code.
Outcome
The platform was delivered end to end into high-security offline sites, from the servers to the projection hardware. It generates 100+ feature types from the 2D drawing at runtime and sustains 30+ FPS in 3D.
Related capabilities
- MapLibre drawing and measuring
- On-the-fly MGRS and H3 grid tiles
- DEM contours
- MIL-STD-2525 / APP-6 symbology
- Offline tile and terrain sources
- Built in Vue 3 and TypeScript
Stack
Each links to its entry on the stack page
Ask about this
How does a drawing on the 2D map become a 3D scene in the mission platform?
Answers come from the content on this site.
The chat needs JavaScript. Without it, ask through the contact page.