12.7 Virtual junctions
Virtual junctions are junctions that describe connections within a road without the need to cut the main road. They are intended as best practice, for example, for the following use cases:
-
Modeling driveways
-
Modeling entries and exits to parking lots
-
Modeling entries and exits to farm roads

Figure 91 shows a virtual junction with three connecting roads 2
, 4
and 5
.
The virtual junction connects road 1
with road 99
.
Road 1
serves as an incoming road for connecting road 2
at the @sStart position s=50m.
Road 99
serves as incoming road for road 4
and road 5
.
Road 1
is successor for the two connecting roads 4
and 5
at @sEnd s=70m.
The successor is specified in the road definition of the connecting roads.
Virtual junctions are modeled by <junction>
elements with the @type attribute.
Elements in UML model
For elements in the UML model see Figure 82.
<junction type="virtual">
element
In ASAM OpenDRIVE, virtual junctions are represented by <junction>
elements with the value virtual
in the @type attribute within the <OpenDRIVE>
element.
UML class: t_junction_virtual XML tag: <junction type="virtual"> (Multiplicity: 0..*)
Virtual junctions manage connections within an uninterrupted road, for example, entries and exits to parking lots, and pedestrian crossings.
Name | Type | Use | Unit | Description |
---|---|---|---|---|
|
string |
required |
ID of the junction to which the road belongs, for example connecting roads, cross paths, and roads of a junction boundary. Use -1 for none. |
|
|
string |
required |
The main road from which the connecting roads of the virtual junction branch off. This attribute is mandatory for virtual junctions and shall not be specified for other junction types. |
|
|
string |
optional |
Name of the junction. May be chosen freely. |
|
|
required |
Defines the relevance of the virtual junction according to the driving direction. This attribute is mandatory for virtual junctions and shall not be specified for other junction types. The enumerator "none" specifies that the virtual junction is valid in both directions. |
||
|
required |
m |
End position of the virtual junction in the reference line coordinate system. This attribute is mandatory for virtual junctions. |
|
|
required |
m |
Start position of the virtual junction in the reference line coordinate system. This attribute is mandatory for virtual junctions. |
|
|
required |
Common junctions are of type "default". If the attribute is not specified, the junction type is "default". This attribute is mandatory for all other junction types. |
<connection type="default">
element
In ASAM OpenDRIVE, the connections are represented by <connection>
elements with the value default
in the @type attribute within the <junction>
element.
UML class: t_junction_connection_virtual_default XML tag: <connection type="default"> (Multiplicity: 0..*)
Provides information about a single connection within a virtual junction.
Name | Type | Use | Description |
---|---|---|---|
|
string |
required |
|
|
optional |
Contact point on the @connectingRoad or @linkedRoad. Required for all junction types except virtual. |
|
|
string |
required |
Unique ID within the junction |
|
string |
optional |
ID of the incoming road. Required for all junction types except virtual. |
|
optional |
Type of the connection. Regular connections are @type=“default” . This attribute is mandatory for virtual connections. |
<laneLink>
element
In ASAM OpenDRIVE, lane links in virtual junctions are represented by <laneLink>
elements within the <connection>
element.
UML class: t_junction_connection_laneLink XML tag: <laneLink> (Multiplicity: 0..*)
Provides information about the lanes that are linked between an incoming road and a connecting road.
It is strongly recommended to provide this element.
It is deprecated to omit the <laneLink>
element.
Name | Type | Use | Unit | Introduced | Description |
---|---|---|---|---|---|
|
integer |
required |
ID of the incoming lane |
||
|
optional |
m |
1.8.0 |
Specifies the length of the area where traffic from both overlapping lanes shares the space. It is defined in s length relative to the position of the junction. Intended for direct junctions only. Default is 100. |
|
|
integer |
required |
ID of the connection lane |
XML example
<road name="ConnectingRoad2" length="20" id="2" junction="555">
<link>
<predecessor elementType="road" elementId="1" elementS="50.0" elementDir="+"/>
<successor elementType="road" elementId="99" contactPoint="end"/>
</link>
<laneSection s="0.0000000000000000e+00">
<left/>
<center/>
<right>
<lane id="-1" type="driving" level="false">
<link>
<predecessor id="-2"/>
<successor id="1"/>
</link>
</lane>
</right>
</laneSection>
</road>
<road name="ConnectingRoad4" length="23" id="4" junction="555">
<link>
<predecessor elementType="road" elementId="99" contactPoint="end"/>
<successor elementType="road" elementId="1" elementS="70.0" elementDir="+"/>
</link>
<laneSection s="0.0000000000000000e+00">
<left/>
<center/>
<right>
<lane id="-1" type="driving" level="false">
<link>
<predecessor id="-1"/>
<successor id="-1"/>
</link>
</lane>
</right>
</laneSection>
</road>
<road name="ConnectingRoad5" length="20" id="5" junction="555">
<link>
<predecessor elementType="road" elementId="99" contactPoint="end"/>
<successor elementType="road" elementId="1" elementS="70.0" elementDir="+"/>
</link>
<laneSection s="0.0000000000000000e+00">
<left/>
<center/>
<right>
<lane id="-1" type="driving" level="false">
<link>
<predecessor id="-1"/>
<successor id="-2"/>
</link>
</lane>
</right>
</laneSection>
</road>
...
<junction name="myJunction" type="virtual" id="555" mainRoad="1" sStart="50" sEnd="70" orientation="+">
<connection id="0" incomingRoad="1" connectingRoad="2" contactPoint="start">
<laneLink from="-2" to="-1"/>
</connection>
<connection id="1" incomingRoad="99" connectingRoad="4" contactPoint="start">
<laneLink from="-1" to="-1"/>
</connection>
<connection id="2" incomingRoad="99" connectingRoad="5" contactPoint="start">
<laneLink from="-1" to="-1"/>
</connection>
</junction>
Rules
The following rules apply to virtual junctions:
-
The main incoming road within a virtual junction does not need to end before the junction area.
-
Virtual junctions shall not replace common junctions and crossings that connect multiple roads.
-
Virtual junctions shall be used for branches off the main road only. The main road has priority if not specified otherwise.
-
Virtual junctions shall not have controllers and therefore no traffic lights.
-
If no incoming road is defined the @incomingRoad attribute has the value
-1
. -
All connecting roads within the virtual junction shall either start or end at @sStart or at @sEnd.
-
There shall only be one @sStart and one @sEnd attribute for the virtual junction.
-
The heading of the connecting roads and the @mainRoad shall be equal at @sStart and at @sEnd.
-
The linked lanes shall fit smoothly (see Section 10.3, "Road linkage").
-
The @mainRoad, @sStart, @sEnd, @orientation attributes shall only be valid for junctions of type virtual.
-
Currently only flat virtual junctions can be modeled.
-
The @overlapZone attribute shall only be specified for direct junctions.
Related topics
12.7.1 Cross paths with virtual junctions
Cross paths with virtual junctions are modeled within the <junction>
element with @type="virtual".
The value of the @mainRoad attribute defines the crossed road and the values of the @sStart and @sEnd attributes define the section with the cross path.

Figure 92 shows the road with @id="2" as cross path to connect the lanes with @id="-2" and @id="3" of the road with @id="1".
XML example
<road name="drivingRoad" length="200" id="1" junction="-1">
<link>...</link>
<planView>
<geometry>...
<line/>
</geometry>
</planView>
<lanes>
<laneSection s="0.0000000000000000e+00">
<left>
<lane id="3" type="walking">
<link>...</link>
</lane>
<lane id="2" type="driving">
<link>...</link>
</lane>
<lane id="1" type="driving">
<link>...</link>
</lane>
</left>
<center>...</center>
<right>
<lane id="-1" type="driving">
<link>...</link>
</lane>
<lane id="-2" type="walking">
<link>...</link>
</lane>
</right>
</laneSection>
<laneSection s="5.0000000000000000e+01">
<left>
<lane id="3" type="walking">
<link>...</link>
</lane>
<lane id="2" type="driving">
<link>...</link>
</lane>
<lane id="1" type="restricted">
<link>...</link>
</lane>
</left>
<center>...</center>
<right>
<lane id="-1" type="driving" level="false">
<link>...</link>
</lane>
<lane id="-2" type="walking">
<link>...</link>
</lane>
</right>
</laneSection>
<laneSection s="6.0000000000000000e+01">
<left>
<lane id="3" type="walking">
<link>...</link>
</lane>
<lane id="2" type="driving">
<link>...</link>
</lane>
<lane id="1" type="driving">
<link>...</link>
</lane>
</left>
<center>...</center>
<right>
<lane id="-1" type="driving" level="false">
<link>...</link>
</lane>
<lane id="-2" type="walking">
<link>...</link>
</lane>
</right>
</laneSection>
</lanes>
...
</road>
<road name="pedestrian" length="12" id="2" junction="555">
<link>...</link>
<lanes>
<laneSection s="0.0000000000000000e+00">
<left/>
<center>...</center>
<right>
<lane id="-1" type="walking">
<link/>
</lane>
</right>
</laneSection>
</lanes>
</road>
...
<junction name="pedestrianCrossPath" type="virtual" id="555" mainRoad="1" sStart="52" sEnd="58">
<priority high="1" low="2"/>
<crossPath id="0" crossingRoad="2" roadAtStart="1" roadAtEnd="1">
<startLaneLink s="5.40000000000000000e+01" from="-2" to="-1"/>
<endLaneLink s="5.4000000000000000e+01" from="3" to="-1"/>
</crossPath>
</junction>
Rules
The following rules apply to cross paths with virtual junctions:
-
The elevations of the crossing road defined by the @crossingRoad attribute of the
<crossPath>
element are disregarded.
-
asam.net:xodr:1.8.0:junctions.virtual.crossPath.cross_road_check_s_t: The crossing road shall not exceed the values for s and t of the main road defined by the @roadAtStart and @roadAtEnd attributes.
-
Start and end of the crossing road shall reach the linked lanes specified by the
<startLaneLink>
and<endLaneLink>
elements. -
Cross paths shall only connect lanes with @type="walking" or @type="biking".
Related topics
12.7.2 Virtual connections (deprecated)
Virtual connections are deprecated and indicate possible connections between two roads or one or more lanes of two roads. Because the indicated connections are only virtual, no real path is defined. That means that the course of the reference line is not changed.
Virtual connections describe topological connections between roads and lanes. They do not need to be geometrically correct.

Figure 93 shows a virtual junction with virtual connections.
Elements in UML model
For elements in the UML model see Figure 82.
<connection type="virtual">
element
In ASAM OpenDRIVE, virtual connections are represented by <connection>
elements with the value virtual
in the @type attribute within the <junction>
element.
UML class: t_junction_connection_virtual XML tag: <connection type="virtual"> (Multiplicity: 0..*) Deprecated: 1.8.0
Virtual connections indicate possible connections between two roads or one or more lanes of two roads. Virtual connections do not specify connecting roads.
Name | Type | Use | Description |
---|---|---|---|
|
string |
required |
|
|
optional |
Contact point on the @connectingRoad or @linkedRoad. Required for all junction types except virtual. |
|
|
string |
required |
Unique ID within the junction |
|
string |
optional |
ID of the incoming road. Required for all junction types except virtual. |
|
required |
Type of the connection. Regular connections are @type=“default” . This attribute is mandatory for virtual connections. |
<predecessor>
and <successor>
element
In ASAM OpenDRIVE, predecessors and successors of virtual connections are represented by <predecessor>
and <successor>
elements within the <connection>
element.
UML class: t_junction_predecessorSuccessor XML tag: <predecessor> (Multiplicity: 1) XML tag: <successor> (Multiplicity: 1) Deprecated: 1.8.0
Provides detailed information about the predecessor / successor road of a virtual connection. Currently, only the @elementType “road” is allowed.
Name | Type | Use | Deprecated | Description |
---|---|---|---|---|
|
required |
1.8.0 |
Direction, relative to the s-direction, of the connection on the preceding / succeeding road |
|
|
string |
required |
1.8.0 |
ID of the linked element |
|
required |
1.8.0 |
s-coordinate where the connection meets the preceding / succeeding road. |
|
|
string |
required |
1.8.0 |
Type of the linked element. Currently only "road" is allowed. |
XML example
<junction name="myJunction" type="virtual" id="555" >
<connection id="0" incomingRoad="1" connectingRoad="2" contactPoint="start">
<laneLink from="-2" to="-1"/>
</connection>
<connection id="1" incomingRoad="99" connectingRoad="4" contactPoint="start">
<laneLink from="-1" to="-1"/>
</connection>
<connection id="2" incomingRoad="99" connectingRoad="5" contactPoint="start">
<laneLink from="-1" to="-2"/>
</connection>
<connection id="3" type="virtual">
<predecessor elementType="road" elementId="99" contactPoint="end"/>
<successor elementType="road" elementId="1" elementS="60.0" elementDir="-"/>
<laneLink from="-1" to="1"/>
</connection>
<connection id="4" type="virtual">
<predecessor elementType="road" elementId="99" contactPoint="end"/>
<successor elementType="road" elementId="1" elementS="60.0" elementDir="-"/>
<laneLink from="-1" to="2"/>
</connection>
<connection id="5" type="virtual">
<predecessor elementType="road" elementId="1" elementS="70.0" elementDir="-"/>
<successor elementType="road" elementId="99" contactPoint="end"/>
<laneLink from="1" to="1"/>
</connection>
</junction>
Rules
The following rules apply to virtual connections:
-
Virtual connections shall not replace regular geometrical elements described by road linkage and lane linkage.
-
Virtual connections shall only be defined in virtual junctions.
Related topics