fix continue_straight interaction with bearing specification
This commit is contained in:
parent
799a677e7a
commit
f8002480c2
@ -352,3 +352,64 @@ Feature: Via points
|
|||||||
| waypoints | bearings | route | turns |
|
| waypoints | bearings | route | turns |
|
||||||
| 1,a | 90,2 270,2 | ab,ab,ab | depart,turn uturn,arrive |
|
| 1,a | 90,2 270,2 | ab,ab,ab | depart,turn uturn,arrive |
|
||||||
| 1,b | 270,2 90,2 | ab,ab,ab | depart,turn uturn,arrive |
|
| 1,b | 270,2 90,2 | ab,ab,ab | depart,turn uturn,arrive |
|
||||||
|
|
||||||
|
Scenario: Continue Straight in presence of Bearings
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
h - a 1 b -- g
|
||||||
|
| |
|
||||||
|
| |- 2 c - f
|
||||||
|
| 3
|
||||||
|
e ------ d - i
|
||||||
|
|
|
||||||
|
j
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the query options
|
||||||
|
| continue_straight | false |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | oneway |
|
||||||
|
| ab | no |
|
||||||
|
| bc | no |
|
||||||
|
| cdea | no |
|
||||||
|
| ah | yes |
|
||||||
|
| bg | yes |
|
||||||
|
| cf | yes |
|
||||||
|
| di | yes |
|
||||||
|
| dj | yes |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| waypoints | bearings | route |
|
||||||
|
| 1,2,3 | 270,90 180,180 180,180 | ab,cdea,cdea,bc,bc,bc,cdea,cdea |
|
||||||
|
|
||||||
|
Scenario: Continue Straight in presence of Bearings
|
||||||
|
Given the node map
|
||||||
|
"""
|
||||||
|
h - a 1 b -- g
|
||||||
|
| |
|
||||||
|
| |- 2 c - f
|
||||||
|
| 3
|
||||||
|
e ------ d - i
|
||||||
|
|
|
||||||
|
j
|
||||||
|
"""
|
||||||
|
|
||||||
|
And the query options
|
||||||
|
| continue_straight | true |
|
||||||
|
|
||||||
|
And the ways
|
||||||
|
| nodes | oneway |
|
||||||
|
| ab | no |
|
||||||
|
| bc | no |
|
||||||
|
| cdea | no |
|
||||||
|
| ah | yes |
|
||||||
|
| bg | yes |
|
||||||
|
| cf | yes |
|
||||||
|
| di | yes |
|
||||||
|
| dj | yes |
|
||||||
|
|
||||||
|
When I route I should get
|
||||||
|
| waypoints | bearings | route |
|
||||||
|
| 1,2,3 | 270,90 180,180 180,180 | ab,cdea,cdea,bc,bc,bc,ab,cdea,cdea,cdea |
|
||||||
|
|
||||||
|
@ -77,27 +77,10 @@ ViaRoutePlugin::HandleRequest(const datafacade::ContiguousInternalMemoryDataFaca
|
|||||||
|
|
||||||
auto snapped_phantoms = SnapPhantomNodes(phantom_node_pairs);
|
auto snapped_phantoms = SnapPhantomNodes(phantom_node_pairs);
|
||||||
|
|
||||||
const bool continue_straight_at_waypoint = route_parameters.continue_straight
|
|
||||||
? *route_parameters.continue_straight
|
|
||||||
: facade.GetContinueStraightDefault();
|
|
||||||
|
|
||||||
std::vector<PhantomNodes> start_end_nodes;
|
std::vector<PhantomNodes> start_end_nodes;
|
||||||
auto build_phantom_pairs = [&start_end_nodes, continue_straight_at_waypoint](
|
auto build_phantom_pairs = [&start_end_nodes](const PhantomNode &first_node,
|
||||||
const PhantomNode &first_node, const PhantomNode &second_node) {
|
const PhantomNode &second_node) {
|
||||||
start_end_nodes.push_back(PhantomNodes{first_node, second_node});
|
start_end_nodes.push_back(PhantomNodes{first_node, second_node});
|
||||||
auto &last_inserted = start_end_nodes.back();
|
|
||||||
// enable forward direction if possible
|
|
||||||
if (last_inserted.source_phantom.forward_segment_id.id != SPECIAL_SEGMENTID)
|
|
||||||
{
|
|
||||||
last_inserted.source_phantom.forward_segment_id.enabled |=
|
|
||||||
!continue_straight_at_waypoint;
|
|
||||||
}
|
|
||||||
// enable reverse direction if possible
|
|
||||||
if (last_inserted.source_phantom.reverse_segment_id.id != SPECIAL_SEGMENTID)
|
|
||||||
{
|
|
||||||
last_inserted.source_phantom.reverse_segment_id.enabled |=
|
|
||||||
!continue_straight_at_waypoint;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
util::for_each_pair(snapped_phantoms, build_phantom_pairs);
|
util::for_each_pair(snapped_phantoms, build_phantom_pairs);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user