don't collapse with mode changes

This commit is contained in:
karenzshea 2016-11-11 17:03:14 -08:00
parent 3d4b39be7d
commit 836e8bdff0
2 changed files with 50 additions and 3 deletions

View File

@ -13,7 +13,7 @@ Feature: Staggered Intersections
j
a b c
d
e f g
e f g
h
i
"""
@ -98,3 +98,48 @@ Feature: Staggered Intersections
| waypoints | route | turns |
| a,g | Oak St,Cedar Dr,Elm St,Elm St | depart,turn right,turn left,arrive |
| g,a | Elm St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
Scenario: Staggered Intersection: do not collapse if a mode change is involved
Given the node map
"""
j
a b c
d
e f g
h
"""
And the ways
| nodes | highway | name | route |
| abc | primary | to_sea | |
| ef | | to_sea | ferry |
| fg | primary | road | |
| jcdeh | primary | road | |
When I route I should get
| waypoints | route | turns | modes |
| a,g | to_sea,road,to_sea,road,road | depart,turn right,turn left,notification straight,arrive | driving,driving,ferry,driving,driving |
| g,a | road,to_sea,road,to_sea,to_sea | depart,notification straight,turn right,turn left,arrive | driving,ferry,driving,driving,driving |
Scenario: Staggered Intersection: do not collapse if a road class change is involved
Given the node map
"""
j
a b c
d
e f g
h
i
"""
And the ways
| nodes | highway | name |
| abc | primary | Oak St |
| efg | residential | Oak St |
| jcdehi | residential | Cedar Dr |
When I route I should get
| waypoints | route | turns |
| a,g | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |
| g,a | Oak St,Cedar Dr,Oak St,Oak St | depart,turn right,turn left,arrive |

View File

@ -443,7 +443,7 @@ std::size_t getPreviousIndex(std::size_t index, const std::vector<RouteStep> &st
--index;
return index;
};
}
void collapseUTurn(std::vector<RouteStep> &steps,
const std::size_t two_back_index,
@ -853,7 +853,9 @@ bool isStaggeredIntersection(const RouteStep &previous, const RouteStep &current
// We are only interested in the distance between the first and the second.
const auto is_short = previous.distance < MAX_STAGGERED_DISTANCE;
return is_short && (left_right || right_left);
const auto no_mode_change = previous.mode == current.mode;
return is_short && (left_right || right_left) && no_mode_change;
}
} // namespace