10.5 Road elevation methods
There are several ways to elevate a road or parts of a road:
-
Road elevation specifies the elevation along the road reference line, that is in s-direction.
-
The lateral profile specifies the elevation orthogonally to the road reference line, that is in t-direction.
-
Road CRG surface may influence the road height (see Section 10.6, "Road CRG surface").
-
Objects may influence the road height (see Section 13.13, "Object CRG surface").

Figure 42 shows the types of road elevation. The length s does not change with the elevation.
10.5.1 Road elevation
A road may be elevated along its road reference line. Road elevation is defined per road cross section at a given position on the road reference line. Elevation is specified in meters. The default elevation of a road is zero. In case georeferencing is used, the definition of zero depends on it.
Elements in UML model
<elevationProfile>
element
In ASAM OpenDRIVE, the elevation profile is represented by the <elevationProfile>
element within the <road>
element.
UML class: t_road_elevationProfile XML tag: <elevationProfile> (Multiplicity: 0..1)
Road elevation specifies the elevation along the road reference line, that is in s-direction.
<elevation>
element
In ASAM OpenDRIVE, elevation is represented by the <elevation>
element within the <elevationProfile>
element.
UML class: t_road_elevationProfile_elevation XML tag: <elevation> (Multiplicity: 0..*)
Defines an elevation element at a given position on the road reference line. Elements shall be defined in ascending order along the reference line. The s length does not change with the elevation.
Name | Type | Use | Unit | Description |
---|---|---|---|---|
|
double |
required |
m |
Polynom parameter a, elevation at @s (ds=0) |
|
double |
required |
1 |
Polynom parameter b |
|
double |
required |
1/m |
Polynom parameter c |
|
double |
required |
1/m² |
Polynom parameter d |
|
required |
m |
s-coordinate of start position |
Calculation
Road elevation is calculated with the following polynomial function of the third order:
elev(ds) = a + b*ds + c*ds² + d*ds³
where
|
is the elevation (inertial z) at a given position |
|
are the coefficients |
|
is the distance along the road reference line between the start of a new elevation element and the given position. |
ds
restarts at zero for each element.
The absolute position of an elevation value is calculated as follows:
s = sstart + ds
where
|
is the absolute position in the road reference line coordinate system |
|
is the start position of the element in the road reference line coordinate system |
Rules
The following rules apply to road elevation:
-
asam.net:xodr:1.4.0:road.elevation.elev_along_ref_line: Roads shall be elevated along their road reference line.
-
Road elevation may be defined in combination with superelevation and road shape or standalone.
-
asam.net:xodr:1.4.0:road.elevation.elem_asc_order:
<elevation>
elements shall be defined in ascending order according to the s-coordinate.
-
The definition of road elevation remains valid until the next element of this type is defined.
Related topics
10.5.2 Superelevation
Superelevation is part of the lateral profile and describes the cross slope of the road. It may be used, for example, to incline the road to the inner side so that vehicles can drive through them more easily.

Figure 43 shows that for superelevated roads, the t-axis of a road is not parallel to the underlying terrain. For this reason, a lateral profile is defined for the entire road cross section. Superelevation does not change the actual width of a lane, but it affects the projected width. The default value for superelevation is zero. Mathematically, superelevation is defined as the roll angle of the road cross section around the road reference line. That means, superelevation has positive values for roads falling to the right side and negative values for roads falling to the left side. In the example in Figure 43, the road reference line is parallel to the y-axis, to simplify the given example.
Elements in UML model
<lateralProfile>
element
In ASAM OpenDRIVE, the lateral profile is represented by the <lateralProfile>
element within the <road>
element.
UML class: t_road_lateralProfile XML tag: <lateralProfile> (Multiplicity: 0..1)
Contains a series of lateral elevation elements that define the characteristics of the road surfaces banking along the road reference line. The lateral profile is defined relative to the elevation of the road reference line.
<superelevation>
element
In ASAM OpenDRIVE, superelevation is represented by the <superelevation>
element within the <lateralProfile>
element.
UML class: t_road_lateralProfile_superelevation XML tag: <superelevation> (Multiplicity: 0..*)
Superelevation specifies the transverse slope along the road reference line. Superelevation is constant in each cross section and can vary in road reference line direction.
Elements must be defined in ascending order along the reference line. The parameters of an element are valid until the next element starts or the road reference line ends. Per default, the superelevation of a road is zero.
Name | Type | Use | Unit | Description |
---|---|---|---|---|
|
double |
required |
rad |
Polynom parameter a, superelevation at @s (ds=0) |
|
double |
required |
rad/m |
Polynom parameter b |
|
double |
required |
rad/m² |
Polynom parameter c |
|
double |
required |
rad/m³ |
Polynom parameter d |
|
required |
m |
s-coordinate of start position |
Calculation
Superelevation is calculated using the following polynomial function of the third order:
superelevation (ds) = a + b*ds + c*ds² + d*ds³
where
|
is the superelevation at a given position |
|
are the coefficients |
|
is the distance along the road reference line between the start of a superelevation element and the given position. |
ds
restarts at zero for each element.
The absolute position of a superelevation value is calculated as follows:
s = sstart + ds
where
|
is the absolute position in the road reference line coordinate system |
|
is the start position of the element in the road reference line coordinate system |
Rules
The following rules apply to superelevation:
-
When superelevation is defined, it shall apply to the entire road cross section.
-
asam.net:xodr:1.4.0:road.superelevation.elem_asc_order:
<superelevation>
elements shall be defined in ascending order according to the s-coordinate.
-
Single lanes of a road may be excluded from superelevation using the @level attribute.
-
Road elevation may be defined in combination with superelevation.
Related topics
10.5.3 Shape definition
Non-linear lateral road shapes can be described by <shape>
elements.
Shapes describe the elevation of a road’s cross section at a given point on the road reference line in a more detailed way.
That means there may be several shape definitions at one s-coordinate that have different t-values, thereby describing the curvy shape of the road.
Shapes change the actual width of a lane due to its curvilinear shape. The projected width with respect to the planview is not affected.

Figure 44 shows how to calculate the height information between two lateral profiles. The lateral profile at sR1 has five polynomial definitions, while the lateral profile at sR2 has three polynomial definitions. To calculate a point between two lateral profiles, interpolate linearly between those two profiles and use the formulas shown in Figure 44. For the calculation the entire required t-definition has to cover the maximum road width at all s-positions.
Typical use cases are curved road surfaces on high-speed test tracks and crossfalls. The default value for the shape is zero.
Lane offsets can be defined non-linear along s. Shapes are interpolated linear along s. Therefore shapes cannot always follow lane offsets. |

Figure 45 shows how the defined t-range must at least cover the maximum t-expansion of the entire <road>
element.
Deprecated
Shapes in combination with superelevation are deprecated.

Figure 46 shows the deprecated combination of road shape and superelevation. The shape is rotated using superelevation.
Elements in UML model
<lateralProfile>
element
In ASAM OpenDRIVE, the lateral profile is represented by the <lateralProfile>
element within the <road>
element.
UML class: t_road_lateralProfile XML tag: <lateralProfile> (Multiplicity: 0..1)
Contains a series of lateral elevation elements that define the characteristics of the road surfaces banking along the road reference line. The lateral profile is defined relative to the elevation of the road reference line.
<shape>
element
In ASAM OpenDRIVE, the lateral profile is represented by the <shape>
element within the <lateralProfile>
element.
UML class: t_road_lateralProfile_shape XML tag: <shape> (Multiplicity: 0..*)
Defined as the road section’s surface relative to the reference plane. There may be several shape definitions at one s-position that have different t-values, thereby describing the curvy shape of the road.
Name | Type | Use | Unit | Description |
---|---|---|---|---|
|
double |
required |
m |
Polynom parameter a, relative height at @t (dt=0) |
|
double |
required |
1 |
Polynom parameter b |
|
double |
required |
1/m |
Polynom parameter c |
|
double |
required |
1/m² |
Polynom parameter d |
|
required |
m |
s-coordinate of start position |
|
|
double |
required |
m |
t-coordinate of start position |
Calculation
The shape of the lateral profile is calculated with the following polynomial function:
hShape (dt)= a + b*dt + c*dt² + d*dt³
where
|
is the height above the reference plane at a given position |
|
are the coefficients |
|
is the distance perpendicular to the road reference line between the start of a shape element and the given position |
dt
restarts at zero for each element.
The absolute position of a shape value is calculated as follows:
t = tstart + dt
where
|
is the absolute position in the road reference line coordinate system |
|
is the start position of the element in the road reference line coordinate system |
Rules
The following rules apply to shapes:
-
Shapes may be defined in combination with road elevation.
-
asam.net:xodr:1.4.0:road.shape.elem_asc_order:
<shape>
elements shall be defined in ascending order, firstly according to the s-coordinate and secondly according to the t-coordinate.
-
asam.net:xodr:1.4.0:road.type.t_definition_coverage: At all s-positions the t-definition has to cover the maximum road width of the entire road.
Related topics
10.5.4 Cross section surface
Cross section surfaces describe the road surface along the road reference line with strips. A strip defines a start position in s-direction and parameters for polynomials in t-direction. On each side of the road reference line there are up to two strips. The inner strip to the right has @id="-1" and the inner strip to the left @id="1". The outer strip to the right has @id="-2" and the outer strip to the left @id="2".

Figure 47 shows a road with strips of a cross section surface.
The inner strips have a width and an offset in t-direction to define where the outer strips start in t-direction. The outer strips are valid to the outer edge of the last defined lane on the given side. If only one strip exists, it has no given width and is valid to the end of the lane definition.
The road surface of the outer strip can be calculated relative to or independent of the inner strip.

Figure 48 shows cross section surfaces on both sides of a road.
In general strip ids and strip widths are independent of lane ids and lane widths. |
Elements in UML model
<lateralProfile>
element
In ASAM OpenDRIVE, the lateral profile is represented by the <lateralProfile>
element within the <road>
element.
UML class: t_road_lateralProfile XML tag: <lateralProfile> (Multiplicity: 0..1)
Contains a series of lateral elevation elements that define the characteristics of the road surfaces banking along the road reference line. The lateral profile is defined relative to the elevation of the road reference line.
<crossSectionSurface>
element
In ASAM OpenDRIVE, cross section surfaces are represented by the <crossSectionSurface>
element within the <lateralProfile>
element.
UML class: t_road_lateralProfile_crossSectionSurface XML tag: <crossSectionSurface> (Multiplicity: 0..1) Introduced: 1.8.0
A cross section surface defines the lateral profile by means of constant, linear, quadratic, and cubic polynomials in t-direction.
A cross section surface is valid for the full length of the road.
<tOffset>
element
In ASAM OpenDRIVE, a t-offset is represented by the <tOffset>
element within the <crossSectionSurface>
element.
UML class: t_road_lateralProfile_crossSectionSurface_tOffset XML tag: <tOffset> (Multiplicity: 0..1) Introduced: 1.8.0
A t offset shifts all strips relative to the road reference line in t-direction.
<surfaceStrips>
element
In ASAM OpenDRIVE, surfaces are represented by the <surfaceStrips>
element within the <crossSectionSurface>
element.
UML class: t_road_lateralProfile_crossSectionSurface_surfaceStrip XML tag: <surfaceStrips> (Multiplicity: 1) Introduced: 1.8.0
Surface strips contains the strips.
<strip>
element
In ASAM OpenDRIVE, surface definitions are represented by the <strip>
element within the <surfaceStrips>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip XML tag: <strip> (Multiplicity: 1..4) Introduced: 1.8.0
A strip defines the lateral profile in t- and s-direction.
Name | Type | Use | Description |
---|---|---|---|
|
int |
required |
1 for the inner left strip, -1 for the inner right strip, 2 for the outer left strip, -2 for the outer right strip |
|
optional |
Can only be defined for an outer strip. |
<width>
element
In ASAM OpenDRIVE, definitions of the width are represented by the <width>
element within the <strip>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip_width XML tag: <width> (Multiplicity: 0..1) Introduced: 1.8.0
Defines the width of the inner strip.
<constant>
element
In ASAM OpenDRIVE, constant parts are represented by the <constant>
element within the <strip>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip_constant XML tag: <constant> (Multiplicity: 0..1) Introduced: 1.8.0
Defines in t a constant height of the surface.
<linear>
element
In ASAM OpenDRIVE, linear parts are represented by the <linear>
element within the <strip>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip_linear XML tag: <linear> (Multiplicity: 0..1) Introduced: 1.8.0
Defines in t a linear height of the surface.
<quadratic>
element
In ASAM OpenDRIVE, quadratic parts are represented by the <quadratic>
element within the <strip>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip_quadratic XML tag: <quadratic> (Multiplicity: 0..1) Introduced: 1.8.0
Defines in t a quadratic height of the surface.
<cubic>
element
In ASAM OpenDRIVE, cubic parts are represented by the <cubic>
element within the <strip>
element.
UML class: t_road_lateralProfile_crossSectionSurface_strip_cubic XML tag: <cubic> (Multiplicity: 0..1) Introduced: 1.8.0
Defines in t a cubic height of the surface.
<coefficients>
element
In ASAM OpenDRIVE, the cross section surface polynomial coefficients are represented by the <coefficients> element within the <tOffset>, <width>, <constant>, <linear>, <quadratic>, or <cubic> element.
UML class: t_road_lateralProfile_crossSectionSurface_coefficients XML tag: <coefficients> (Multiplicity: 1..*) Introduced: 1.8.0
Defines the coefficients of a cubic polynomial in s-direction.
The first <coefficients>
element shall start at the beginning of the road reference line with @s="0".
Name | Type | Use | Unit | Introduced | Description |
---|---|---|---|---|---|
|
double |
optional |
m |
1.8.0 |
Polynomial parameter a. If the attribute is not specified, the value is 0. |
|
double |
optional |
m/m |
1.8.0 |
Polynomial parameter b. If the attribute is not specified, the value is 0. |
|
double |
optional |
m/m² |
1.8.0 |
Polynomial parameter c. If the attribute is not specified, the value is 0. |
|
double |
optional |
m/m³ |
1.8.0 |
Polynomial parameter d. If the attribute is not specified, the value is 0. |
|
required |
m |
s-coordinate of start position |
XML example
<lateralProfile>
<crossSectionSurface>
<tOffset>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="0.0045000000000000005"
d="-5e-05"/>
<coefficients s="50.0"
a="5.0"
b="0.075"
c="-0.003"
d="3e-05"/>
</tOffset>
<surfaceStrips>
<strip id="1">
<width>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="0.006000000000000001"
d="-6.400000000000001e-05"/>
<coefficients s="50.0"
a="7.0"
b="0.12"
c="-0.0036"
d="3.2e-05"/>
</width>
<constant>
<coefficients s="0.0"
a="0.0"
b="1.942890293094024e-18"
c="0.0011385321100917428"
d="-3.192660550458715e-05"/>
<coefficients s="20.0"
a="0.2"
b="0.007229357798165137"
c="-0.0007770642201834863"
d="9.449541284403669e-06"/>
<coefficients s="70.0"
a="-0.2"
b="0.0003944954128440377"
c="0.0006403669724770642"
d="-1.437648657832144e-05"/>
</constant>
<linear>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="-0.0003285714285714286"
d="6.507936507936508e-06"/>
<coefficients s="30.0"
a="-0.12"
b="-0.002142857142857143"
c="0.00025714285714285715"
d="-2.3032069970845484e-06"/>
</linear>
<quadratic>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="-2.1649831649831646e-06"
d="3.713680009976306e-08"/>
<coefficients s="45.0"
a="-0.001"
b="3.0757575757575755e-05"
c="2.848484848484849e-06"
d="-3.7916353618832964e-08"/>
</quadratic>
<cubic>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="1.4840830449826988e-06"
d="-1.5831467535110928e-08"/>
<coefficients s="85.0"
a="0.001"
b="-9.085294117647057e-05"
c="-2.5529411764705903e-06"
d="2.480610021786493e-07"/>
</cubic>
</strip>
<strip id="2">
<constant>
<coefficients s="0.0"
a="0.2"
b="0.0"
c="-0.00031875"
d="3.2031250000000004e-06"/>
<coefficients s="80.0"
a="-0.2"
b="0.0105"
c="0.00045"
d="-2.375e-05"/>
</constant>
<linear>
<coefficients s="0.0"
a="0.0"
b="8.673617379884036e-20"
c="-8.437500000000002e-06"
d="6.640625000000001e-08"/>
<coefficients s="80.0"
a="-0.02"
b="-7.500000000000001e-05"
c="7.500000000000001e-06"
d="-1.8750000000000003e-07"/>
</linear>
<quadratic>
<coefficients s="0.0"
a="0.0001"
b="-2.6201552501733024e-20"
c="-4.856163886874543e-06"
d="2.8561638868745455e-07"/>
<coefficients s="10.0"
a="-0.0001"
b="-1.1438361131254525e-05"
c="3.712327773749093e-06"
d="-1.3739209840732682e-07"/>
<coefficients s="25.0"
a="0.0001"
b="7.1918056562726596e-06"
c="-2.4703166545806143e-06"
d="4.0075537829344936e-08"/>
<coefficients s="65.0"
a="-0.001"
b="1.9290548706792377e-06"
c="2.338747884940778e-06"
d="-4.5072491650757476e-08"/>
</quadratic>
<cubic>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="3.1999999999999995e-07"
d="-3.555555555555555e-09"/>
<coefficients s="75.0"
a="0.0003"
b="-1.1999999999999999e-05"
c="-4.8e-07"
d="1.92e-08"/>
</cubic>
</strip>
<strip id="-1">
<width>
<coefficients s="0.0"
a="8.0"
b="0.0"
c="0.0"
d="0.0"/>
</width>
<constant>
<coefficients s="0.0"
a="0.0"
b="1.942890293094024e-18"
c="0.0011385321100917428"
d="-3.192660550458715e-05"/>
<coefficients s="20.0"
a="0.2"
b="0.007229357798165137"
c="-0.0007770642201834863"
d="9.449541284403669e-06"/>
<coefficients s="70.0"
a="-0.2"
b="0.0003944954128440377"
c="0.0006403669724770642"
d="-1.437648657832144e-05"/>
</constant>
<linear>
<coefficients s="0.0"
a="0.1"
b="0.0"
c="6.000000000000001e-05"
d="-4.0000000000000003e-07"/>
</linear>
</strip>
<strip id="-2">
<linear>
<coefficients s="0.0"
a="0.0"
b="1.3183898417423733e-17"
c="-0.0005797802197802213"
d="2.9763125763125804e-05"/>
<coefficients s="15.0"
a="-0.03"
b="0.0026967032967032934"
c="0.0007595604395604402"
d="-5.2923076923076945e-05"/>
<coefficients s="25.0"
a="0.02"
b="0.002010989010989012"
c="-0.0008281318681318682"
d="3.270329670329671e-05"/>
<coefficients s="35.0"
a="-0.01"
b="-0.004740659340659341"
c="0.00015296703296703297"
d="-1.1948761297873725e-06"/>
</linear>
<quadratic>
<coefficients s="0.0"
a="0.0"
b="0.0"
c="1.8518518518518523e-06"
d="-1.920438957475995e-08"/>
<coefficients s="90.0"
a="0.001"
b="-0.00013333333333333337"
c="-3.333333333333328e-06"
d="6.666666666666664e-07"/>
</quadratic>
<cubic>
<coefficients s="0.0"
a="-0.0002"
b="2.7105054312137612e-21"
c="9.583333333333325e-08"
d="-6.712962962962956e-10"/>
<coefficients s="60.0"
a="0.0"
b="4.25e-06"
c="-2.499999999999998e-08"
d="-4.687500000000003e-10"/>
</cubic>
</strip>
</surfaceStrips>
</crossSectionSurface>
</lateralProfile>
Calculation
Calculation of width
The width is calculated with the following function:
where
\(w_{i}\) |
is the width at a given position |
\(a_{i}, b_{i}, c_{i}, d_{i}\) |
are the coefficients stored in the |
\(ds\) |
is the distance along the road reference line between the start of a |
For \(n\) entries with a width definition in s-direction define the following parameters:
Calculation of \(t_{offset}\)
The offset for t is calculated with the following function:
where
\(t_{offset,i}\) |
is the t-offset at a given position |
\(a_{i}, b_{i}, c_{i}, d_{i}\) |
are the coefficients stored in the |
\(ds\) |
is the distance along the road reference line between the start of a |
For \(m\) entries with a t-offset definition in s-direction define the following parameters:
Calculation of \(dt\)
Since the width has always a positive value, the calculation of the distance along the t-axis, \(dt\), has to consider the side.
Subtract the \(t_{offset}\) from \(t\) to get the effective \(t_{effective}\):
For the right side with \(t_{effective} <= 0\) apply the following:
If \(-w_{right} <= t_{effective} <= 0\) calculate
If \(t_{effective} < -w_{right}\) calculate
For the left side with \(t_{effective} > 0\) apply the following:
If \(0 <= t_{effective} <= w_{left}\) calculate
If \(t_{effective} < w_{left}\) calculate
Calculation of the local height due to the cross section surface
The height value is calculated with the following function:
where
\(s, t\) |
are the positions given in s and t |
\(co_{s}, li_{s}, qu_{s}, cu_{s}\) |
are the constant, linear, quadratic, and cubic components depending on the s-position |
\(dt\) |
is the distance along the t-axis |
The constant, linear, quadratic, and cubic components are linearly independent and can be calculated separately.
The constant (\(co\)) component uses the following definitions:
The same definitions apply to the linear (\(li\)), quadratic (\(qu\)) and cubic (\(cu\)) components. The number \(n\) of the components, \(n_{co}\), \(n_{li}\), \(n_{qu}\), and \(n_{cu}\) can be different for each component.
Calculation of height regarding the mode
In the case of the inner two strips (\(-w_{right} <= t_{effective} <= w_{left}\)), the mode does not matter:
In the case of the outer two strips (\(t_{effective} < -w_{right}\) or \(t_{effective} > w_{left}\)), the mode shall be taken into account.
@mode="independent"
The calculation of the polynomials for the height values is independent and based on the road reference line.
@mode="relative"
The calculation of the polynomials for the height values is relative to the outer edge of the inner strip.
Left side:
Right side:
Rules
-
asam.net:xodr:1.8.0:road.cross_section_surface.lane_def_valid: A cross section surface is only valid within the lane definition of the road.
-
asam.net:xodr:1.8.0:road.cross_section_surface.start_end_match_with_refline: A cross section surface shall start and end at the start and end of the road reference line.
-
asam.net:xodr:1.8.0:road.cross_section_surface.use_strip: If on a side only one strip is used, it is defined in a
<strip>
element with @id="1" or @id="-1" and a width shall not be specified.
-
asam.net:xodr:1.8.0:road.cross_section_surface.use_width: If on a side two strips are specified, a width for the inner strip shall be specified.
-
asam.net:xodr:1.8.0:road.cross_section_surface.height: The value of @height at
<lane>
elements is added to the cross section surface in z-direction.
-
The @level attribute may be used to exclude outer lanes from the cross section surface definition.
-
asam.net:xodr:1.8.0:road.cross_section_surface.no_shape_superelevation: A cross section surface shall not be used in combination with road shape or superelevation.
Related topics