diff --git a/CHANGELOG.md b/CHANGELOG.md index a598963ac..c70d9d203 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +# 5.4.2 + - 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 + # 5.4.1 - Changes from 5.4.0 - Bugfixes diff --git a/features/guidance/bicycle-sliproads.feature b/features/guidance/bicycle-sliproads.feature new file mode 100644 index 000000000..15d5a40cc --- /dev/null +++ b/features/guidance/bicycle-sliproads.feature @@ -0,0 +1,33 @@ +@routing @bicycle @mode +Feature: Bike - Mode flag + + Background: + Given the profile "bicycle" + Given a grid size of 5 meters + + Scenario: Bike Sliproad + Given the node map + """ + i + a b - c-d + ` | + g-e-h + | + | + f + """ + + And the nodes + | node | highway | + | c | traffic_signals | + + And the ways + | nodes | highway | name | oneway:bicycle | + | abcd | cycleway | street | | + | eb | path | | yes | + | icef | tertiary | road | | + | geh | secondary | street | | + + When I route I should get + | waypoints | route | turns | + | a,f | street,{highway:path},road,road | depart,turn right,turn right,arrive | diff --git a/src/engine/guidance/post_processing.cpp b/src/engine/guidance/post_processing.cpp index 7f02b664c..e57d0fe98 100644 --- a/src/engine/guidance/post_processing.cpp +++ b/src/engine/guidance/post_processing.cpp @@ -1,5 +1,5 @@ -#include "engine/guidance/post_processing.hpp" #include "extractor/guidance/turn_instruction.hpp" +#include "engine/guidance/post_processing.hpp" #include "engine/guidance/assemble_steps.hpp" #include "engine/guidance/lane_processing.hpp" @@ -838,6 +838,11 @@ std::vector collapseTurns(std::vector steps) ::osrm::util::guidance::getTurnDirection(angle); invalidateStep(steps[step_index]); } + else + { + //the sliproad turn is incompatible. So we handle it as a turn + steps[one_back_index].maneuver.instruction.type = TurnType::Turn; + } } } // Due to empty segments, we can get name-changes from A->A