- Changes from 5.21.0
- Build:
- ADDED: optionally build Node
lts
andlatest
bindings #5347
- ADDED: optionally build Node
- Features:
- Routing:
- Build:
- Changes from 5.20.0
- Features:
- ADDED: all waypoints in responses now contain a distance property between the original coordinate and the snapped location. #5255
- ADDED: if
fallback_speed
is used, a new structurefallback_speed_cells
will describe which cells contain estimated values #5259 - REMOVED: we no longer publish Node 4 or 6 binary modules (they are still buildable from source) #5314
- Table:
- ADDED: new parameter
scale_factor
which will scale the cellduration
values by this factor. #5298 - FIXED: only trigger
scale_factor
code to scan matrix when necessary. #5303 - FIXED: fix bug in reverse offset calculation that sometimes lead to negative (and other incorrect) values in distance table results #5315
- ADDED: new parameter
- Docker:
- Matching:
- CHANGED: matching will now consider edges marked with is_startpoint=false, allowing matching over ferries and other previously non-matchable edge types. #5297
- Profile:
- Features:
- Changes from 5.19.0:
- Table:
- CHANGED: switch to pre-calculated distances for table responses for large speedup and 10% memory increase. #5251
- ADDED: new parameter
fallback_speed
which will fillnull
cells with estimated value #5257 - CHANGED: Remove API check for matrix sources/destination length to be less than or equal to coordinates length. #5298
- FIXED: Fix crashing bug when using fallback_speed parameter with more sources than destinations. #5291
- Features:
- Windows:
- FIXED: Windows builds again. #5249
- Docker:
- CHANGED: switch from Alpine Linux to Debian Buster base images #5281
- Table:
- Changes from 5.18.0:
- Optimizations:
- Profiles:
- CHANGED: Bicycle profile now blacklists barriers instead of whitelisting them #5076
- CHANGED: Foot profile now blacklists barriers instead of whitelisting them #5077
- CHANGED: Support maxlength and maxweight in car profile [#5101](https://github.com/Project-OSRM/osrm-backend/pull/5101]
- Bugfixes:
- FIXED: collapsing of ExitRoundabout instructions #5114
- Misc:
- CHANGED: Support up to 512 named shared memory regions #5185
- Changes from 5.17.0:
- Features:
- Infrastructure:
- Profile:
- Changes from 5.17.0:
- Bugfixes:
- FIXED: Do not combine a segregated edge with a roundabout #5039
- Bugfixes:
- Changes from 5.16.0:
- Bugfixes:
- FIXED: deduplication of route steps when waypoints are used #4909
- FIXED: Use smaller range for U-turn angles in map-matching #4920
- FIXED: Remove the last short annotation segment in
trimShortSegments
#4946 - FIXED: Properly calculate annotations for speeds, durations and distances when waypoints are used with mapmatching #4949
- FIXED: Don't apply unimplemented SH and PH conditions in OpeningHours and add inversed date ranges #4992
- FIXED: integer overflow in
DynamicGraph::Renumber
#5021
- Profile:
- Guidance:
- CHANGED: Don't use obviousness for links bifurcations #4929
- FIXED: Adjust Straight direction modifiers of side roads in driveway handler #4929
- CHANGED: Added post process logic to collapse segregated turn instructions #4925
- ADDED: Maneuver relation now supports
straight
as a direction #4995 - FIXED: Support spelling maneuver relation with British spelling #4950
- Tools:
- ADDED:
osrm-routed
accepts a new property--memory_file
to store memory in a file on disk. #4881 - ADDED:
osrm-datastore
accepts a new parameter--dataset-name
to select the name of the dataset. #4982 - ADDED:
osrm-datastore
accepts a new parameter--list
to list all datasets loaded into memory. #4982 - ADDED:
osrm-datastore
accepts a new parameter--only-metric
to only reload the data that can be updated by a weight update (reduces memory for traffic updates). #5002 - ADDED:
osrm-routed
accepts a new parameter--dataset-name
to select the shared-memory dataset to use. #4982
- ADDED:
- NodeJS:
- Internals
- Documentation:
- ADDED: Add documentation about OSM node ids in nearest service response #4436
- Performance
- Misc:
- ADDED: expose name for datasource annotations as metadata #4973
- Bugfixes:
- Changes from 5.15.2:
- Guidance
- ADDED #4676: Support for maneuver override relation, allowing data-driven overrides for turn-by-turn instructions #4676
- CHANGED #4830: Announce reference change if names are empty
- CHANGED #4835: MAXIMAL_ALLOWED_SEPARATION_WIDTH increased to 12 meters
- CHANGED #4842: Lower priority links from a motorway now are used as motorway links #4842
- CHANGED #4895: Use ramp bifurcations as fork intersections #4895
- CHANGED #4893: Handle motorway forks with links as normal motorway intersections#4893
- FIXED #4905: Check required tags of
maneuver
relations #4905
- Profile:
- FIXED:
highway=service
will now be used for restricted access,access=private
is still disabled for snapping. - ADDED #4775: Exposes more information to the turn function, now being able to set turn weights with highway and access information of the turn as well as other roads at the intersection #4775
- FIXED #4763: Add support for non-numerical units in car profile for maxheight #4763
- ADDED #4872: Handling of
barrier=height_restrictor
nodes #4872
- FIXED:
- Guidance
- Changes from 5.15.1:
- Features:
- ADDED: Exposed the waypoints parameter in the node bindings interface
- Bugfixes:
- FIXED: Segfault causing bug in leg collapsing map matching when traversing edges in reverse
- Features:
- Changes from 5.15.0:
- Bugfixes:
- FIXED: Segfault in map matching when RouteLeg collapsing code is run on a match with multiple submatches
- Guidance:
- Set type of trivial intersections where classes change to Suppressed instead of NoTurn
- Bugfixes:
- Changes from 5.14.3:
- Bugfixes:
- FIXED #4704: Fixed regression in bearings reordering introduced in 5.13 #4704
- FIXED #4781: Fixed overflow exceptions in percent-encoding parsing
- FIXED #4770: Fixed exclude flags for single toll road scenario
- FIXED #4283: Fix overflow on zero duration segments
- FIXED #4804: Ignore no_*_on_red turn restrictions
- Guidance:
- CHANGED #4706: Guidance refactoring step to decouple intersection connectivity analysis and turn instructions generation #4706
- CHANGED #3491: Refactor
isThroughStreet
/Intersection options
- Profile:
- ADDED:
tunnel
as a new class in car profile so that sections of the route with tunnel tags will be marked as such
- ADDED:
- Bugfixes:
- Changes from 5.14.2:
- Features:
- Added a
waypoints
parameter to the match service plugin that accepts indices to input coordinates and treats only those points as waypoints in the response format.
- Added a
- Bugfixes:
- FIXED #4754: U-Turn penalties are applied to straight turns.
- FIXED #4756: Removed too restrictive road name check in the sliproad handler
- FIXED #4731: Use correct weights for edge-based graph duplicated via nodes.
- Profile:
- CHANGED: added Belarus speed limits
- CHANGED: set default urban speed in Ukraine to 50kmh
- Features:
- Changes from 5.14.1:
- Bugfixes:
- FIXED #4727: Erroring when a old .core file is present.
- FIXED #4642: Update checks for EMPTY_NAMEID to check for empty name strings
- FIXED #4738: Fix potential segmentation fault
- Node.js Bindings:
- ADDED: Exposed new
max_radiuses_map_matching
option fromEngingConfig
options
- ADDED: Exposed new
- Tools:
- ADDED: New osrm-routed
max_radiuses_map_matching
command line flag to optionally set a maximum radius for map matching
- ADDED: New osrm-routed
- Bugfixes:
- Changes from 5.14.0
- Bugfixes:
- FIXED: don't use removed alternative candidates in
filterPackedPathsByCellSharing
- FIXED: don't use removed alternative candidates in
- Bugfixes:
- Changes from 5.13
- API:
- ADDED: new RouteStep property
driving_side
that has either "left" or "right" for that step
- ADDED: new RouteStep property
- Misc:
- ADDED: Bundles a rough (please improve!) driving-side GeoJSON file for use with
osrm-extract --location-dependent-data data/driving_side.geojson
- CHANGED: Conditional turn parsing is disabled by default now
- ADDED: Adds a tool to analyze turn instruction generation in a dataset. Useful for tracking turn-by-turn heuristic changes over time.
- CHANGED: Internal refactoring of guidance code as a first step towards a re-runnable guidance pipeline
- ADDED: Now publishing Node 8.x LTS binary modules
- ADDED: Bundles a rough (please improve!) driving-side GeoJSON file for use with
- Profile:
- CHANGED: Remove dependency on turn types and turn modifier in the process_turn function in the
car.lua
profile. Guidance instruction types are not used to influence turn penalty anymore so this will break backward compatibility between profile version 3 and 4.
- CHANGED: Remove dependency on turn types and turn modifier in the process_turn function in the
- Guidance:
- ADDED: New internal flag on "segregated intersections" - in the future, will should allow collapsing of instructions across complex intersection geometry where humans only perceive a single maneuver
- CHANGED: Decrease roundabout turn radius threshold from 25m to 15m - adds some "exit the roundabout" instructions for moderately sized roundabouts that were being missed previously
- Docker:
- CHANGED: switch to alpine 3.6, and use a multistage build to reduce image size
- Build:
- FIX: use LUA_LIBRARY_DIRS to propertly detect Lua on all platforms
- Docs:
- FIX: clarify description of roundabout exit instructions
- Bugfixes:
- FIXED: Fix bug where merge instructions got the wrong direction modifier (PR #4670)
- FIXED: Properly use the
profile.properties.left_hand_driving
property, there was a typo that meant it had no effect - FIXED: undefined behaviour when alternative candidate via node is same as source node (#4691)
- FIXED: ensure libosrm.pc is pushed to the correct location for pkgconfig to find it on all platforms
- FIXED: don't consider empty names + empty refs as a valid name for u-turns
- API:
- Changes from 5.12:
- Profile:
- Append cardinal directions from route relations to ref fields to improve instructions; off by default see
profile.cardinal_directions
- Support of
distance
weight in foot and bicycle profiles - Support of relations processing
- Added
way:get_location_tag(key)
method to get location-dependent tags https://github.com/Project-OSRM/osrm-backend/wiki/Using-location-dependent-data-in-profiles - Added
forward_ref
andbackward_ref
support - Left-side driving mode is specified by a local Boolean flag
is_left_hand_driving
inExtractionWay
andExtractionTurn
- Support literal values for maxspeeds in NO, PL and ZA
- Append cardinal directions from route relations to ref fields to improve instructions; off by default see
- Infrastructure:
- Lua 5.1 support is removed due to lack of support in sol2 ThePhD/sol2#302
- Fixed pkg-config version of OSRM
- Removed
.osrm.core
file since CoreCH is deprecated now.
- Tools:
- Because of boost/program_options#32 with boost 1.65+ we needed to change the behavior of the following flags to not accept
={true|false}
anymore:--use-locations-cache=false
becomes--disable-location-cache
--parse-conditional-restrictions=true
becomes--parse-conditional-restrictions
- The deprecated options
--use-level-cache
and--generate-edge-lookup
- Because of boost/program_options#32 with boost 1.65+ we needed to change the behavior of the following flags to not accept
- Bugfixes:
- Fixed #4348: Some cases of sliproads pre-processing were broken
- Fixed #4331: Correctly compute left/right modifiers of forks in case the fork is curved.
- Fixed #4472: Correctly count the number of lanes using the delimter in
turn:lanes
tag. - Fixed #4214: Multiple runs of
osrm-partition
lead to crash. - Fixed #4348: Fix assorted problems around slip roads.
- Fixed #4420: A bug that would result in unnecessary instructions, due to problems in suffix/prefix detection
- Algorithm
- Deprecate CoreCH functionality. Usage of CoreCH specific options will fall back to using CH with core_factor of 1.0
- MLD uses a unidirectional Dijkstra for 1-to-N and N-to-1 matrices which yields speedup.
- Profile:
- Changes from 5.11:
- Guidance
- now announcing turning onto oneways at the end of a road (e.g. onto dual carriageways)
- Adds new instruction types at the exit of roundabouts and rotaries
exit roundabout
andexit rotary
.
- HTTP:
- New query parameter for route/table/match/trip plugings:
exclude=
that can be used to exclude certain classes (e.g. exclude=motorway, exclude=toll). This is configurable in the profile.
- New query parameter for route/table/match/trip plugings:
- NodeJS:
- New query option
exclude
for the route/table/match/trip plugins. (e.g.exclude: ["motorway", "toll"]
)
- New query option
- Profile:
- New property for profile table:
excludable
that can be used to configure which classes are excludable at query time. - New optional property for profile table:
classes
that allows you to specify which classes you expect to be used. We recommend this for better error messages around classes, otherwise the possible class names are infered automatically.
- New property for profile table:
- Traffic:
- If traffic data files contain an empty 4th column, they will update edge durations but not modify the edge weight. This is useful for updating ETAs returned, without changing route selection (for example, in a distance-based profile with traffic data loaded).
- Infrastructure:
- New file
.osrm.cell_metrics
created byosrm-customize
.
- New file
- Debug tiles:
- Added new properties
type
andmodifier
toturns
layer, useful for viewing guidance calculated turn types on the map
- Added new properties
- Guidance
- Changes from 5.10:
- Features
- BREAKING: Added support for conditional via-way restrictions. This features changes the file format of osrm.restrictions and requires re-extraction
- Internals
- BREAKING: Traffic signals will no longer be represented as turns internally. This requires re-processing of data but enables via-way turn restrictions across highway=traffic_signals
- Additional checks for empty segments when loading traffic data files
- Tunes the constants for turns in sharp curves just a tiny bit to circumvent a mix-up in fork directions at a specific intersection (Project-OSRM#4331)
- Infrastructure
- Refactor datafacade to make implementing additional DataFacades simpler
- Bugfixes
- API docs are now buildable again
- Suppress unnecessary extra turn instruction when exiting a motorway via a motorway_link onto a primary road (Project-OSRM#4348 scenario 4)
- Suppress unnecessary extra turn instruction when taking a tertiary_link road from a teritary onto a residential road (Project-OSRM#4348 scenario 2)
- Various MSVC++ build environment fixes
- Avoid a bug that crashes GCC6
- Re-include .npmignore to slim down published modules
- Fix a pre-processing bug where incorrect directions could be issued when two turns would have similar instructions and we tried to give them distinct values (Project-OSRM#4375)
- The entry bearing for correct the cardinality of a direction value (Project-OSRM#4353
- Change timezones in West Africa to the WAT zone so they're recognized on the Windows platform
- Features
- Changes from 5.9:
- Profiles:
- New version 2 profile API which cleans up a number of things and makes it easier to for profiles to include each other. Profiles using the old version 0 and 1 APIs are still supported.
- New required
setup()
function that must return a configuration hash. Storing configuration in globals is deprecated. - Passes the config hash returned in
setup()
as an argument toprocess_node/way/segment/turn
. - Properties are now set in
.properties
in the config hash returend by setup(). - initialize raster sources in
setup()
instead of in a separate callback. - Renames the
sources
helper toraster
. - Renames
way_functions
toprocess_way
(same for node, segment and turn). - Removes
get_restrictions()
. Instead set.restrictions
in the config hash insetup()
. - Removes
get_name_suffix_list()
. Instead set.suffix_list
in the config hash insetup()
. - Renames
Handlers
toWayHandlers
. - Pass functions instead of strings to
WayHandlers.run()
, so it's possible to mix in your own functions. - Reorders arguments to
WayHandlers
functions to matchprocess_way()
. - Profiles must return a hash of profile functions. This makes it easier for profiles to include each other.
- Guidance: add support for throughabouts
- Bugfixes
- Algorithm
- BREAKING: the file format requires re-processing due to the changes on via-ways
- Added support for via-way restrictions
- Profiles:
- API:
- `annotations=durations,weights,speeds` values no longer include turn penalty values ([#4330](https://github.com/Project-OSRM/osrm-backend/issues/4330))
- Infrastructure
- STXXL is not required by default
- Changes from 5.8:
- Algorithm:
- API:
- Exposes
alternatives=Number
parameter overload in addition to the boolean flag. - Support for exits numbers and names. New member
exits
inRouteStep
, based onjunction:ref
on ways Intersection
now has new parameterclasses
that can be set in the profile on each way.
- Exposes
- Profiles:
result.exits
allows you to set a way's exit numbers and names, seejunction:ref
ExtractionWay
now as new propertyforward_classes
andbackward_classes
that can set in theway_function
. The maximum number of classes is 8.- We now respect the
construction
tag. If theconstruction
tag value is not on our whitelist (minor
,widening
,no
) we will exclude the road.
- Node.js Bindings:
- Exposes
alternatives=Number
parameter overload in addition to the boolean flag - Expose
EngineConfig
options in the node bindings
- Exposes
- Tools:
- Exposes engine limit on number of alternatives to generate
--max-alternatives
inosrm-routed
(3 by default)
- Exposes engine limit on number of alternatives to generate
- Infrastructure
- STXXL is not required to build OSRM and is an optional dependency for back-compatibility (ENABLE_STXXL=On)
- OpenMP is only required when the optional STXXL dependency is used
- Bug fixes:
- #4278: Remove superflous continious instruction on a motorway.
- Changes from 5.7
- API:
- polyline6 support in request string
- new parameter
approaches
forroute
,table
,trip
andnearest
requests. This parameter keep waypoints on the curb side. 'approaches' accepts both 'curb' and 'unrestricted' values. Note : the curb side depend on theProfileProperties::left_hand_driving
, it's a global property set once by the profile. If you are working with a planet dataset, the api will be wrong in some countries, and right in others.
- NodeJs Bindings
- new parameter
approaches
forroute
,table
,trip
andnearest
requests.
- new parameter
- Tools
osrm-partition
now ensures it is called beforeosrm-contract
and removes inconsitent .hsgr files automatically.
- Features
- Added conditional restriction support with
parse-conditional-restrictions=true|false
to osrm-extract. This option saves conditional turn restrictions to the .restrictions file for parsing by contract later. Addedparse-conditionals-from-now=utc time stamp
and--time-zone-file=/path/to/file
to osrm-contract - Command-line tools (osrm-extract, osrm-contract, osrm-routed, etc) now return error codes and legible error messages for common problem scenarios, rather than ugly C++ crashes
- Speed up pre-processing by only running the Lua
node_function
for nodes that have tags. Cuts OSM file parsing time in half. - osrm-extract now performs generation of edge-expanded-edges using all available CPUs, which should make osrm-extract significantly faster on multi-CPU machines
- Added conditional restriction support with
- Files
- .osrm.nodes file was renamed to .nbg_nodes and .ebg_nodes was added
- Guidance
- #4075 Changed counting of exits on service roundabouts
- Debug Tiles
- added support for visualising turn penalties to the MLD plugin
- added support for showing the rate (reciprocal of weight) on each edge when used
- added support for turn weights in addition to turn durations in debug tiles
- Bugfixes
- Fixed a copy/paste issue assigning wrong directions in similar turns (left over right)
- #4074: fixed a bug that would announce entering highway ramps as u-turns
- #4122: osrm-routed/libosrm should throw exception when a dataset incompatible with the requested algorithm is loaded
- Avoid collapsing u-turns into combined turn instructions
- API:
- Bugfixes
- #4030 Roundabout edge-case crashes post-processing
- Changes from 5.6
- Algorithm:
- OSRM object has new option
algorithm
that allows the selection of a routing algorithm. - New experimental algorithm: Multi-Level Dijkstra with new toolchain:
- Allows for fast metric updates in below a minute on continental sized networks (osrm-customize)
- Plugins supported:
match
androute
- Quickstart:
osrm-extract data.osm.pbf
,osrm-partition data.osrm
,osrm-customize data.osrm
,osrm-routed --algorithm=MLD data.osrm
- OSRM object has new option
- NodeJs Bindings
- Merged https://github.com/Project-OSRM/node-osrm into repository. Build via
cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=On -DENABLE_MASON=On
. OSRM
object has new optionalgorihtm="CH","CoreCH","MLD"
- Merged https://github.com/Project-OSRM/node-osrm into repository. Build via
- Internals
- Shared memory notification via conditional variables on Linux or semaphore queue on OS X and Windows with a limit of 128 OSRM Engine instances
- Files
- .osrm.datasource_index file was removed. Data is now part of .osrm.geometries.
- .osrm.edge_lookup was removed. The option
--generate-edge-lookup
does nothing now. osrm-contract
does not depend on the.osrm.fileIndex
file anymoreosrm-extract
creates new file.osrm.cnbg
and.cnbg_to_ebg
osrm-partition
creates new file.osrm.partition
and.osrm.cells
osrm-customize
creates new file.osrm.mldgr
- Profiles
- Added
force_split_edges
flag to global properties. True value guarantees that segment_function will be called for all segments, but also could double memory consumption
- Added
- Map Matching:
- new option
gaps=split|ignore
to enable/disbale track splitting - new option
tidy=true|false
to simplify traces automatically
- new option
- Algorithm:
- Changes from 5.6.0
- Bugfixes
- #3790 Fix incorrect speed values in tile plugin
- Bugfixes
- Changes from 5.6.0
- Bugfixes
- Fix incorrect forward datasources getter in facade
- Bugfixes
- Changes from 5.6.0
- Bugfixes
- Fix #3754 add restricted penalty on NoTurn turns
- Bugfixes
- Changes from 5.5
- Bugfixes
- Fix #3475 removed an invalid
exit
field from thearrive
maneuver - Fix #3515 adjusted number of
nodes
inannotation
- Fix #3605 Fixed a bug that could lead to turns at the end of the road to be suppressed
- Fix #2844 handle up to 16777215 code units in OSM names
- Fix #3475 removed an invalid
- Infrastructure
- Support building rpm packages.
- Guidance
- No longer emitting turns on ferries, if a ferry should use multiple docking locations
- Profiles
- Removed the
./profile.lua -> ./profiles/car.lua
symlink. Use specific profiles from theprofiles
directory. properties
object has a newweight_name
field, default value is "duration"properties
object has a newweight_precision
field that specifies a decimal precision of edge weights, default value 1- In
way_function
the filedforward_rate
andbackward_rate
ofExtractionWay
can now be set. They have the same interpretation for the way weight asforward_speed
andbackward_speed
for the edge duration. The unit of rate is meters per weight unit, so higher values will be prefered during routing. turn_function
now does not return an integer but takes in aExtractionTurn
object and can modify theweight
andduration
fieldssegment_function
now takes in aExtractionSegment
object and can modifyweight
andduration
fieldsproperties.uturn_penalty
is deprecated. Set it in theturn_function
. The turn type is exposed asExtractionTurn::direction_modifier
.properties.traffic_light_penalty
is deprecated. Traffic light penalties now need to be set over in the turn function. Each turn with a traffic light is marked withExtractionTurn::has_traffic_light = true
.- Renamed the helper file
profiles/lib/directional.lua
toprofiles/lib/tags.lua
since it now provides more general tags parsing utility functions. - The car and foot profiles now depend on the helper file
profiles/lib/handlers.lua
.
- Removed the
- Infrastructure
- Disabled link-time optimized (LTO) builds by default. Enable by passing
-DENABLE_LTO=ON
tocmake
if you need the performance and know what you are doing. - Datafile versioning is now based on OSRM semver values, rather than source code checksums. Datafiles are compatible between patch levels, but incompatible between minor version or higher bumps.
- libOSRM now creates an own watcher thread then used in shared memory mode to listen for data updates
- Disabled link-time optimized (LTO) builds by default. Enable by passing
- Tools:
- Added osrm-extract-conditionals tool for checking conditional values in OSM data
- Trip Plugin
- Added a new feature that finds the optimal route given a list of waypoints, a source and a destination. This does not return a roundtrip and instead returns a one way optimal route from the fixed source to the destination points.
- Bugfixes
- Changes from 5.5.0
- API:
- Adds
generate_hints=true
(true
by default) which lets user disableHint
generating in the response. Use if you don't needHint
s!
- Adds
- Bugfixes
- Fix #3418 and ensure we only return bearings in the range 0-359 in API responses
- Fixed a bug that could lead to emitting false instructions for staying on a roundabout
- API:
- Changes from 5.4.0
- API:
osrm-datastore
now accepts the parameter--max-wait
that specifies how long it waits before aquiring a shared memory lock by force- Shared memory now allows for multiple clients (multiple instances of libosrm on the same segment)
- Polyline geometries can now be requested with precision 5 as well as with precision 6
- Profiles
- the car profile has been refactored into smaller functions
- get_value_by_key() is now guaranteed never to return empty strings, nil is returned instead.
- debug.lua was added to make it easier to test/develop profile code.
car.lua
now depends on lib/set.lua and lib/sequence.luarestrictions
is now used for namespaced restrictions and restriction exceptions (e.g.restriction:motorcar=
as well asexcept=motorcar
)- replaced lhs/rhs profiles by using test defined profiles
- Handle
oneway=alternating
(routed over with penalty) separately fromoneway=reversible
(not routed over due to time dependence) - Handle
destination:forward
,destination:backward
,destination:ref:forward
,destination:ref:backward
tags - Properly handle destinations on
oneway=-1
roads
- Guidance
- Notifications are now exposed more prominently, announcing turns onto a ferry/pushing your bike more prominently
- Improved turn angle calculation, detecting offsets due to lanes / minor variations due to inaccuracies
- Corrected the bearings returned for intermediate steps - requires reprocessing
- Improved turn locations for collapsed turns
- Sliproad classification refinements: the situations we detect as Sliproads now resemble more closely the reality
- Trip Plugin
- changed internal behaviour to prefer the smallest lexicographic result over the largest one
- Bugfixes
- fixed a bug where polyline decoding on a defective polyline could end up in out-of-bound access on a vector
- fixed compile errors in tile unit-test framework
- fixed a bug that could result in inconsistent behaviour when collapsing instructions
- fixed a bug that could result in crashes when leaving a ferry directly onto a motorway ramp
- fixed a bug in the tile plugin that resulted in discovering invalid edges for connections
- improved error messages when missing files during traffic updates (#3114)
- For single coordinate geometries the GeoJSON
Point
encoding was broken. We now always emitLineString
s even in the one-coordinate-case (backwards compatible) (#3425)
- Debug Tiles
- Added support for turn penalties
- Internals
- Internal/Shared memory datafacades now share common memory layout and data loading code
- File reading now has much better error handling
- Misc
- Progress indicators now print newlines when stdout is not a TTY
- Prettier API documentation now generated via
npm run build-api-docs
outputbuild/docs
- API:
- Changes from 5.4.2
- Bugfixes
- #3254 Fixed a bug that could end up hiding roundabout instructions
- #3260 fixed a bug that provided the wrong location in the arrival instruction
- Bugfixes
- Changes from 5.4.1
- Bugfixes
- #3032 Fixed a bug that could result in emitting
invalid
as an instruction type on sliproads with mode changes - #3085 Fixed an outdated assertion that could throw without a cause for concern
- #3179 Fixed a bug that could trigger an assertion in TurnInstruciton generation
- #3032 Fixed a bug that could result in emitting
- Bugfixes
- Changes from 5.4.0
- Bugfixes
- #3016: Fixes shared memory updates while queries are running
- Bugfixes
- Changes from 5.3.0
- Profiles
- includes library guidance.lua that offers preliminary configuration on guidance.
- added left_hand_driving flag in global profile properties
- modified turn penalty function for car profile - better fit to real data
- return
ref
andname
as separate fields. Do no use ref or destination as fallback for name value - the default profile for car now ignores HOV only roads
- Guidance
- Handle Access tags for lanes, only considering valid lanes in lane-guidance (think car | car | bike | car)
- Improved the detection of non-noticeable name-changes
- Summaries have been improved to consider references as well
- API:
annotations=true
now returns the data source id for each segment asdatasources
- Reduced semantic of merge to refer only to merges from a lane onto a motorway-like road
- new
ref
field in theRouteStep
object. It contains the reference code or name of a way. Previously merged into thename
property likename (ref)
and are now separate fields.
- Bugfixes
- Fixed an issue that would result in segfaults for viaroutes with an invalid intermediate segment when u-turns were allowed at the via-location
- Invalid only_* restrictions could result in loss of connectivity. As a fallback, we assume all turns allowed when the restriction is not valid
- Fixed a bug that could result in an infinite loop when finding information about an upcoming intersection
- Fixed a bug that led to not discovering if a road simply looses a considered prefix
- BREAKING: Fixed a bug that could crash postprocessing of instructions on invalid roundabout taggings. This change requires reprocessing datasets with osrm-extract and osrm-contract
- Fixed an issue that could emit
invalid
as instruction when ending on a sliproad after a traffic-light - Fixed an issue that would detect turning circles as sliproads
- Fixed a bug where post-processing instructions (e.g. left + left -> uturn) could result in false pronunciations
- Fixes a bug where a bearing range of zero would cause exhaustive graph traversals
- Fixes a bug where certain looped geometries could cause an infinite loop during extraction
- Fixed a bug where some roads could be falsly identified as sliproads
- Fixed a bug where roundabout intersections could result in breaking assertions when immediately exited
- Infrastructure:
- Adds a feature to limit results in nearest service with a default of 100 in
osrm-routed
- Adds a feature to limit results in nearest service with a default of 100 in
- Profiles
-
Changes from 5.3.0-rc.3
- Guidance
- Only announce
use lane
on required turns (not using all lanes to go straight) - Moved
lanes
to the intersection objects. This is BREAKING in relation to other Release Candidates but not with respect to other releases.
- Only announce
- Bugfixes
- Fix BREAKING: bug that could result in failure to load 'osrm.icd' files. This breaks the dataformat
- Fix: bug that results in segfaults when
use lane
instructions are suppressed
- Guidance
-
Changes form 5.2.7
- API
- Introduces new
TurnType
in the form ofuse lane
. The type indicates that you have to stick to a lane without turning - Introduces
lanes
to theIntersection
object. The lane data contains both the markings at the intersection and a flag indicating if they can be chosen for the next turn - Removed unused
-s
fromosrm-datastore
- Introduces new
- Guidance
- Only announce
use lane
on required turns (not using all lanes to go straight) - Improved detection of obvious turns
- Improved turn lane detection
- Reduce the number of end-of-road instructions in obvious cases
- Only announce
- Profile:
- bicycle.lua: Surface speeds never increase the actual speed
- Infrastructure
- Add 32bit support
- Add ARM NEON/VFP support
- Fix Windows builds
- Optimize speed file updates using mmap
- Add option to disable LTO for older compilers
- BREAKING: The new turn type changes the turn-type order. This breaks the data format.
- BREAKING: Turn lane data introduces two new files (osrm.tld,osrm.tls). This breaks the fileformat for older versions.
- Bugfixes:
- Fix devide by zero on updating speed data using osrm-contract
- API
- Changes from 5.3.0-rc.2
- Guidance
- Improved detection of obvious turns
- Improved turn lane detection
- Bugfixes
- Fix bug that didn't chose minimal weights on overlapping edges
- Guidance
- Changes from 5.3.0-rc.1
- Bugfixes
- Fixes invalid checks in the lane-extraction part of the car profile
- Bugfixes
- API
- Introduces new `TurnType` in the form of `use lane`. The type indicates that you have to stick to a lane without turning
- Introduces lanes to the route response. The lane data contains both the markings at the intersection and a flag indicating their involvement in the turn
- Infrastructure
- BREAKING: The new turn type changes the turn-type order. This breaks the **data format**.
- BREAKING: Turn lane data introduces two new files (osrm.tld,osrm.tls). This breaks the fileformat for older versions.
- Bugfixes
- Fixes a segfault caused by incorrect trimming logic for very short steps.
- Bugfixes:
- Fixed in issue that arised on roundabouts in combination with intermediate intersections and sliproads
- Bugfixes:
- Fixed an issue with name changes in roundabouts that could result in crashes
Changes from 5.2.1
- Bugfixes:
- Buffer overrun in tile plugin response handling
Changes from 5.2.0
- Bugfixes:
- Removed debug statement that was spamming the console
Changes from 5.2.0 RC2
- Bugfixes:
- Fixed crash when loading shared memory caused by invalid OSM IDs segment size.
- Various small instructions handling fixes
Changes from 5.1.0
-
API:
- new parameter
annotations
forroute
,trip
andmatch
requests. Returns additional data about each coordinate along the selected/matched route line perRouteLeg
:- duration of each segment
- distance of each segment
- OSM node ids of all segment endpoints
- Introducing Intersections for Route Steps. This changes the API format in multiple ways.
bearing_before
/bearing_after
ofStepManeuver
are now deprecated and will be removed in the next major releaselocation
ofStepManeuvers
is now deprecated and will be removed in the next major release- every
RouteStep
now has propertyintersections
containing a list ofIntersection
objects.
- Support for destination signs. New member
destinations
inRouteStep
, based ondestination
anddestination:ref
- Support for name pronunciations. New member
pronunciation
inRouteStep
, based onname:pronunciation
- new parameter
-
Profile changes:
- duration parser now accepts P[n]DT[n]H[n]M[n]S, P[n]W, PTHHMMSS and PTHH:MM:SS ISO8601 formats.
result.destinations
allows you to set a way's destinationsresult.pronunciation
allows you to set way name pronunciationshighway=motorway_link
no longer impliesoneway
as per the OSM Wiki
-
Infrastructure:
- BREAKING: Changed the on-disk encoding of the StaticRTree to reduce ramIndex file size. This breaks the data format
- BREAKING: Intersection Classification adds a new file to the mix (osrm.icd). This breaks the fileformat for older versions.
- Better support for osrm-routed binary upgrade on the fly [UNIX specific]:
- Open sockets with SO_REUSEPORT to allow multiple osrm-routed processes serving requests from the same port.
- Add SIGNAL_PARENT_WHEN_READY environment variable to enable osrm-routed signal its parent with USR1 when it's running and waiting for requests.
- Disable http access logging via DISABLE_ACCESS_LOGGING environment variable.
-
Guidance:
- BREAKING: modifies the file format with new internal identifiers
- improved detection of turning streets, not reporting new-name in wrong situations
- improved handling of sliproads (emit turns instead of 'take the ramp')
- improved collapsing of instructions. Some 'new name' instructions will be suppressed if they are without alternative and the segment is short
-
Bugfixes
- fixed broken summaries for very short routes
Changes from 5.2.0 RC1
-
Guidance:
- improved handling of sliproads (emit turns instead of 'take the ramp')
- improved collapsing of instructions. Some 'new name' instructions will be suppressed if they are without alternative and the segment is short
- BREAKING: modifies the file format with new internal identifiers
-
API:
- paramater
annotate
was renamed toannotations
. annotation
as accidentally placed inRoute
instead ofRouteLeg
- Support for destination signs. New member
destinations
inRouteStep
, based ondestination
anddestination:ref
- Support for name pronunciations. New member
pronunciation
inRouteStep
, based onname:pronunciation
- Add
nodes
property toannotation
inRouteLeg
containing the ids of nodes covered by the route
- paramater
-
Profile changes:
result.destinations
allows you to set a way's destinationsresult.pronunciation
allows you to set way name pronunciationshighway=motorway_link
no longer impliesoneway
as per the OSM Wiki
-
Infrastructure
- BREAKING: Changed the on-disk encoding of the StaticRTree to reduce ramIndex file size. This breaks the data format
-
Bugfixes
- fixed broken summaries for very short routes
Changes from 5.1.0
-
API:
- new parameter
annotate
forroute
andmatch
requests. Returns additional data about each coordinate along the selected/matched route line. - Introducing Intersections for Route Steps. This changes the API format in multiple ways.
bearing_before
/bearing_after
ofStepManeuver
are now deprecated and will be removed in the next major releaselocation
ofStepManeuvers
is now deprecated and will be removed in the next major release- every
RouteStep
now has propertyintersections
containing a list ofIntersection
objects.
- new parameter
-
Profile changes:
- duration parser now accepts P[n]DT[n]H[n]M[n]S, P[n]W, PTHHMMSS and PTHH:MM:SS ISO8601 formats.
-
Infrastructure:
- Better support for osrm-routed binary upgrade on the fly [UNIX specific]:
- Open sockets with SO_REUSEPORT to allow multiple osrm-routed processes serving requests from the same port.
- Add SIGNAL_PARENT_WHEN_READY environment variable to enable osrm-routed signal its parent with USR1 when it's running and waiting for requests.
- BREAKING: Intersection Classification adds a new file to the mix (osrm.icd). This breaks the fileformat for older versions.
- Disable http access logging via DISABLE_ACCESS_LOGGING environment variable.
- Better support for osrm-routed binary upgrade on the fly [UNIX specific]:
-
Guidance:
- improved detection of turning streets, not reporting new-name in wrong situations
Changes with regard to 5.0.0
-
API:
- added StepManeuver type
roundabout turn
. The type indicates a small roundabout that is treated as an intersection (turn right at the roundabout for first exit, go straight at the roundabout...) - added StepManeuver type
on ramp
andoff ramp
to distinguish between ramps that enter and exit a highway. - reduced new name instructions for trivial changes
- combined multiple turns into a single instruction at segregated roads`
- added StepManeuver type
-
Profile Changes: - introduced a suffix_list / get_name_suffix_list to specify name suffices to be suppressed in name change announcements - street names are now consistently assembled for the car, bike and walk profile as: "Name (Ref)" as in "Berlin (A5)" - new
car.lua
dependencylib/destination.lua
- register a way's .nodes() function for use in the profile's way_function. -
Infrastructure - BREAKING: reordered internal instruction types. This breaks the data format - BREAKING: Changed the on-disk encoding of the StaticRTree for better performance. This breaks the data format
-
Fixes: - Issue #2310: post-processing for local paths, fixes #2310 - Issue #2309: local path looping, fixes #2309 - Issue #2356: Make hint values optional - Issue #2349: Segmentation fault in some requests - Issue #2335: map matching was using shortest path with uturns disabled - Issue #2193: Fix syntax error position indicators in parameters queries - Fix search with u-turn - PhantomNode packing in MSVC now the same on other platforms - Summary is now not malformed when including unnamed roads - Emit new-name on when changing fron unanmed road to named road
Changes with regard 5.0.0 RC2:
- API:
- if
geometry=geojson
is passed the resulting geometry can be a LineString or Point depending on how many coordinates are present. - the removal of the summary field was revered. for
steps=flase
the field will always be an empty string.
- if
Changes with regard to 4.9.1:
-
API:
- BREAKING: Complete rewrite of the HTTP and library API. See detailed documentation in the wiki.
- BREAKING: The default coordinate order is now
longitude, latidue
. Exception: Polyline geometry which follow the original Google specification oflatitdue, longitude
. - BREAKING: Polyline geometries now use precision 5, instead of previously 6
- BREAKING: Removed GPX support
- New service
tile
which serves debug vector tiles of the road network - Completely new engine for guidance generation:
- Support for highway ramps
- Support for different intersection types (end of street, forks, merges)
- Instruction post-processing to merge unimportant instructions
- Improved handling of roundabouts
-
Tools:
- BREAKING: Renamed osrm-prepare to osrm-contract
- BREAKING: Removes profiles from osrm-contract, only needed in osrm-extract.
- Abort processing in osrm-extract if there are no snappable edges remaining.
- Added .properties file to osrm-extract ouput.
- Enables the use of multiple segment-speed-files on the osrm-contract command line
-
Profile changes:
- Remove movable bridge mode
- Add
maxspeed=none
tag to car profile. - A
side_road
tag support for the OSRM car profile.
-
Fixes:
- Issue #2150: Prevents routing over delivery ways and nodes
- Issue #1972: Provide uninstall target
- Issue #2072: Disable alternatives by default and if core factor < 1.0
- Issue #1999: Fix unpacking for self-loop nodes not in core.
-
Infrastructure:
- Cucumber test suit is now based on cucumber-js, removes Ruby as dependency
- Updated to mapbox/variant v1.1
- Updated to libosmium v2.6.1
- Remove GeoJSON based debugging output, replaced by debug tiles
- Profiles:
properties.allow_uturns_at_via
->properties.continue_straight_at_waypoint
(value is inverted!)
- API:
- Removed summary from legs property
- Disable steps and alternatives by default
- Fix
code
field: 'ok' -> 'Ok' - Allow 4.json and 4.3.json format
- Conform to v5 spec and support "unlimited" as radiuses value.
uturns
parameter was replaced bycontinue_straight
(value is inverted!)
- Features:
- Report progress for gennerating edge expanded edges in the edge based graph factory
- Add maxspeed=none tag to car profile.
- Optimize StaticRTree code: speedup 2x (to RC1)
- Optimize DouglasPeucker code: speedup 10x (to RC1)
- Optimize WebMercator projection: speedup 2x (to RC1)
- Bugs:
- #2195: Resolves issues with multiple includedirs in pkg-config file
- #2219: Internal server error when using the match plugin
- #2027: basename -> filename
- #2168: Report correct position where parsing failed
- #2036: Add license to storage and storage config exposed in public API
- Fix uturn detection in match plugin
- Add missing -lz to fix linking of server-tests
- Renamed osrm-prepare into osrm-contract
- osrm-contract does not need a profile parameter anymore
- New public HTTP API, find documentation here
- POST support is discontinued, please use library bindings for more complex requests
- Removed timestamp plugin
- Coordinate order is now Longitude,Latitude
- Cucumber tests now based on Javascript (run with
npm test
) - Profile API changed:
forward_mode
andbackward_mode
now need to be selected from a pre-defined list- Global profile properties are now stored in a global
properties
element. This includes:properties.traffic_signal_penalty
properties.use_turn_restrictions
properties.u_turn_penalty
properties.allow_u_turn_at_via