TMC Location Codes (road traffic)

Brief Description

This data record supplies the TMC location codes that are used in other data records (e.g. traffic messages).

Functional Description

The TMC Location Database Exchange Format was originally developed for traffic messages via FM. The exact name is ‘Radio Data System – Traffic Message Channel (RDS-TMC)’. The framework was developed in CEN TC278 SWG 7.3.

TMC uses the standardized Alert-C (ISO 14819-3, Intelligent transport systems – Traffic and travel information messages via traffic message coding, Part 3: Location referencing for Radio Data System-Traffic Message Channel (RDS-TMC) using ALERT-C) for the referencing of ‘locations’: Each message (accident, congestion, closure, etc.) refers to locations via numerical codes from country or region-specific tables previously loaded into the recipients.

In Europe, these location tables (LT, Location Table or LCL, Location Code List, referred to) per country/region and maintained in the form of several DAT files. To understand the TMC location mechanism, it is helpful to understand the structure of these tables and how they are used in the messages.

A TMC message does not contain any coordinates or geometry. It transports:

  • Event codes (what happened: accident, traffic jam, road blocked, etc.)
  • Primary location code (where it starts; a code in the LCL)
  • Direction (positive/negative, i.e. along or against the reference direction of the linear location)
  • Scope (how many consecutive locations will be covered before the event)
  • Optional offsets and additional information (e.g. affected lanes, diversion notice, duration)

The recipient searches the code in their LCLs to resolve human-readable names (street number/name, place name) and can map the event to their internal map, if available, or simply display the resolved text.

Organisation of the TMC tables

A location table is essentially a curated ‘graphic’ of major roads that is stable enough to be transmitted. It includes:

  • Points (nodes): hubs, transfer points, exits, toll booths, border points, notable hubs in cities. Each has:
    • A unique point ID
    • Coordinates (WGS84 lat/long)
    • Type (motorway triangle, ramp, intersection, urban junction, etc.)
    • Names (e.g. ‘München-Süd,’ ‘Jct 15 M25,’ ‘Lille-Sud’)
  • Linear locations (segments/linkages): directional road sections between two points. Each has:
    • A unique location code (the thing that goes on air)
    • From-point and to-point
    • Reference direction (positive direction is from ‘from’ to ‘to’; negative is the other way round)
    • Length (approximately, for ‘offsetting’)
    • Street reference (street number, class)
    • Neighbouring links (next/front in each direction)
  • Streets/Routes: Groupings of consecutive linear locations with identifiers such as ‘A8,’ ‘M25,’ ‘E40’ and language-specific names.
  • Areas: administrative or urban areas where news is qualified (e.g. ‘near Lyon’, ‘in Greater Manchester’).
  • Names: A dictionary of strings with language codes and text referenced by IDs to avoid duplication.
  • Cross-border connectors: Special entries that connect the end of a country’s table to the beginning of a neighbor’s table so that expansions across borders can be continued.

Georeferencing

For traffic messages, localisation is carried out according to the TMC (Traffic Message Channel) standard and the ‘AlertC’ method. The version of the TMC topology used is defined in the <dx223:alertCLocationTableVersion> The direction in which a traffic message acts can thus be determined automatically.

Referencing on Swiss transport network

Format

A general description of the format can be found here: Location Database Exchange Format

Frequency of update

The TMC files are updated annually in Switzerland.

The Federal Roads Office FEDRO is responsible.

Spatial data formats as an alternative

The dataset can also be obtained in the form of GIS data. This data contains the TMC objects directly in the form of geometries (points and lines) including their associated attributes. They are offered in two versions, one in the WGS84 global coordinate system and the other in the Swiss coordinate system CH1903+ LV03. As of version 7.6, the TMC points also contain a reference to the 2026 basic network of Verkehrsnetz CH (transport network)swissTNE Base).

The following layers are typically used:

  • Linears (line sections)
  • Links (segment links)
  • Points (nodes)

Geopackage files

Geopackage files (available from June 2026) contain the following data:

  1. the TMC points in national coordinates and in WGS84
  2. a geometryless reference table (lt_ch_76_ch_swisstne) illustrating the relationship between the TMC points and the basic network of Swiss transport network (swissTNE Base) is described.
  3. a polyline layer lt_ch_76_ch_swisstne_offset which describes connecting lines between the base network and the referenced TMC points.

The Attributes should be interpreted as follows:

  • swisstne_base_object_id (TEXT, 36): Corresponds to the object_id attribute in the base network
  • swisstne_base_m (numeric, 3): Describes the measure value on this base grid edge measured from its starting point
  • swisstne_base_offset (numeric, 3): Offset from the TMC point to the referenced point on the base network
  • direction: direction (+ and -) on national roads, only for points on national roads with separate lanes

Similar to previous publications, the TMC points are also included as shapefiles.

Contact

Questions about TMC can be sent to: verkehrsdaten-plattform@astra.admin.ch.

Technical Description

Relevant files

The format defined in ISO 14819-3 is typically provided by European LCL vendors as a set of DAT files. The exact file names and partitions may vary by vendor, but the content follows the same logical partitioning.

In general, these are files of the following type:

  • metadata.dat (or table.dat): Info at table level (not available for Switzerland)
    • Location Table Number (LTN), country code, version, release date, projection, encoding and supported languages.
  • names.dat: a string pool
    • Records of text elements (street names/numbers, intersection names, place names) with language tags; referenced by integer IDs from other files.
  • points.dat (nodes.dat):
    • Point ID
    • Latitude/longitude
    • Point type (motorway triangle, exit, intersection, city node, ferry terminal, border crossing)
    • Primary/Secondary Name IDs
  • segments.dat (links.dat, linear.dat):
    • Location code (refer to in TMC messages)
    • From-point ID, to point ID
    • Street ID (link to roads.dat)
    • Length in metres (or decimetres), direction flags, street class
    • Next/previous segment IDs for positive and negative directions
  • roads.dat (routes.dat):
    • Street ID
    • Class of road (highway, primary, secondary)
    • Number/name (e.g. ‘A8,’ ‘M25,’ ‘E40’), via name IDs
    • Sorted list of the segment IDs that make up the route
  • areas.dat (Not available in Switzerland):
    • IDs for administrative or urban areas
    • Name ID
    • Member lists (which points/segments belong to or are close to the area)
  • poi.dat (not available in Switzerland):
    • Special points (rest areas, rest areas) with names and links
  • border_xref.dat (crossref.dat, not available in Switzerland):
    • Connectors for linking location codes to neighboring tables (country code, neighboring location code)
  • languages.dat:
    • Character encoding information (such as ISO-8859-1 vs. UTF-8), available languages
  • index.dat (not available in Switzerland):
    • Index structures for quick lookup (by location code, by point ID, by street ID)

Excerpts from the relevant files

We show a short excerpt of the relevant files, so that the structure becomes clear.

NAMES.DAT

CID;LID;NID;NAME;NCOMMENT;OFFICIALNAME
51;4;505869;Route du Simplon;;
51;4;502908;Feldbergstrasse;;
51;4;508014;Knonauerstrasse;;
51;4;5022;Salvenach;;
51;4;7440;Mairengo;;

NAMETRANSLATION.DAT

CID;LID;NID;NTRANSLATION;OFFICIALNAME
51;1;505869;Route du Simplon;
51;1;502908;Feldbergstrasse;
51;1;508014;Knonauerstrasse;

POINTS.DAT

CID;TABCD;LCD;CLASS;TCD;STCD;JUNCTIONNUMBER;RNID;N1ID;N2ID;POL_LCD;OTH_LCD;SEG_LCD;ROA_LCD;INPOS;INNEG;OUTPOS;OUTNEG;PRESENTPOS;PRESENTNEG;DIVERSIONPOS;DIVERSIONNEG;XCOORD;YCOORD;INTERRUPTSROAD;URBAN;JNID
51;9;30866;P;1;11;;499621;498742;;34753;;;30865;1;1;1;1;1;1;;;+00612956;+4621373;;0;
51;9;30952;P;1;11;;499121;499176;;34758;;;30951;1;1;1;1;1;1;;;+00607854;+4621224;;0;
51;9;27306;P;3;42;;314;3782;;34935;;1499;;1;1;1;1;1;1;;;+00813881;+4748090;;0;
51;9;12276;P;3;37;;314;5574;;32930;;;1121;1;1;1;1;1;1;;;+00762960;+4612815;;0;

SEGMENTS.DAT

CID;TABCD;LCD;CLASS;TCD;STCD;ROADNUMBER;RNID;N1ID;N2ID;ROA_LCD;SEG_LCD;POL_LCD;RDID
51;9;1509;L;3;0;H5;314;782;258;1066;;11;27593
51;9;1582;L;3;0;H23;314;1422;3488;1079;;8;27566
51;9;1485;L;3;0;H2;314;1060;1350;1053;;41;27554
51;9;1441;L;3;0;A1;;252;736;1039;;11;27396
51;9;25180;L;3;0;;314;5620;4456;18762;;27;
51;9;1549;L;3;0;H13;314;1134;734;1065;;38;27532
51;9;1534;L;3;0;H11;314;450;1358;1072;;8;27526

More details

  • The data is encoded in Latin 1 (sometimes also UTF-8).
  • The tables are actually CSV files with semicolons as field delimiter. The end of the record is marked with CRLF, the file extension is .DAT.

How a recipient edits a message

  1. It receives a traffic message with the following content, for example: event=ACCIDENT, location=10234, direction=positive, extent=3.
  2. He looks at the location=10234 in segments.dat and gets:
    • From=point 5021 (name ID -> ‘München-Süd’), To=point 5030 (‘Hofolding’)
    • Road ID -> ‘A8’
    • Next positive segments for extent traversal
  3. It takes the names from names.dat (taking into account the language and the existing text variants).
  4. Optionally, it determines nearby towns via areas.dat, e.g., ‘Nähe Holzkirchen (Landkreis Miesbach)’.
  5. The message is displayed: ‘Accident on A8 towards Salzburg at München-Süd, extends for 3 segments (approx. 6 km).’

Examples

Some general examples are given below.

Example 1: Germany (DE), Motorway A8 Munich → Salzburg

Acceptance of table contents:

names.dat

NID SURNAME NCOMMENT
2001 A8
3001 Munich South
3002 Hofolding company
4001 Towards Salzburg direction-qualifier

points.dat

LCD XCOORD YCOORD TCD NID
5021 48.0575 11.5531 MOTORWAY_JUNCTION 3001
5030 47.9892 11.6304 INTERCHANGE 3002

roads.dat

LCD CLASS RNID
101 MOTORWAY 2001

segments.dat

LCD FROM TO LENGTH NEXT POS PREV POS NEXT NEG PREV NEG ROA_LCD
10234 5021 5030 2500 10235 10233 10233 10235 101
10235 5030 5038 2100 101
10236 5038 5044 1900 101

Traffic alert:

  • Event code: 101 (accident)
  • Primary location code: 10234
  • Direction: positive
  • Extent: 3

Edition (in German)): ‘Accident on the A8 towards Salzburg near München-Süd, between München-Süd and Hofolding; fault over 3 sections.’

Example 2: United Kingdom (GB), M25 clockwise near Junction 15

UK tables often include the junctions/motorway triangles as names.

names.dat

NID SURNAME
2501 M25
3501 Junction 15
3502 Junction 16
4501 clockwise

points.dat

LCD XCOORD YCOORD TCD NID
70015 51.4796 -0.4934 MOTORWAY_JUNCTION 3501
70016 51.5083 -0.5337 MOTORWAY_JUNCTION 3502

roads.dat

LCD CLASS RNID
501 MOTORWAY 2501

segments.dat

LCD FROM TO LENGTH ROA_LCD
600115 70015 70016 3200 501

Traffic alert:

  • Event: Stationary traffic
  • Location code: 600115
  • Direction: positive (clockwise)
  • Extent: 2

Issued by: ‘Stationary traffic on M25 clockwise between J15 and J16; extends for 2 segments.’

Example 3: France (FR), A1 near Lille towards Paris

French tables are always oriented with ‘sens Paris’ / ‘sens Lille’ qualifiers and special tagging for urban areas.

names.dat

NID SURNAME NCOMMENT
2101 A1
3101 Lille-South
3102 Seclin
4101 sens Paris

points.dat

LCD XCOORD YCOORD TCD NID
80101 50.5948 3.0653 INTERCHANGE 3101
80112 50.5480 3.0360 INTERCHANGE 3102

roads.dat

LCD CLASS RNID
301 MOTOR ROUTE 2101

segments.dat

LCD FROM TO LENGTH ROA_LCD
900201 80101 80112 4500 301

Traffic alert:

  • Event: Roadworks
  • LocCode: 900201
  • Direction: positive (sens Paris)
  • Extent: 1
  • Supplementary: lane closed

Issued by: ‘Travaux sur A1 direction Paris à haut de Lille-Sud; voie fermée.’

Example 4: Cross-border, Switzerland (CH) – Germany (DE) near Basel on A5

Swiss tables contain connectors that also refer to tables in Germany, so that border crossings can be mapped neatly.

names.dat (CH)

NID SURNAME NCOMMENT
102 A2
103 Basel/Weil am Rhein

points.dat (CH)

LCD XCOORD YCOORD TCD NID
12001 50.5948 3.0653 BORDER POINT 103

roads.dat (CH)

LCD CLASS RNID
111 MOTORWAY 2101

segments.dat (CH)

LCD FROM TO LENGTH ROA_LCD
45012 11998 12001 4500 102

border_xref.dat (CH)

LCD (CH) LCD (EN)
12001 50005

names.dat (EN)

NID SURNAME NCOMMENT
502 A5
503 Basel/Weil am Rhein

points.dat (EN)

LCD XCOORD YCOORD TCD NID
50005 50.5948 3.0653 BORDER POINT 503

The traffic jam on the A2 in Switzerland continues on the A5 in Germany:

  • Primary Location: CH-45012, direction positive, extent 4
  • The recipient can follow nextPos Pointers in Switzerland. When he encounters the Border Connector, he can search for the next segments from the Germany tables and continue with the expansion.

Important implementation notes

  • Reference Direction and Extent: The ‘positive’ direction is a property of each segment (from point → point). Extent N means ‘N consecutive linear locations ahead’ in the chosen direction, not kilometres. If the recipient has another map, they can approximate the length by summing up the segment lengths from the LCL.
  • Offsets: Some messages use start/end offsets within a segment (quantized, e.g. breaks of the segment length) to place the event not exactly on the node, but somewhere along the link. Not all transmitters use offsets heavily; many rely only on expansions.
  • Name resolution and languages: names.dat contains several language variants per string. In multilingual regions (e.g. Switzerland), the table may contain German/French/Italian variants. Recipients select a preferred language or fall back on a standard preset.
  • Street numbering and E-roads: Street entries can carry both national numbers (A8) and European E-road numbers (E52). Broadcasters and receivers decide which ones to display.
  • Stability: Location tables change slowly (new intersections, renames). They are versioned and identified with an LTN and a version date. Recipients must have the correct table for a country; otherwise the codes will not be resolved.
  • Extent vs. distance: Extent counts segments, not kilometers; the actual distance traveled depends on the segment lengths.
  • Map deviation: If the recipient’s base map differs significantly from the LCL topology, the snapping of events to the map may be imperfect, but the text will remain correct.
  • Language/encoding: Legacy tables often use ISO-8859 character sets; modern distributions may use UTF-8. A discrepancy can lead to confusing diacritics if not handled correctly.
  • Coverage of urban roads: TMC LCLs focus on main roads; smaller roads may not be listed in the table, limiting granularity.

Location Examples from Swiss traffic messages

An example with Linear and TMC:

 <dx223:groupOfLocations xsi:type="dx223:Linear">
 	<dx223:alertCLinear xsi:type="dx223:AlertCMethod4Linear">
 		<dx223:alertCLocationCountryCode xsi:type="dx223:String">4</dx223:alertCLocationCountryCode>
 		<dx223:alertCLocationTableNumber xsi:type="dx223:String">9</dx223:alertCLocationTableNumber>
 		<dx223:alertCLocationTableVersion xsi:type="dx223:String">7.3</dx223:alertCLocationTableVersion>
 		<dx223:alertCDirection xsi:type="dx223:AlertCDirection">
 			<dx223:alertCDirectionCoded xsi:type="dx223:AlertCDirectionEnum">both</dx223:alertCDirectionCoded>
 		</dx223:alertCDirection>
 		<dx223:alertCMethod4PrimaryPointLocation xsi:type="dx223:AlertCMethod4PrimaryPointLocation">
 			<dx223:alertCLocation xsi:type="dx223:AlertCLocation">
 				<dx223:specificLocation xsi:type="dx223:AlertCLocationCode">10432</dx223:specificLocation>
 			</dx223:alertCLocation>
 			<dx223:offsetDistance xsi:type="dx223:OffsetDistance">
 				<dx223:offsetDistance xsi:type="dx223:MetresAsNonNegativeInteger">0</dx223:offsetDistance>
 			</dx223:offsetDistance>
 		</dx223:alertCMethod4PrimaryPointLocation>
 		<dx223:alertCMethod4SecondaryPointLocation xsi:type="dx223:AlertCMethod4SecondaryPointLocation">
 			<dx223:alertCLocation xsi:type="dx223:AlertCLocation">
 				<dx223:specificLocation xsi:type="dx223:AlertCLocationCode">10431</dx223:specificLocation>
 			</dx223:alertCLocation>
 			<dx223:offsetDistance xsi:type="dx223:OffsetDistance">
 				<dx223:offsetDistance xsi:type="dx223:MetresAsNonNegativeInteger">0</dx223:offsetDistance>
 			</dx223:offsetDistance>
 		</dx223:alertCMethod4SecondaryPointLocation>
 	</dx223:alertCLinear>
 </dx223:groupOfLocations>

An example with a period:

 			      <dx223:groupOfLocations xsi:type="dx223:Point">
							<dx223:alertCPoint xsi:type="dx223:AlertCMethod4Point">
								<dx223:alertCLocationCountryCode xsi:type="dx223:String">4</dx223:alertCLocationCountryCode>
								<dx223:alertCLocationTableNumber xsi:type="dx223:String">9</dx223:alertCLocationTableNumber>
								<dx223:alertCLocationTableVersion xsi:type="dx223:String">7.4</dx223:alertCLocationTableVersion>
								<dx223:alertCDirection xsi:type="dx223:AlertCDirection">
									<dx223:alertCDirectionCoded xsi:type="dx223:AlertCDirectionEnum">both</dx223:alertCDirectionCoded>
								</dx223:alertCDirection>
								<dx223:alertCMethod4PrimaryPointLocation xsi:type="dx223:AlertCMethod4PrimaryPointLocation">
									<dx223:alertCLocation xsi:type="dx223:AlertCLocation">
										<dx223:specificLocation xsi:type="dx223:AlertCLocationCode">16422</dx223:specificLocation>
									</dx223:alertCLocation>
									<dx223:offsetDistance xsi:type="dx223:OffsetDistance">
										<dx223:offsetDistance xsi:type="dx223:MetresAsNonNegativeInteger">0</dx223:offsetDistance>
									</dx223:offsetDistance>
								</dx223:alertCMethod4PrimaryPointLocation>
							</dx223:alertCPoint>
						</dx223:groupOfLocations>

An example with a point that is not TMC:

 <dx223:groupOfLocations xsi:type="dx223:Point">
 	<dx223:tpegPointLocation xsi:type="dx223:TpegSimplePoint">
 		<dx223:tpegDirection xsi:type="dx223:DirectionEnum">anticlockwise</dx223:tpegDirection>
 		<dx223:tpegSimplePointLocationType xsi:type="dx223:TpegLoc01SimplePointLocationSubtypeEnum">nonLinkedPoint</dx223:tpegSimplePointLocationType>
 		<dx223:point xsi:type="dx223:TpegNonJunctionPoint">
 			<dx223:pointCoordinates xsi:type="dx223:PointCoordinates">
 				<dx223:latitude xsi:type="dx223:Float">46.767601</dx223:latitude>
 				<dx223:longitude xsi:type="dx223:Float">7.09531021</dx223:longitude>
 			</dx223:pointCoordinates>
 			<dx223:name xsi:type="dx223:TpegOtherPointDescriptor">
 				<dx223:descriptor xsi:type="dx223:MultilingualString">
 					<dx223:values>
  <dx223:value xsi:type="dx223:MultilingualStringValue" lang="de-CH">Vy de Villard, Posieux</dx223:value>
 					</dx223:values>
 				</dx223:descriptor>
 				<dx223:tpegOtherPointDescriptorType xsi:type="dx223:TpegLoc03OtherPointDescriptorSubtypeEnum">pointName</dx223:tpegOtherPointDescriptorType>
 			</dx223:name>
 		</dx223:point>
 	</dx223:tpegPointLocation>

An example of linear referencing without TMC

 <dx223:groupOfLocations xsi:type="dx223:Linear">
 	<dx223:tpegLinearLocation xsi:type="dx223:TpegLinearLocation">
 		<dx223:tpegDirection xsi:type="dx223:DirectionEnum">anticlockwise</dx223:tpegDirection>
 		<dx223:tpegLinearLocationType xsi:type="dx223:TpegLoc01LinearLocationSubtypeEnum">segment</dx223:tpegLinearLocationType>
 		<dx223:to xsi:type="dx223:TpegNonJunctionPoint">
 			<dx223:pointCoordinates xsi:type="dx223:PointCoordinates">
 				<dx223:latitude xsi:type="dx223:Float">46.8046989</dx223:latitude>
 				<dx223:longitude xsi:type="dx223:Float">7.16811705</dx223:longitude>
 			</dx223:pointCoordinates>
 			<dx223:name xsi:type="dx223:TpegOtherPointDescriptor">
 				<dx223:descriptor xsi:type="dx223:MultilingualString">
 					<dx223:values>
  <dx223:value xsi:type="dx223:MultilingualStringValue" lang="de-CH">Rue de la Samaritaine 40, Fribourg</dx223:value>
 					</dx223:values>
 				</dx223:descriptor>
 				<dx223:tpegOtherPointDescriptorType xsi:type="dx223:TpegLoc03OtherPointDescriptorSubtypeEnum">pointName</dx223:tpegOtherPointDescriptorType>
 			</dx223:name>
 		</dx223:to>
 		<dx223:from xsi:type="dx223:TpegNonJunctionPoint">
 			<dx223:pointCoordinates xsi:type="dx223:PointCoordinates">
 				<dx223:latitude xsi:type="dx223:Float">46.8050461</dx223:latitude>
 				<dx223:longitude xsi:type="dx223:Float">7.16782188</dx223:longitude>
 			</dx223:pointCoordinates>
 			<dx223:name xsi:type="dx223:TpegOtherPointDescriptor">
 				<dx223:descriptor xsi:type="dx223:MultilingualString">
 					<dx223:values>
  <dx223:value xsi:type="dx223:MultilingualStringValue" lang="de-CH">Rue de la Samaritaine 26, Fribourg</dx223:value>
 					</dx223:values>
 				</dx223:descriptor>
 				<dx223:tpegOtherPointDescriptorType xsi:type="dx223:TpegLoc03OtherPointDescriptorSubtypeEnum">pointName</dx223:tpegOtherPointDescriptorType>
 			</dx223:name>
 		</dx223:from>
 	</dx223:tpegLinearLocation>
 </dx223:groupOfLocations>

References

#AutoTranslate