MapDisplay (Legacy)
Animated tactical map: routes, animated vehicle markers, optional cones of vision, static markers, comms overlay, and timeline playback.
Dashboard generation
| Value | |
|---|---|
| Runner node | dashboard (v1) |
| Frontend | ui/legacy via heat-next (MapDisplay / MapContainer) |
| Legacy API | GET /v1/Map (facade serves stored dashboard output) |
Layout mount identifier
MapDisplay , set on each column in layoutConfiguration:
{ "component": "MapDisplay", "colspan": 12, "marginBottom": 24 }Data payload key
Map , top-level property in the object published by the dashboard node (not MapDisplay).
{
"Map": { "title": "...", "movements": [], "mapConfig": {} },
"dashboardUsers": ["<guid>"]
}Do not confuse with MapTimeline
MapDisplay | MapTimeline | |
|---|---|---|
| Mount id | MapDisplay | MapTimeline |
| Implementation | heat-next MapContainer | Legacy MapWithControls |
| Cones of vision | Yes (yaw / yaws) | No |
Top-level Map object
| Field | Required | Description |
|---|---|---|
title | Yes | Panel title |
movements | Yes | Array of routes / vehicles |
mapConfig | No | Merged over defaults (see below) |
mapStats | No | Stats cards below the map |
isSymbolToggle | No | Enable symbol toggle UI |
movements[] entry
| Field | Required | Description |
|---|---|---|
name | Yes | Route label (e.g. crew name) |
movement | Yes | Time-ordered points |
markers | No | Static or time-gated icons |
comms | No | Comms on/off windows |
Movement point (movement[])
| Field | Required | Description |
|---|---|---|
latitude, longitude | Yes* | WGS84 strings (*or x/y with pixel config) |
x, y | No | Pixel coords when pixelPositioning: true |
heading | Yes | Vehicle body heading (degrees) |
yaw | No | Single cone heading (degrees) |
yaws | No | Multiple cone headings on one vehicle |
capturedDate | Yes | ISO timestamp for playback |
speed | No | Used for speed-coloured polylines |
Multiple turrets on one vehicle: use yaws on each point, e.g. "yaws": ["120", "45", "270"].
Multiple vehicles: separate objects in movements[].
Static markers[]
| Field | Description |
|---|---|
id | Icon id (Friendly, Hostile, Target, …) |
latitude, longitude or x, y | Position |
capturedDate | Omit for permanent markers |
comms[]
| Field | Description |
|---|---|
onDate, offDate | ISO range when comms icon is shown |
mapConfig
Merged with defaults in ui/dashboard (MapConfig.ts). Common fields:
| Field | Default | Description |
|---|---|---|
mapURL | Mapbox URL | Tile layer |
zoom, minZoom, maxZoom | 18, 5, 18 | Zoom limits |
showMarkerCones | true | Draw cones when yaw / yaws present |
markerConeColors | [] | Per-movement, per-cone fill overrides (rgba or hex) |
markerConeAngles | [] | Per-movement, per-cone aperture in degrees (smaller = narrower; omit entry for default ~64° path) |
unityHeading | false | Unity-style heading rotation |
markerType | "car" | "car", "circle", or arrow |
polyLineColors | ["#0B5370", …] | Route / marker colours by movement index |
startMarkerFillColor | #81842C | Start waypoint fill |
endMarkerFillColor | #C13D40 | End waypoint fill |
startMarkerStrokeColor | "white" | Start ring; use "transparent" to hide |
endMarkerStrokeColor | "white" | End ring; use "transparent" to hide |
pixelPositioning | false | Use x/y + originX/originY |
originX, originY | 0 | Pixel origin |
enableSpeedColors | false | Colour polylines by speed blocks |
markerAnimationThreshold | 13 | Min metres between animation steps |
Full list: ui/dashboard/src/types/molecules/map.types.ts (MapConfigProps).
markerConeColors
Outer array index = movement index in movements[]. Inner array index = cone index (matches yaws order). Empty inner array uses default cone fill.
"markerConeColors": [
["rgba(141,34,96,0.5)", "rgba(0,150,200,0.5)", "rgba(255,200,0,0.5)"],
[]
]markerConeAngles
Same indexing as markerConeColors. Each value is the full cone aperture in degrees. Smaller numbers produce a narrower cone; larger numbers widen it. Omit a cone entry (or use an empty inner array) to keep the built-in default path (~64°).
"markerConeAngles": [
[60, 30],
[]
]Examples
Minimal (single route, single cone)
{
"Map": {
"title": "Exercise map",
"movements": [
{
"name": "Blue 1",
"movement": [
{
"latitude": "51.21431",
"longitude": "-1.83710",
"heading": "45",
"yaw": "25",
"speed": "2",
"capturedDate": "2025-05-08T11:56:40.029Z"
},
{
"latitude": "51.21450",
"longitude": "-1.83700",
"heading": "60",
"yaw": "35",
"speed": "2",
"capturedDate": "2025-05-08T11:56:42.029Z"
}
],
"markers": []
}
],
"mapConfig": {
"showMarkerCones": true
}
},
"dashboardUsers": []
}Layout:
{
"layoutConfiguration": [
{
"cols": [{ "component": "MapDisplay", "colspan": 12, "marginBottom": 24 }]
}
]
}Multi-cone + custom colours + hidden start/end stroke
{
"Map": {
"title": "EWAR overview",
"movements": [
{
"name": "Vehicle 1",
"movement": [
{
"latitude": "51.21431",
"longitude": "-1.83710",
"heading": "45",
"yaws": ["25", "90", "180"],
"speed": "2",
"capturedDate": "2025-05-08T11:56:40.029Z"
}
],
"markers": []
}
],
"mapConfig": {
"showMarkerCones": true,
"markerConeColors": [
["rgba(141,34,96,0.5)", "rgba(0,150,200,0.5)", "rgba(255,200,0,0.5)"]
],
"startMarkerStrokeColor": "transparent",
"endMarkerStrokeColor": "transparent"
}
}
}Behaviour notes
yawonly: one cone per vehicle (unchanged from earlier releases).yaws: multiple cones at the animated marker position; each value is a heading in degrees.- Playback: driven by
capturedDateon movement points and the map playback control. - heat-next: after changing
ui/dashboardmap code, rebuild the dashboard library and run legacyprepare:heat-nextsoui/legacypicks up changes.
Related
- MapDisplay (Next) , v2 data-service wiring
- Legacy components index
- Dashboard Tools runner