Skip to content

Travel Speeds

A main component that determines things such as fastest routes and the travel time for isochrones and route instructions is travel speed. This value is determined differently depending on the profile and can be affected by a number of aspects.

Travel Time Calculation

The travel time is calculated for each segment by using speed-limits for different waytypes and adjusting them for different surfaces or surface qualities of the road. If multiple values apply at any point, the lowest value is used.

The speed limits can be reduced by setting the maximum_speed parameter in a directions request. The final average speed can be requested by adding avgspeed to the attributes parameter.

Driving profiles (car and HGV)

The base travel speed for any road is based on a cascading assessment:

  1. When a tag explicitly stating the speed limit for a road is present on the way in OSM (maxspeed or maxspeed:forward / maxspeed:backward), this is used as the base speed.
  2. If the way has a zone:maxspeed or zone:traffic tag, this is compared to country-specific values in the max_speeds array of the speed value files. An overview can be found in the country speed table. This value is then used as the base speed.
  3. If neither of the above set a base speed, then the type of way (highway= tag) determines the base speed. Values are defined in the speed value files. The waytype speed table gives an overview.
  4. If it is a track (highway=track) then the base speed is set based on the tracktype tag compared to values in the speed value files. The tracktype speed table gives an overview.

If the determined base speed is one resulting from a maxspeed-tag or from a country speed table (i.e. Steps 1 or 2), it is reduced to 90% of its original value, since it is more common that you would be travelling below the maximum speed value. The waytype and tracktype defaults have already been chosen rather conservatively, so they are not adjusted.

Following that, it is further modified based on a number of other factors:

  • If a surface is defined (surface=*) then the surface value is set to be the corresponding surface type value defined in the speed value files. An overview can be found in the surface speed table.
  • Attempt to take into account reduced speeds in residential areas using acceleration modifier or a residential penalty
  • cap speed if it is entering a roundabout (based on number of lanes and roundabout type - mini roundabout = 25km/h, 1 lane = 35km/h, 2 or more lanes = 40km/h)

Bike profiles

Bike profiles determine their speeds based on a number of defaults set in the code based on surface, highway type, and track type. Though there is currently a speed_limits file present in the resources for bike profiles, these values are not used in the calculation

The speeds used can be found in the CommonBikeFlagEncoder for the default values and regular bike profile, MountainBikeFlagEncoder for the mountain bike profile, RoadBikeFlagEncoder for the road bike, and ElectroBikeFlagEncoder for the electric bike.

Note that each bike profile has a different value set for the maximum downhill speed which is calculated when consider_elevation=true is set in the ors-config.json. Currently, this option is turned off for openrouteservice live servers as it can lead to undesirable routes.

Walking profiles

The travel speeds for foot-* profiles (walking and hiking) are set to 5 km/h on all allowed waytypes. For ways with a sac_scale higher than hiking, they are reduced to 2 km/h.

Allowed waytypes consist of ways that are safe for use, ways that are better avoided (but still allowed) and other allowed ways in between:

safe tagsavoid tagsother highway tags

Wheelchair profile

The wheelchair profile has a base speed of 4km/h which is then modified based on a number of parameters. As such, based on the presence of sidewalks and type of way, the actual speed can range from 3 to 10km/h