Compare commits

..

5 Commits

Author SHA1 Message Date
Patrick Niklaus 0333809da8 Update changelog and bump OSRM version to 5.7.4 2017-06-14 14:21:26 +00:00
Michael Krasnyk ceb0e31659 Remove roundabout skip as no leavesRoundabout steps after postProcess 2017-06-13 16:31:09 +00:00
Michael Krasnyk cc6923bfa9 Fix steps collapsing after non-closed roundabouts, #4100 2017-06-13 16:12:42 +00:00
Michael Krasnyk 1b2f1a459d Fix invalid roundabout instructions for different driving modes, #4129 2017-06-13 14:51:04 +00:00
Michael Krasnyk f3b4440707 Test for a roundabout with footway exits, #4129 2017-06-13 14:50:55 +00:00
6 changed files with 53 additions and 13 deletions
+6
View File
@@ -1,3 +1,9 @@
# 5.7.4
- Changes from 5.7.3:
- Bug fixes:
- Fixes 4100: Fix steps collapsing after non-closed roundabouts
- Fixes 4129: Fix invalid roundabout instructions for different driving modes
# 5.7.3
- Changes from 5.7.2:
- Bug fixes:
+1 -1
View File
@@ -55,7 +55,7 @@ endif()
project(OSRM C CXX)
set(OSRM_VERSION_MAJOR 5)
set(OSRM_VERSION_MINOR 7)
set(OSRM_VERSION_PATCH 3)
set(OSRM_VERSION_PATCH 4)
set(OSRM_VERSION "${OSRM_VERSION_MAJOR}.${OSRM_VERSION_MINOR}.${OSRM_VERSION_PATCH}")
add_definitions(-DOSRM_PROJECT_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
@@ -37,3 +37,37 @@ Feature: Basic Roundabout
| h,a | gh,ab,ab | depart,roundabout turn left exit-3,arrive |
| h,d | gh,cd,cd | depart,roundabout turn straight exit-2,arrive |
| h,f | gh,ef,ef | depart,roundabout turn right exit-1,arrive |
# https://www.openstreetmap.org/way/223225602
Scenario: Enter and Exit with changing mode
Given the node map
"""
a
b
h g c d
e
f
"""
And the ways
| nodes | junction | highway |
| ab | | residential |
| cd | | residential |
| ef | | footway |
| gh | | footway |
| bgecb | roundabout | residential |
When I route I should get
| waypoints | route | turns |
| a,d | ab,cd,cd | depart,roundabout turn left exit-1,arrive |
| a,f | ab,ef,ef,ef | depart,roundabout turn left exit-1,notification right,arrive |
| a,h | ab,bgecb,gh,gh | depart,roundabout turn right exit-1,notification right,arrive |
| d,f | cd,ef,ef,ef | depart,roundabout turn sharp left exit-2,notification right,arrive |
| d,h | cd,gh,gh,gh | depart,roundabout turn left exit-2,notification right,arrive |
| d,a | cd,ab,ab | depart,roundabout turn right exit-1,arrive |
| f,h | ef,gh,gh,gh | depart,roundabout turn sharp left exit-3,notification right,arrive |
| f,a | ef,ab,ab | depart,roundabout turn straight exit-2,arrive |
| f,d | ef,cd,cd | depart,roundabout turn right exit-1,arrive |
| h,a | gh,ab,ab | depart,roundabout turn left exit-2,arrive |
| h,d | gh,cd,cd | depart,roundabout turn straight exit-1,arrive |
| h,f | gh,bgecb,ef,ef | depart,roundabout turn right exit-1,notification right,arrive |
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "osrm",
"version": "5.7.3",
"version": "5.7.4",
"private": false,
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
"dependencies": {
+1 -6
View File
@@ -53,7 +53,7 @@ double findTotalTurnAngle(const RouteStep &entry_step, const RouteStep &exit_ste
// both angles are in the same direction, the total turn gets increased
// 
// a ---- b
// \
// \ 
// c
// |
// d
@@ -315,11 +315,6 @@ RouteSteps collapseTurnInstructions(RouteSteps steps)
if (entersRoundabout(current_step->maneuver.instruction) ||
staysOnRoundabout(current_step->maneuver.instruction))
{
// Skip over all instructions within the roundabout
for (; current_step + 1 != steps.end(); ++current_step)
if (leavesRoundabout(current_step->maneuver.instruction))
break;
// are we done for good?
if (current_step + 1 == steps.end())
break;
+10 -5
View File
@@ -171,9 +171,11 @@ void closeOffRoundabout(const bool on_roundabout,
if (!guidance::haveSameMode(exit_step, prev_step))
{
BOOST_ASSERT(leavesRoundabout(exit_step.maneuver.instruction));
prev_step.maneuver.instruction = exit_step.maneuver.instruction;
if (!entersRoundabout(prev_step.maneuver.instruction))
prev_step.maneuver.exit = exit_step.maneuver.exit;
{
prev_step.maneuver.instruction = exit_step.maneuver.instruction;
}
prev_step.maneuver.exit = exit_step.maneuver.exit;
exit_step.maneuver.instruction.type = TurnType::Notification;
step_index--;
}
@@ -198,9 +200,12 @@ void closeOffRoundabout(const bool on_roundabout,
{
auto &propagation_step = steps[propagation_index];
auto &next_step = steps[propagation_index + 1];
propagation_step.ElongateBy(next_step);
propagation_step.maneuver.exit = next_step.maneuver.exit;
next_step.Invalidate();
if (guidance::haveSameMode(propagation_step, next_step))
{
propagation_step.ElongateBy(next_step);
propagation_step.maneuver.exit = next_step.maneuver.exit;
next_step.Invalidate();
}
if (entersRoundabout(propagation_step.maneuver.instruction))
{