Updated 2026-10-09
What it is and who sends it
A MAP message (ASN.1 type MapData, DSRCmsgID 18) describes the geometry of an intersection or a road segment: where each lane is, which direction it carries, what maneuvers it allows, which lanes it connects to across the intersection, and which signal group governs each connection. It is static data, prepared once by the agency or its integrator from survey or aerial imagery, stored on the RSU and repeated at 1 Hz. Vehicles match their position to a lane in the MAP, follow the lane's connectsTo to a signalGroup, and read that group's state in the SPaT. Without a correct MAP a SPaT is meaningless, which is why the CTI 4501 guide spends most of its pages on MAP rules.
When it is broadcast
| Property | Value |
|---|---|
| Rate | 1 Hz (CTI 4501); never faster than needed, because a MAP can be several hundred bytes |
| PSID | 0xE0000017 (p-encoded E0000017) |
| Channel | Same C-V2X channel as everything else |
| Signing | Signed with the RSU application certificate that holds PSID 0xE0000017 |
| Source | Agency file → RSU store-and-repeat table (rsuMsgRepeatTable) via NTCIP 1218; the portal's push does exactly this |
| Size | 200 to 1,400 bytes; a MAP must fit in one frame, so large intersections are trimmed or split into layers |
Structure, section by section
Top level: MapData
| Field | Meaning | Units and range | Typical value | Where it comes from |
|---|---|---|---|---|
timeStamp | Minute of the year the file was generated | optional | 403200 | authoring tool |
msgIssueRevision | Edition of the whole message; increment on any change | MsgCount 0 … 127 | 3 | authoring tool |
layerType, layerID | What kind of layer (intersectionData, roadwaySectionData, …) and its number | optional | intersectionData, 1 | authoring tool |
intersections | One or more IntersectionGeometry | list 1 … 32 | ||
roadSegments | Road-segment geometry (curves, lane-level TIM support) | optional | ||
restrictionList | Named user classes (RestrictionClassID) for lane restrictions | optional |
IntersectionGeometry
| Field | Meaning | Units and range | Typical value | Where it comes from |
|---|---|---|---|---|
id | region and id, the same pair the SPaT uses | 0 … 65535 each | region 0, id 1201 | agency numbering |
revision | Edition of this intersection; the SPaT's revision must match | 0 … 127 | 3 | authoring tool |
refPoint | Reference position: lat, long (1/10 microdegree), elevation (0.1 m); CTI 4501 places it at the center of the intersection | 388823000, −771757000, 1050 | survey | |
laneWidth | Default lane width | cm | 350 | survey |
speedLimits | Regulatory speed limits: type (vehicleMaxSpeed, truckMaxSpeed, maxSpeedInSchoolZone…) and speed (0.02 m/s) | optional | agency | |
laneSet | Every lane: vehicle lanes, crosswalks, bike lanes, sidewalks, medians, tracked-vehicle lanes | list 1 … 255 | survey | |
preemptPriorityData | Which signal groups serve preemption or priority | optional | controller configuration | |
roadAuthorityID | Road authority OID, new in 2024 | optional | agency |
GenericLane
| Field | Meaning | Units and range | Typical value |
|---|---|---|---|
laneID | Unique within the intersection; 0 is reserved | 1 … 255 | 1 |
name | Label such as "EB Broad St ingress" | optional | |
ingressApproach, egressApproach | Approach number this lane belongs to; ingress lanes lead toward the intersection, egress lanes away | 1 … 15 | 1 |
laneAttributes.directionalUse | 2-bit LaneDirection: 10 ingress, 01 egress, 11 both (crosswalks) | 10 | |
laneAttributes.sharedWith | 10-bit LaneSharing: bus, taxi, pedestrians, cyclists, tracked vehicles… | 0000000000 | |
laneAttributes.laneType | CHOICE: vehicle (8-bit), crosswalk (16-bit), bikeLane, sidewalk, median, striping, trackedVehicle, parking | {"vehicle": "00000000"} | |
maneuvers | 12-bit AllowedManeuvers: straight (0), left (1), right (2), U-turn (3), left on red (4), right on red (5), lane change (6), no stopping (7), yield always (8), go with halt (9), caution (10) | 100000000000 | |
nodeList | CHOICE of nodes (2 … 63 explicit nodes) or computed (a lane offset from a reference lane) | ||
connectsTo | Downstream connections, each with connectingLane.lane, optional maneuver, signalGroup, userClass, connectionID | optional | |
overlays | Other lanes that share this pavement | optional |
Nodes and offsets
Each node is {"delta": {"node-XYn": {"x": …, "y": …}}} plus an optional attributes set. Offsets are in centimeters, +x east and +y north. The first node is relative to refPoint; every later node is relative to the previous node. The encoding is chosen per node from node-XY1 (±5.11 m) through node-XY6 (±327.67 m), or node-LatLon for an absolute position. Smaller encodings save bits, which matters when a MAP approaches the frame limit.
CTI 4501 rules that the map builder enforces and that you should check by hand on any MAP you receive:
- The first node of an ingress lane is at the stop line, and nodes proceed upstream, away from the intersection. The first node of an egress lane is at the point where vehicles leave the intersection, and nodes proceed downstream.
- Nodes mark changes in geometry; a straight lane needs only two. Spacing should keep the polyline within about a meter of the true lane center.
- Lane widths that differ from the intersection default are given with
dWidthin a node's attributes;dElevationcarries grade changes. - Node attributes such as
stopLine,mergePoint,divergePointandclosedToTraffic, and segment attributes such ascurbOnRight,transitStopInLaneandbikeBoxInFront, carry extra meaning for vehicles that look for them. - Every ingress vehicle lane at a signalized approach must have at least one
connectsTowith asignalGroup, and every signal group used must exist in the SPaT. - Crosswalks are lanes with
directionalUse 11,laneType.crosswalk,sharedWithpedestrians, two nodes spanning the roadway, and aconnectsToto themselves carrying the pedestrian signal group.
Connections and signal groups
A connectsTo entry says "from this lane you may go to lane N, with this maneuver, under signal group G". A through lane normally has one connection; a shared through-and-right lane has two, which may carry different signal groups if the right turn has its own arrow. Permissive left turns under a green ball share the through movement's signal group; a protected left turn arrow has its own. The signalGroup numbers are an agency choice, but the convention CTI 4501 recommends is to reuse the NEMA phase number (2 for eastbound through, 6 westbound, 4 and 8 for the cross street, odd numbers for lefts) so that technicians can read a MAP against a controller's phase diagram. MAP to SPaT works through a complete example.
How to create one in this portal
The fast way is the map builder: place the reference point, draw each lane from the stop line outward, set its direction, type and maneuvers, draw the crosswalks, then click an ingress lane and an egress lane to create a connection and type the signal group. The builder computes offsets, chooses encodings, validates against the 2024 schema and shows the result on the same map. Save the project to return to it later, download the JSON and hex, or Push to my RSU.
By hand in the creator: load the MAP template (four vehicle lanes and two crosswalks at Broad St & West St, Falls Church, VA), change refPoint, id.id and revision, then edit each lane's nodes. The ? help on a node shows the running absolute position so you can check it against a map. Encode; the hex begins 0012; the map tab draws every lane and connection, with ingress and egress colored differently and crosswalks dashed.
After any change, increment both msgIssueRevision and the intersection revision, and update the SPaT generator so its revision matches. CTI 4501 and most OBUs treat a mismatch as "no valid MAP".
How to read a decoded one
- Geometry on the map. Lanes should lie on the pavement. A lane that is mirrored, rotated or offset by a block usually has x and y swapped, a sign error, or a first node measured from the wrong reference point.
- Node encodings. A node whose offset exceeds the chosen
node-XYnrange fails to decode or decodes as garbage; the portal's encoder rejects it. - Connections. Each ingress lane should connect to a lane with
directionalUse 01on the far side; check that thesignalGroupnumbers are the set your SPaT sends. - Lane direction bits.
10is ingress,01is egress. Reversed bits are the most common hand-authoring error. - Size. Over about 1,400 bytes the MAP will not fit a single frame with its security envelope.
- Revision. Compare
revisionto the SPaT's and to the controller's configuration sheet.
Common mistakes: laneID 0; two lanes with the same laneID; nodes listed from the far end toward the stop line; a crosswalk with only one direction bit; maneuvers strings of the wrong length; a speedLimits value typed in mph instead of 0.02 m/s.
What controllers and RSUs need
The controller does not read the MAP. It only needs its SPaT generator configured with the same intersection ID, revision and signal group numbering. The RSU needs the UPER bytes in its store-and-repeat table with PSID 0xE0000017, a 1,000 ms interval, the channel, a delivery window and rsuMsgRepeatEnable set; the NTCIP 1218 push guide describes each object. Keep the source JSON under version control with the survey it was built from; an agency with fifty intersections will revise MAPs for years.
Related standards and further reading
- SAE J2735_202409, MapData and Common modules; CTI 4501, Connected Intersections Implementation Guide; USDOT's MAP authoring tools and the ISO 19091 alignment of MAP/SPaT.
- SPaT, MAP to SPaT, how signal timing works, units cheat sheet, TIM for the road-segment style of geometry.