Vector Flow Tiles
Purpose
The Traffic API Vector Flow Tiles endpoint provides data on zoom levels ranging from 0 to 22.
- For zoom level
0, the world is displayed on a single tile. - At zoom level
22, the world is divided into 244 tiles. See the Zoom Levels and Tile Grid .
The service delivers traffic flow data packaged in a vector representation of squared sections called vector tiles.
- Each tile includes a pre-defined collection of road shapes with traffic flow data.
- The format of the tile is formally described using the protobuf schema .
It can show both the current speed of traffic on different road segments, and the difference between current speed and the free-flow speed on the road segment.
Tiles resolution
Road geometry is stored as coordinates in the range of 0-4095. Coordinates (0,0) define the top-left corner of the tile.
Vector format
The Vector format is a binary format created by using Google Protocol Buffers to serialize the data according to this defined vector schema .
- The data is mapped to a protobuf layer called “Traffic flow”.
- Besides the protobuf layers, the protobuf tags are also used to further describe the traffic.
- The protobuf tags are split into two categories: default and on-demand.
- The default tags are used unless they are filtered out by the
tagsattribute. - The on-demand tags are used only if they were added by the
tagsattribute. - The on-demand tags marked as EXPLICIT must be added to tags list explicitly - they are not included automatically when using a wildcard.
- The default tags are used unless they are filtered out by the
Currently, the following Traffic flow tags are used.
Default tags
| Tag | Description |
|---|---|
| The tag value describes the road category.
|
| The tag presence indicates if the road has a subcategory.
Not all road categories have subcategories.
|
| The tag value indicates the speed relative to free-flow traffic. |
| The tag presence indicates if the road has left-hand traffic.
If the tag is not present the road has right-hand traffic. |
| The tag presence indicates if the road is closed to traffic.
If the tag is not present the road is not closed and is passable. |
| The tag value represents the ranking of the road based on its importance and relevance. It can be used for filtering.
Allowed values: |
On-demand tags
| Tag | Description |
|---|---|
| The tag value indicates the absolute speed in kmph (kilometers per hour). |
| The tag presence indicates if the traffic is part of a two-way road (two different geometries, each with a value for one side). If the tag is not present, the flow covers the whole one-way road. |
| The OpenLR code describing the flow section. |
Request data
HTTPS method: GET
- Constants and parameters enclosed in curly brackets { } must be replaced with their values.
- Please see the following Request parameters section with the required and optional parameters tables for their values. The generic request format is as follows.
https://{baseURL}/maps/orbis/traffic/flow/vector/tile/{zoom}/{x}/{y}?apiVersion=2&key={Your_API_Key}https://api.tomtom.com/maps/orbis/traffic/flow/vector/tile/5/4/8?apiVersion=2&key={Your_API_Key}curl 'https://api.tomtom.com/maps/orbis/traffic/flow/vector/tile/5/4/8?apiVersion=2' -H "TomTom-Api-Key: {Your_API_Key}"Request parameters
These elements are used in calls to generate all vector tile layers.
- Required parameters must be used or the call will fail.
- Parameters and values are case-sensitive.
- Optional parameters may be used.
| Required parameters | Description |
|---|---|
| The base URL for calling TomTom services. |
| The zoom level of a tile to be rendered. |
| The x coordinate of a tile on the zoom grid. |
| The y coordinate of a tile on the zoom grid. |
| An API Key valid for the requested service. |
| Optional parameters | Description |
|---|---|
| Contains a version of the API to call. |
| A list of selected fields to apply on response content, specified in dot-notation. |
Request headers
| Required headers | Description |
|---|---|
| TomTom-Api-Key | An API Key valid for the requested service. |
| TomTom-Api-Version | Contains a version of the API to call. |
| Optional headers | Description |
|---|---|
| Accept | Advertises which content types, expressed as MIME types, the client is
able to understand. In this service, the header is used to specify a
preferred response format.
If the preferred format is not supported, the server will fall back to the default one. |
| Accept-Encoding | Contains the content encoding (usually a compression algorithm),
that the client is able to understand. |
| Attributes | A list of selected fields to apply on response content, specified in dot-notation. |
| Attributes-Exclude | A list of selected fields to omit specific content added to the response, specified in dot-notation. |
| If-None-Match | Contains an identifier for a specific version of a resource. The server
will send back the requested resource with a 200 HTTP status code, only
if it doesn’t have an ETag matching the given one. |
| Tracking-ID | Specifies an identifier for the request.
Value: |
Attributes
Attributes header
A list of selected fields to apply on response content, specified in dot-notation. Nested fields are expressed using . separators and optional grouped subfields using parentheses.
Attributes header must contain at least one valid top-level field. Using only a top-level * wildcard is not allowed.
When a field name refers to a non-primitive object, all its non-EXPLICIT subfields are returned by default unless further restricted in the header. EXPLICIT fields (as documented per API) are only returned when they are explicitly listed in Attributes (they are never included solely by selecting their parent or by using *).
The * wildcard may be used only at non–top-level positions to include all non-EXPLICIT subfields of the selected object.
Syntax:
<field-list> ::= <field> (',' <field>)*<field> ::= <name> ('.' <field> | <field-set>)?<field-set> ::= '(' <field-set-list> ')'<field-set-list> ::= '*' (',' <field>)* | <field> (',' <field>)*<name> ::=one or more alphabetic characters
Note:
- All listed field names must exist in the attributes schema; unknown fields result in an error.
- Attributes schema can be found there .
- APIs may restrict which fields are allowed in
Attributes. Disallowed-but-existing fields result in an error. - New fields may be added over time. When they are marked EXPLICIT, they are not returned unless explicitly requested via
Attributes, preserving backward compatibility and performance. - If
attributesquery parameter is also supported by the endpoint - then it takes precedence overAttributes-Attributes-Excludeheader pair.
Examples:
tags.road_category, tags.road_subcategorytags(road_category, road_subcategory)tags(road_category, road_subcategory), roadCategories(motorway)roadCategories.*
Attributes-Exclude header
A list of selected fields to omit specific content added to the response, specified in dot-notation. Nested fields are expressed using . separators and optional grouped subfields using parentheses.
Any field listed in Attributes-Exclude, including its entire sub-tree, is omitted from the response, regardless of whether it was included implicitly or explicitly via the Attributes header. Exclusion always overrules inclusion.
The format of the field list is the same “listed dot-notation” used for the Attributes header:
Syntax:
<field-list> ::= <field> (',' <field>)*<field> ::= <name> ('.' <field> | <field-set>)?<field-set> ::= '(' <field-set-list> ')'<field-set-list> ::= '*' (',' <field>)* | <field> (',' <field>)*<name> ::=one or more alphabetic characters
Notes:
- The exclusion list is applied to the result of the inclusion list. If a parent field is excluded, all of its children are excluded, even if some of those children were explicitly listed in
Attributes. - When
Attributesheader inclusion list is not present in the request, thenAttributes-Excludeheader value is ignored. - Listed field names in
Attributes-Excludemust exist in the attributes schema; unknown fields result in an error. - Attributes schema can be found there .
- APIs may restrict which fields are allowed in
Attributes-Exclude. Disallowed-but-existing fields result in an error. - Fields may occur multiple times in
Attributes-Exclude(not recommended, but not an error). - Some overlap between
AttributesandAttributes-Excludeis allowed. In case of overlap, the exclusion takes precedence. - Whether a field is EXPLICIT or not does not change the semantics of exclusion: if it is present in
Attributes-Exclude, it is omitted whenever it would otherwise have been returned. - If all fields are excluded, then empty tile is returned.
- If
attributesquery parameter is also supported by the endpoint - then it takes precedence overAttributes-Attributes-Excludeheader pair.
Example:
Attributes: roadCategories.*
Attributes-Exclude: roadCategories.motorway_link
Results in all road categories being returned except for the motorway_link.
Attributes query parameter
A list of selected fields to apply on response content, specified in dot-notation. Nested fields are expressed using . separators and optional grouped subfields using parentheses.
attributes query parameter must contain at least one valid top-level field. Using only a top-level * wildcard is not allowed.
When a field name refers to a non-primitive object, all its non-EXPLICIT subfields are returned by default unless further restricted in the query parameter. EXPLICIT fields (as documented per API) are only returned when they are explicitly listed in attributes (they are never included solely by selecting their parent or by using *).
The * wildcard may be used only at non–top-level positions to include all non-EXPLICIT subfields of the selected object.
Syntax:
<field-list> ::= <field> (',' <field>)*<field> ::= <name> ('.' <field> | <field-set>)?<field-set> ::= '(' <field-set-list> ')'<field-set-list> ::= '*' (',' <field>)* | <field> (',' <field>)*<name> ::=one or more alphabetic characters
Note:
- All listed field names must exist in the attributes schema; unknown fields result in an error.
- Attributes schema can be found there .
- APIs may restrict which fields are allowed in
attributes. Disallowed-but-existing fields result in an error. - New fields may be added over time. When they are marked EXPLICIT, they are not returned unless explicitly requested via
attributes, preserving backward compatibility and performance. - The
attributesquery parameter takes precedence overAttributes-Attributes-Excludeheader pair.
Examples:
tags.road_category,tags.road_subcategorytags(road_category,road_subcategory)tags(road_category,road_subcategory),roadCategories(motorway)roadCategories.*
Attributes schema
| Attribute | Description |
|---|---|
| The list of the values representing the available tags in the tile.
By default, only the default tags are attached to the tile geometry. See Vector format for details.
|
| This attribute allows the choice of types of road
categories to be included in the response. The attribute
narrows down the road categories available at a
particular zoom level.
Default value: all road categories
|
Response data
Successful response
The Traffic Vector Flow Tiles API endpoint, for a single request, returns a binary response body which must be deserialized by client code generated by the Google Protocol Buffers compiler.
The following examples use a simple textual representation of the serialized binary vector tile data to illustrate the response content.
https://api.tomtom.com/maps/orbis/traffic/flow/vector/tile/17/64989/42178?apiVersion=2&key={Your_API_Key}layer: 0 name: Traffic flow version: 2 extent: 4096 feature: 0 id: (none) geomtype: linestring geometry: LINESTRING[count=3](3002 -409,2964 1292,2842 2382) LINESTRING[count=3](2842 2382,2964 1292,3002 -409) properties: road_category="primary" [string] relative_speed=0 [double] left_hand_traffic=1 [bool] feature: 1 id: (none) geomtype: linestring geometry: LINESTRING[count=8](-409 656,-108 810,1260 1620,1832 1914,2842 2382,3792 2644,4400 2770,4505 2783) properties: road_category="primary" [string] relative_speed=0.7 [double] left_hand_traffic=1 [bool] feature: 2 id: (none) geomtype: linestring geometry: LINESTRING[count=10](4505 2766,4418 2752,3882 2660,3406 2552,2920 2430,2700 2308,2276 2114,1952 1958,940 1430,-409 648) properties: road_category="secondary" [string] relative_speed=0.77 [double] left_hand_traffic=1 [bool] feature: 3 id: (none) geomtype: linestring geometry: LINESTRING[count=7](2842 2382,2806 2752,2826 2932,3062 3494,3528 3882,4122 4366,4222 4505) LINESTRING[count=7](4222 4505,4122 4366,3528 3882,3062 3494,2826 2932,2806 2752,2842 2382) properties: road_category="primary" [string] relative_speed=1 [double] left_hand_traffic=1 [bool]Error response
The Traffic Vector Flow Tiles API endpoint for an invalid single request returns a response body in JSON format.
Error response field structure
| Field | Description |
|---|---|
| Main object of the error response. |
| One of a server-defined set of error codes. |
| A human-readable description of the error code. |
{ "detailedError": { "code": "INVALID_REQUEST", "message": "Invalid zoom value. Allowed values are <0,22>." }}Response codes
| Code | Meaning & possible causes |
|---|---|
200 | OK |
400 | Bad request:
|
403 | Forbidden: The supplied API Key is not valid for this request. |
405 | Method Not Allowed: The provided HTTP request method is known by the server, but is not supported by the target resource. |
429 | Too Many Requests: Too many requests were sent in a given amount of time for the supplied API Key. |
500 | Internal Server Error: There is a problem with the TomTom Traffic Vector Flow Tiles API endpoint. |
503 | Service currently unavailable |
596 | Service Not Found: Unknown version of the service. |
Response headers
The following table lists HTTP response headers of particular interest to clients of the Traffic API Vector Flow Tiles endpoint.
| Header | Description |
|---|---|
| Access-Control-Allow-Origin | Indicates that cross-origin resource sharing (CORS) is allowed. |
| Allow | Lists the set of supported HTTP methods. The header is sent in case a |
| Cache-Control | Contains directives for a caching mechanism. Value: |
| Content-Encoding | Indicates which encodings were applied to the response body. |
| Content-Length | Contains information about the size of the response body. |
| Content-Type | Indicates the media type of the resource returned. |
| Date | Contains the date and time when the message was originated. |
| ETag | Contains an identifier for a specific version of resource. |
| Tracking-ID | An identifier for the request. If the Tracking-ID
header was specified in the request, it is replicated in the response.
Otherwise, it is generated automatically by the service. For details
check RFC 4122 . It is only meant to
be used for support and does not involve tracking of you or your users
in any form. |