Route Analysis
Purpose
The Traffic Stats API Route Analysis service calculates the statistics for a defined route between an origin and a destination, optionally via waypoints. This service is asynchronous.
There are two endpoints consuming two types of requests. The first one is only for ordering jobs with POST requests.
In its response the user receives a jobId
, which should be used in the second endpoint with a GET
request to
the check job's status. When the job is successfully finished, the user will receive links in the response to
download the results.
Using this service
There are some important notes about using this API service:
- The latitude and longitude coordinates are in EPSG4326 / WGS84 format for both input and output. Other coordinate systems are not supported.
- All averages are calculated arithmetically unless otherwise stated (example JSON field: harmonicAverageSpeed is calculated harmonically).
- The current API version is 1.
- The maximum route length is 200 kilometers. Routes longer than this will be rejected.
- The maximum number of routes is 20.
- The maximum number of unique days in all date ranges is 732.
- The maximum length of date range is 366 days.
- The maximum number of date ranges is 24.
- The maximum number of time sets is 24.
- When you define a route you should use it via points. Without via points there is no guarantee that the route that routing engine is using is the route you want to measure.
- As the service is asynchronous it can take a while before results are available, depending on how busy the service is. Do not repost your request multiple times if you do not get feedback within seconds, we will ensure that the results are delivered.
- At the same time you can have only 5 jobs in CALCULATIONS and SCHEDULED statuses per each developer key. When you reach this limit you can still create new jobs as they will be queued until at least one of currently running jobs is done.
Request data
HTTPS method: POST
Constants and parameters enclosed in curly brackets { } must be replaced with their values.
URL format
https://{baseURL}/traffic/trafficstats/routeanalysis/{versionNumber}?key={Your_API_Key}
curl format
curl -XPOST 'https://{baseURL}/traffic/trafficstats/routeanalysis/{versionNumber}?key={Your_API_Key}'
Required headers
Header | Value |
---|---|
|
Request parameters
The following table describes all of the parameters that can be used in a request. Required parameters must be used or the call will fail. Optional parameters may be used.
Required parameters | Description |
---|---|
| Base URL for calling the API. |
| Service version number. |
| Authorization key for access to the API. |
Request POST body example - JSON
1{2 "jobName": "Test job",3 "distanceUnit": "KILOMETERS",4 "mapVersion": "2022.12",5 "acceptMode": "AUTO",6 "routes": [7 {8 "name": "Some Route",9 "start": {10 "latitude": 51.7822,11 "longitude": 4.6168912 },13 "via": [14 {15 "latitude": 51.78153,16 "longitude": 4.6055917 }18 ],19 "end": {20 "latitude": 51.78555,21 "longitude": 4.6107622 },23 "fullTraversal": false,24 "zoneId": "Europe/Amsterdam",25 "probeSource": "ALL"26 }27 ],28 "dateRanges": [29 {30 "name": "October 2022",31 "from": "2022-10-01",32 "to": "2022-10-31",33 "exclusions": ["2022-10-06"]34 }35 ],36 "timeSets": [37 {38 "name": "Friday morning hour",39 "timeGroups": [40 {41 "days": ["FRI"],42 "times": ["7:00-8:00"]43 }44 ]45 }46 ]47}
Request POST body parameters - JSON
The following JSON parameters refer to the POST request body.
Required parameters | Description |
---|---|
| Job name. Given for the user's convenience. |
| Base unit used for distance and speed values.
|
| Routes for calculations. See the Structure of routes section. |
| Ranges of dates for calculations. See the Structure of dateRanges section. |
| Time sets for calculations. The first time set is a "Base Set" and every
other time set will be compared to it in the output (example JSON field:
travelTimeRatio).
See the Structure of timeSets section. |
Optional parameters | Description |
---|---|
| What map should be used. A list of currently available maps in all Traffic
Stats API services can be checked at Available Maps. |
| Defines whether the job should be accepted manually or automatically. |
| If the average sample size for any combination of route, date range,
and time set will be lower than the given value, then the output will
not be generated, and the job will be moved into the REJECTED
state, and the user will not be charged for such report. If not
specified, the output will always be generated no matter how many
samples were available. |
Structure of the route
Required parameters | Description |
---|---|
| Name of the route. Given for the user's convenience. |
| Point where the route starts
Value: Longitude & latitude |
| Point where the route ends
Value: Longitude & latitude |
| When you only want vehicles that traversed the full route taken into
account, you need to use this parameter. |
| In which time zone all times are given. |
Optional parameters | Description |
---|---|
| List of points through which the route should go.
Value: List of objects: longitude & latitude |
| Determines from what devices data will be used.
|
Structure of dateRange
Required parameters | Description |
---|---|
| Date range name. Given for the user's convenience. |
| The date from (inclusive). |
| The date to (inclusive). |
Optional parameters | Description |
---|---|
| List of days excluded from the date range. |
| List of days of the week to be excluded.
|
Structure of timeSets
Required parameters | Description |
---|---|
| Time set name. |
| Time groups in the time set.
|
Response data
In the response to the request a jobId
is provided, which is required for further communication about
the query. A JSON response content example:
1{2 "jobId": "677",3 "responseStatus": "OK",4 "messages": ["Job created. Processing started."]5}
Check job status
When a job has been initiated via the API request, it is possible to check the status.
Job status request
https://{baseURL}/traffic/trafficstats/status/{versionNumber}/{job_id}?key={Your_API_Key}
Job status request parameters
The below table describes all of the parameters that can be used in a request. Required parameters must be used or the call will fail. Optional parameters may be used.
Parameter | Description |
---|---|
| Base URL for calling the API. |
| Service version number. |
| The job ID. |
| Authorization key for access to the API. |
JSON response
1{2 "jobId": "{job_id}",3 "jobState": "{job_status}",4 "responseStatus": "OK"5}
Job status flow
During the process there are different stages applicable. Via the get state request you can see what the state of your job is. The following table shows the different stages of the process.
Status | Description |
---|---|
| The job is waiting for scheduling. |
| Job is scheduled for calculations. |
| Mapmatching is in progress. |
| Mapmatching is done and the job is waiting for Geobase reading. |
| Geobase reading is in progress. |
| Calculations are in progress. |
| Occurs only if manual acceptance mode was used. The results are waiting to be accepted or rejected. In this state sample summaries for the job are provided when checking the job status. |
| Calculations are done. The results are waiting to be downloaded. |
| The job stopped due to the fact that something went wrong. This can occur at any place in the flow. |
| The job is rejected. During processing it turned out that the job exceeds set limits, at least one of routes cannot be processed (route between points cannot be generated or is on area which is not supported), or there are less samples than required (see averageSampleSizeThreshold ). This can occur at any place in the flow. |
| The job is cancelled. The owner of the job stopped processing it. It can be done at any time before the job is processed. |
| The job is older than 2 years and all data has been removed. |
Confirming job results
When the job's state is NEED_CONFIRMATION
, then a summary URL will be available in the response.
1{2 "jobId": "{job_id}",3 "jobState": "NEED_CONFIRMATION",4 "sampleDetailsUrl": "{url_for_sample_details_file}",5 "responseStatus": "OK",6 "messages": ["For more details see: {url_for_sample_details_file}"]7}
A sample details file looks like this:
1{2 "summaries": [3 {4 "locationName": "Some Route",5 "dateRangeName": "October 2022",6 "timeSetName": "Friday morning hour",7 "averageSampleSize": 150.93,8 "networkLength": 2.07,9 "coveredNetworkLength": 2.07,10 "distanceUnit": "KILOMETERS"11 }12 ]13}
If you wish to accept the job, make the following request:
https://{baseURL}/traffic/trafficstats/status/{versionNumber}/{job_id}/accept?key={Your_API_Key}
Otherwise reject the job with the following request:
https://{baseURL}/traffic/trafficstats/status/{versionNumber}/{job_id}/reject?key={Your_API_Key}
Response data
Final DONE response
1{2 "jobId": "{job_id}",3 "jobState": "DONE",4 "responseStatus": "OK",5 "urls": [6 "{url_for_xlsx_result_file}",7 "{url_for_json_result_file}",8 "{url_for_geojson_result_file}",9 "{url_for_shape_result_file}"10 ]11}
Results
Output of Route Analysis is available in the following formats:
- XLSX
- JSON
- GeoJSON
- SHAPE
JSON results are provided in a gzip compressed format. GeoJSON and SHAPE files are packed into zip archives. If you want to get an example of these files please click the applicable link in the preceding list.
JSON result description
Field(s) | Description |
---|---|
| From the request. |
| The job creation time. |
| Requested preference. |
| From the request
|
| From the request. |
| Data for each requested route. |
Structure of timeSets
Field(s) | Description |
---|---|
| Helper reference for further use (in routes.segmentResults.segmentTimeResults). |
| From and as in the request. |
| Time ranges from the request, grouped per day of the week:
|
Structure of routes
Field(s) | Description |
---|---|
| From and as in the request. |
| From and as in the request. |
| Version of maps used for map matching. |
| Data for each segment in given route. See Structure of segmentResults. |
| Summary reports for each calculated date range-time set pair for the whole route. See Structure of summaries. |
Structure of segmentResults
Field(s) | Description |
---|---|
| Depending on the map on which job is processed it can be a MultiNet
Segment ID (optionally prefixed by |
| Depending on the map on which job is processed it can be a MultiNet-R
Segment ID (optionally prefixed by |
| Speed limit (in kmph or mph according to |
| Functional Road Class. |
| The street name. |
| The length of a segment (in meters or feet according to
|
| Geometrical shape of a segment. A list of pairs: longitude & latitude. |
| See the Structure of segmentTimeResults section. |
Structure of segmentTimeResults
Field | Description |
---|---|
| Reference to |
| Reference to |
| Harmonic average speed (in kmph or mph according to
|
| Median speed (in kmph or mph according to |
| Average speed (in kmph or mph according to |
| Standard deviation of speed (in kmph or mph according to
|
| Standard deviation of travel time (in seconds). |
| The sample size visible on the segment. These are unique vehicles traveling on segment. If several measurements are received from the same vehicle on a single segment it is only counted once in the sample size count. |
| Average travel time (in seconds). |
| Median travel time (in seconds). |
| Ratio of travel time in the current |
| Percentile speeds in ascending order: 5th, 10th, ... 90th, 95th (in kmph
or mph according to |
Structure of summaries
Field | Description |
---|---|
| Reference to DateRange in which calculations were made. |
| Reference to TimeSet in which calculations were made. |
| The length of whole route (in meters or feet according to |
| Summary length of segments covered with data (as above). |
| The total sample size divided by the amount of segments. These are unique vehicles traveling on each segment in each time period. If several measurements are received from the same vehicle on a single segment it is only counted once in the sample size count. |
| Harmonic average speed for the covered part of route. |
| Average travel time for the covered part of route. |
| Median travel time for the covered part of route. |
| Travel time standard deviation (in seconds). Only for full traversal routes. |
| Ratio of average travel time in the current |
| Ratio of 95th travel time percentile in the current |
| Percentile travel time in ascending order: 5th, 10th, ... 90th, 95th (in seconds). |
| Percentile speeds in ascending order: 5th, 10th, ... 90th, 95th (in kmph
or mph according to |