Maneuvers, General Concepts

In the J2735 and J2945 MAP_SPaT work a “Maneuver” refers to a single driving action needed to proceed from one lane to another at a defined nexus point, typically past a stop line at an intersection.  The entry is a Bit String which allow combining the various flag as needed.

Such a nexus can occur in places that are not intersections, such as freeway gated on-ramps, detours, construction zones, and various temporary maps used for incident and special  events.  The concept can also be used with non-motorized users such as pedestrians to give multi-modal traveler instructions (“.. to board the train take the staircase or elevator (lift) to the upper platform and turn right”).  However many of the J2540 ITIS codes and phrases can also be used for this purpose.


The above is a very partial iconic style list. In this article we consider only the Maneuver concept as it is primarily used with motor vehicle lanes in intersections.

Aside: In the generic lane description designated places to pull into or out of the lane can also be denoted with lane segment attributes.  Because these maneuvers are not controlled (prohibited) by the signal controller they have no relationship to the SPaT message.

Maneuvers, General Concepts

This key data concept is commonly called Maneuvers but is defined as DE_AllowedManeuvers as defined below (with commentary). Note this is it is bit string, so more than one value can be asserted which time it is used. This is used to build-up more complex values.

It is used to fulfill two basic design needs:

  • In each GenericLane is a list all the possible allowed Maneuvers at the stop line.
    Practically speaking, this is a simple one-stop way to determine if a lane supports a given Maneuver at all.
  • In the ConnectingLane as part of the Connection which is a single entry in the ConnectsToList, it bundles a subset of the allowed Maneuvers for a single connected lane to the signalGroupID (the index that refers to the SPAT times in the movement List found in the IntersectionState of the SPaT msg). This allows the end user to determine which SPaT message applied to which lanes and its set of Maneuvers.
    Practically speaking, a vehicle OBU device first determines what lane it is in, (and what lane it wants to connect to) and then awaits seeing a “green” (in the MovementPhaseState) in one of the MovementState entries with a matching SignalGroupID for that lane.

These relationships can be expressed as:

Add a figure here showing these relationships

The DE_AllowedManeuvers Entry

Is an Bit String list with the following twelve entries:

AllowedManeuvers ::= BIT STRING {
    -- With bits as defined:
    -- Allowed maneuvers at path end (stop line)
    -- All maneuvers with bits not set are therefore prohibited !
    -- A value of zero shall be used for unknown, indicating no Maneuver
    maneuverStraightAllowed      (0),  -- a Straight movement is allowed in this lane
    maneuverLeftAllowed          (1),  -- a Left Turn movement is allowed in this lane
    maneuverRightAllowed         (2),  -- a Right Turn movement is allowed in this lane
    maneuverUTurnAllowed         (3),  -- a U turn movement is allowed in this lane
    maneuverLeftTurnOnRedAllowed (4),  -- a Stop, and then proceed when safe movement
                                       -- is allowed in this lane 
    maneuverRightTurnOnRedAllowed (5), -- a Stop, and then proceed when safe movement 
                                       -- is allowed in this lane 
    maneuverLaneChangeAllowed    (6),  -- a movement which changes to an outer lane
                                       -- on the egress side is allowed in this lane
                                       -- (example: left into either outbound lane)
    maneuverNoStoppingAllowed    (7),  -- the vehicle should not stop at the stop line
                                       -- (example: a flashing green arrow)
    yieldAllwaysRequired         (8),  -- the allowed movements above are not protected
                                       -- (example: an permanent yellow condition)
    goWithHalt                   (9),  -- after making a full stop, may proceed
    caution                      (10), -- proceed past stop line with caution
    reserved1                    (11)  -- used to align to 12 Bit Field
   } (SIZE(12))

Each of these are discussed in turn.  Keep in mind that as a bit string more then one value may be asserted at any given time to more fully describe the allowed set of Maneuvers.

The use of: maneuverStraightAllowed     

Assert this value to indicate that movement “ahead to the next lane”
(implies little or no turning) is allowed.
Value: 0x 1000 0000 0000


The use of: maneuverLeftAllowed

Assert this value to indicate that a turn to the left is allowed.
Value: 0x 0100 0000 0000



The use of: maneuverRightAllowed

Assert this value to indicate that a turn to the right is allowed.
Value: 0x 0010 0000 0000

See also the items that control allowing the changing of lanes during the maneuver.


The use of: maneuverUTurnAllowed

Assert this value to indicate that a U-Turn is allowed.
Value: 0x 0001 0000 0000

Typically used only with left-most left turn lanes in the US, the alternative is also supported by the J2735 standard.

See also the items that control allowing the changing of lanes during the maneuver.

The use of: maneuverLeftTurnOnRedAllowed

Assert this value to indicate that a left on red is allowed this lane.
Value: 0x 0000 1000 0000

See this article for additional information.  Not often used in the US or other “drive on the right hand side of the road” regions.

The use of: maneuverRightTurnOnRedAllowed

Assert this value to indicate that a right on red is allowed this lane.
Value: 0x 0000 0100 0000

See this article for additional information.



The use of: maneuverLaneChangeAllowed

  Or when missing is implied to be:  
Value: 0x 0000 0010 0000

Often used if the lane (typically only with a single lane) connects to two or more parallel outbound lanes (and there is not a protected white stripe between them).  This commonly occurs with left hand turn lanes, but can be found with right hand turns as well.  Assert this value to indicate the vehicle may safely change to either egress lane within the intersection maneuver. In its absence the the vehicle may NOT change lanes. This flag is not required when the subject lane connects only to a single lane.  It may also be absence when the subject lane is the only turning lane making this maneuver.

The maneuverLaneChangeAllowed flag  is also used when a lane object is modeled as part of the intersection, and as not signalized, and as stopping short of the intersection stop lane and then connecting to two or more other lanes that are part of the signal system (i.e they reach the stop line).  Typically such a lane flares at the end to produce a wider final width that matches the combined with next two lanes (and can channelizing medians).  See this article for additional details.  It is more common (in the US) to have a the new lane taper alongside the existing lane for both left and right hand turn pockets.

  Value: 0x 0000 0010 0000

In both of these lane layout cases an ahead flag combined with either an allowed or a prohibited lanes changes flag can be found.  The No Lane Change case also has used when a single ahead lane “joins” to two or more lanes on the egress side and it is desired to indicate that only a single lane is allowed.  The stripe lane type is also intended for this purpose.

The use of: maneuverNoStoppingAllowed

Provide some common use examples here.
Value: 0x 0000 0001 0000

Use Gloria’s ‘green ahead arrow’ example in this. 


The use of: yieldAllwaysRequired

Append a “yield” to the other flags, indicating that there is no protection (an admissive state) for the maneuver.   Value: 0x 0000 0000 1000

Often used with the flag maneuverRightTurnOnRedAllowed to indicate a “yellow on red” condition.


The use of: goWithHalt

Assert this value to indicate that a the user must come to a full halt (stop) before proceeding.  Value: 0x 0000 0000 0100

Used for UN-signalized stop signs (MUTCD R3).  An alternative phrase would be: stop then go.


The use of: Caution

Assert this value to indicate that a the user must yield to others before proceeding.
Value: 0x 0000 0000 0010

Assert this value to indicate unusual conditions such as construction causing temporary lane placements.

Also used for UN-signalized yield signs.


Common Combinations

Further text to be provided

GUI Comments

Many of the currently developed early MAP and Lane editing tools provide a graphical set of turning icons which the user can select from when editing the lane properties to gather this information.

If we have Maneuvers why do we need ConnectsTo?

A good question.  Because the correct lane to which every maneuver may refer to is not always obvious to a person or to a machine.  Consider a 5-approach intersection where the 5th approach is at an diagonal angle (perhaps it leads to a nearby elevated freeway).  Many intersection with “angle tilted” protected arrow signal heads also have this issue.  By expressing the same information in the ConnectTo structure we specifically state what two lanes are involved as well as the correct movement and phase from the controller.

Further comments

We concludes with a few common worked examples of common lane encoding values.

Encode up some common lane variation here so folks can just find the bit pattern that they need, perhaps use the Kelley cheat sheet table here


The below has been moved to its own article, here.

The DE_MovementPhaseState

This where the current phase of each movement is defined (US terminology).  A movement consists of a sequence phases, the order in which this occurs will vary with the deployment region.  Not every location, or every light, proceeds from red to green to yellow and back with various “arrow or ball” variations.

The above has been moved to its own article, here.


Was this article helpful?

Related Articles

Leave A Comment?

You must be logged in to post a comment.