Skip to content

Commit 59960fe

Browse files
committed
continue_straight option in match
1 parent 86aebc0 commit 59960fe

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

include/server/api/route_parameters_grammar.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,9 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
9191
qi::_1]) |
9292
(qi::lit("overview=") >
9393
overview_type[ph::bind(&engine::api::RouteParameters::overview, qi::_r1) = qi::_1]) |
94+
(qi::lit("continue_straight=") >
95+
(qi::lit("default") |
96+
qi::bool_[ph::bind(&engine::api::RouteParameters::continue_straight, qi::_r1) = qi::_1])) |
9497
(qi::lit("annotations=") >
9598
(qi::lit("true")[ph::bind(add_annotation, qi::_r1, AnnotationsType::All)] |
9699
qi::lit("false")[ph::bind(add_annotation, qi::_r1, AnnotationsType::None)] |

src/engine/plugins/match.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ namespace plugins
3030

3131
// Filters PhantomNodes to obtain a set of viable candiates
3232
void filterCandidates(const std::vector<util::Coordinate> &coordinates,
33-
MatchPlugin::CandidateLists &candidates_lists)
33+
MatchPlugin::CandidateLists &candidates_lists, const boost::optional<bool> &continue_straight)
3434
{
3535
for (const auto current_coordinate : util::irange<std::size_t>(0, coordinates.size()))
3636
{
3737
bool allow_uturn = false;
3838

39-
if (coordinates.size() - 1 > current_coordinate && 0 < current_coordinate)
39+
if (!continue_straight && coordinates.size() - 1 > current_coordinate && 0 < current_coordinate)
4040
{
4141
double turn_angle =
4242
util::coordinate_calculation::computeAngle(coordinates[current_coordinate - 1],
@@ -216,7 +216,7 @@ Status MatchPlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
216216
auto candidates_lists =
217217
GetPhantomNodesInRange(facade, tidied.parameters, search_radiuses, true);
218218

219-
filterCandidates(tidied.parameters.coordinates, candidates_lists);
219+
filterCandidates(tidied.parameters.coordinates, candidates_lists, parameters.continue_straight);
220220
if (std::all_of(candidates_lists.begin(),
221221
candidates_lists.end(),
222222
[](const std::vector<PhantomNodeWithDistance> &candidates) {

0 commit comments

Comments
 (0)