SPATEM
Look for the current version via the link in the table at the message-type introduction page
As of mid november 2024, Mobilidata has changed version regarding AMQP headers (version 0.9 to 1.0). This is caused by changes in the C-Roads (TF4 spec release 2.1.0) specification.
Description
The SPAT message is used to convey the current status of one or more signalized intersections. Along with the MAPEM message the receiver of this message can determine the state of the signal phasing and when the next expected phase will occur.
Data packages are encoded/decoded to ASN.1 standard, using the 'UPER' encoding rules.
Attributes
"Spat": {
...
"Intersections": [
{
"Name": "WO0486-1",
"Id": {
"Region": 4001,
"Id": 171
},
...
},
...
],
...
},
The SPATEM message contains the information about the current status of one or more signalized intersections.
The intersection is identified by the Name and Id attributes.
"Spat": {
...
"Intersections": [
{
...
"Moy": 425469,
"TimeStamp": 26950,
...
},
...
],
...
},
The Moy and TimeStamp attributes are used to determine the time of the message. Moy or Minutes of Year is the number of minutes since the start of the year.
TimeStamp is the time in milliseconds after the Moy.
"Spat": {
...
"Intersections": [
{
...
"States": [
{
"MovementName": "A",
"SignalGroup": 1,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6213,
"LikelyTime": 5690,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
},
},
...
],
...
},
...
],
...
},
The States attribute contains the information about the state of the signal group. The MovementName and SignalGroup attributes are used to identify the signal group.
The EventState attribute is used to determine the state of the signal group. In Timing the time information is stored. An intersection can receive multiple States. The first state in the this list is the current state, and the other one are predictions of the next states.
EventState overview
| EventState | Description | More info/Example |
|---|---|---|
| 0 | Unavailable | eg. power outage |
| 1 | No signal | eg. outside of operating hours |
| 2 (red) | Stop-then-proceed | stop at stop line and proceed when safe |
| 3 (red) | Stop-and-remain | stop at stop line and do not proceed |
| 4 (green) | Pre-movement | prepare to proceed |
| 5 (green) | Permissive-movement-allowed | proceed, be aware of possible conflicting traffic at intersection |
| 6 (green) | Protected-movement-allowed | proceed, no conflicting traffic expected at intersection |
| 7 (yellow) | Permissive-clearance | prepare to stop and stop if possible, be aware of possible conflicting traffic at intersection |
| 8 (yellow) | Protected-clearance | prepare to stop and stop if possible, no conflicting traffic expected at intersection |
| 9 (yellow) | Caution-conflicting-traffic | proceed with caution, conflicting traffic may be present at the intersection |
Example
An extended description of the SPATEM ASN.1 can be found here.
SPATEM AMQP Header example
{
"id": ",4001-591,",
"custom-mobilidata-tlcID": "0fa1024e",
"quadTree": ",120202132210230013,",
"custom-mobilidata-timestamp": "1712231008642",
"messageType": "SPATEM",
"publisherId": "BE00004",
"publicationId": "BE00004:SPATEM_02",
"baselineVersion": "2.1.0",
"custom-mobilidata-dtapEnvironment": "production",
"protocolVersion": "SPATEM:1.3.1",
"originatingCountry": "BE",
"custom-mobilidata-origin-timestamp": "1712231008625",
"custom-mobilidata-baselineVersion": "D"
}
When receiving a MAPEM message, the AMQP header will contain some extra information that is not included in the MAPEM message itself. This information can be used to filter and process the message.
quadTree: The quadtree of the message. This can be used to filter the message on the location based on quadkeys.tlcID: The identifier of the Traffic Light Controller that sent the message.
SPATEM Message example
- ASN.1
- JSON
02040fa100aa21192e66b9801c0f5e7b068e1b2d630fa100ab180400cfbfad28c1cc04101145646508c228b1d23b05910618c5961400e004401b0040012004d8182c40810dc2c9c31f22d50c080a0038c15688c43810dc2cec317a2f1cc20028008c15688c83c10dc2c9c317a2f1cc20010006c0440604370b310cf98bcc33002a00b002e00c003200d0038c0c68812086e16628ca1179811007c031606b430d045646508c6d8b4518002000001a0063010c105159194230da2d008ec1644188b169e50080021008802300900256061b10504370b270c318b2c30204c023b031a1840a2b23284636c5a291d82c8831f22d50400e803c0163055a1310b04350b36465088800c003b055a1320c04350b314650888012004301080c10dc2d0032ba2f30cc813802c814002c814802c816802c807802c0150056c0c6840e086e16588ca1178e1100b802f606b410a045646508c1d8b18080160050
{
"Header": {
"ProtocolVersion": 2,
"MessageID": 4,
"StationID": 262209706
},
"Spat": {
"Timestamp": null,
"Name": "2.3.0",
"Intersections": [
{
"Name": "WO0486-1",
"Id": {
"Region": 4001,
"Id": 171
},
"Revision": 12,
"Status": [
false,
false,
false,
false,
false,
false,
true,
false,
false,
false,
false,
false,
false,
false,
false,
false
],
"Moy": 425469,
"TimeStamp": 26950,
"EnabledLanes": null,
"States": [
{
"MovementName": "A",
"SignalGroup": 1,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6213,
"LikelyTime": 5690,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
},
{
"EventState": 7,
"Timing": {
"StartTime": null,
"MinEndTime": 5700,
"MaxEndTime": 6243,
"LikelyTime": 5720,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 14,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 17,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 27,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 16,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 18,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 19,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "A1",
"SignalGroup": 2,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5710,
"MaxEndTime": 6393,
"LikelyTime": 5800,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 20,
"QueueLength": 28,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VD1",
"SignalGroup": 14,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5750,
"MaxEndTime": 6333,
"LikelyTime": 6030,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 5,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 4,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VD2",
"SignalGroup": 15,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5710,
"MaxEndTime": 6333,
"LikelyTime": 6030,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 2,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 3,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "D",
"SignalGroup": 6,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5730,
"MaxEndTime": 6643,
"LikelyTime": 6040,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 21,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 22,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 23,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 24,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 25,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 26,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 28,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "FD",
"SignalGroup": 9,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5730,
"MaxEndTime": 36001,
"LikelyTime": 6040,
"Confidence": 1,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 31,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 49,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VC",
"SignalGroup": 13,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6363,
"LikelyTime": 5770,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 1,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 0,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 13,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 12,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "C",
"SignalGroup": 4,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6253,
"LikelyTime": 5760,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
},
{
"EventState": 7,
"Timing": {
"StartTime": null,
"MinEndTime": 5700,
"MaxEndTime": 6283,
"LikelyTime": 5790,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 32,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 33,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 34,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 35,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 36,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 37,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "C1",
"SignalGroup": 5,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5710,
"MaxEndTime": 6243,
"LikelyTime": 5720,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 38,
"QueueLength": 71,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "FC",
"SignalGroup": 8,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6363,
"LikelyTime": 5770,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
},
{
"EventState": 7,
"Timing": {
"StartTime": null,
"MinEndTime": 5700,
"MaxEndTime": 6393,
"LikelyTime": 5800,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 29,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 30,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 44,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VB1",
"SignalGroup": 11,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5740,
"MaxEndTime": 36001,
"LikelyTime": null,
"Confidence": 1,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 6,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 7,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VB2",
"SignalGroup": 12,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5730,
"MaxEndTime": 36001,
"LikelyTime": null,
"Confidence": 1,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 9,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 8,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "B",
"SignalGroup": 3,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5760,
"MaxEndTime": 6493,
"LikelyTime": 6040,
"Confidence": 6,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 39,
"QueueLength": 22,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 40,
"QueueLength": 22,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 41,
"QueueLength": 22,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 45,
"QueueLength": 22,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 15,
"QueueLength": 22,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 42,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 43,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "FB",
"SignalGroup": 7,
"State_time_speed": [
{
"EventState": 3,
"Timing": {
"StartTime": null,
"MinEndTime": 5720,
"MaxEndTime": 36001,
"LikelyTime": 6030,
"Confidence": 1,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 46,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 47,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
},
{
"MovementName": "VA",
"SignalGroup": 10,
"State_time_speed": [
{
"EventState": 5,
"Timing": {
"StartTime": null,
"MinEndTime": 36001,
"MaxEndTime": 6203,
"LikelyTime": 5680,
"Confidence": null,
"NextTime": null
},
"Speeds": null,
"Regional": null
}
],
"ManeuverAssistList": [
{
"ConnectionID": 11,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
},
{
"ConnectionID": 10,
"QueueLength": null,
"AvailableStorageLength": null,
"WaitOnStop": false,
"PedBicycleDetect": false,
"Regional": null
}
],
"Regional": null
}
],
"ManeuverAssistList": null,
"Regional": null
}
],
"Regional": null
}
}