entity-state-to-flightpath
entity-state-to-flightpath turns entity-state records into one or more flightpath channels. The FlightPath widget draws them as 3D trajectories.
Entity-state records are the JSON records array that hydrate-protobuf-v2 emits with extractionTarget: EntityState. entity-state-to-records emits the same shape from DIS traffic. The node reads each entity’s position through JMESPath (a query language for JSON) expressions and emits one point per frame.
The output is a data service payload. It is not a map track. Use entity-state-to-mapdisplay for the MapDisplay widget.
When to use
Use this node when a Next dashboard needs the FlightPath widget for one or more airborne entities.
Pipeline position
hydrate-protobuf-v2 (EntityState) -> entity-state-to-flightpath -> json-merge -> dashboard-v2
entity-state-to-records -> entity-state-to-flightpathThe node reads the latest output of one parent.
Configuration
Configuration is required. latField and lonField must be set.
| Key | Type | Required | Default | Description |
|---|---|---|---|---|
entriesPath | string | No | records[*] | JMESPath to the array of time-ordered records. |
timeField | string | No | simulation_time_seconds | Dotted path from each record to its simulation time. |
entitiesPath | string | No | entity_state.entity | JMESPath from each record to its entity object or array of objects. |
entityNameField | string | No | name | Dotted path from each entity to its name. |
entityNames | array of string | No | none | Entities to include. When absent or empty, every entity with latitude and longitude values gets its own channel. |
latField | string | Yes | none | JMESPath from each entity to its latitude. |
lonField | string | Yes | none | JMESPath from each entity to its longitude. |
altField | string | No | "" | Optional JMESPath to altitude. Omitted from points when empty. |
baseCapturedAt | string | No | "" | ISO 8601 base time stamp. When set, simulation time is a relative offset from this base. When empty, simulation time is absolute Unix epoch seconds. |
realmName | string | No | overview | Realm name for the channel. |
channelId | string | No | flightpath-flightdata | Channel id used when entityNames is set. |
channelName | string | No | FlightPath | Display name used when entityNames is set. |
Output
A data service payload with flightpath channels in group flightpath.
{
"$heat-dataservice": {
"version": "1.0",
"groups": [{ "id": "flightpath", "name": "Flight Path" }],
"realms": [
{
"name": "overview",
"channels": [
{
"id": "flightpath-flightdata",
"name": "FlightPath",
"groupId": "flightpath",
"shape": "flightpath",
"data": [
{ "lat": 51.5, "lon": -1.5, "alt": 3000.0, "timestamp": 1718000010000 },
{ "lat": 51.6, "lon": -1.4, "alt": 2950.0, "timestamp": 1718000020000 }
]
}
]
}
]
},
"dashboard_users": []
}Two modes decide how channels are laid out.
- With
entityNamesset, all listed entities are merged into one channel with the configuredchannelId. Points are sorted by simulation time and interleaved. - With
entityNamesabsent or empty, each discovered entity gets its own channel named<entity>-flightpath. Entity names are lowercased and spaces and hyphens are normalised.
lat and lon are numbers. alt appears only when altField is set and evaluates to a number. timestamp is Unix epoch milliseconds.
Limitations
- One parent, latest output only.
- An entity with a missing or non-numeric position at one frame is skipped for that frame only.
- The node fails when no entity has a valid position anywhere in the input.
Related
- FlightPath (Next) renders the channel.
- entity-state-to-mapdisplay plots the same entities on a map.
- entity-state-to-records supplies records from DIS traffic.