New "sides" setting in base parameters for phantom nodes.

- Adding sides parameter into base parameters, it can take the values SIDE, OPPOSITE or DEFAULT.
 - Adding url parser for "sides" parameter, url values are "s" for SIDE, "o" for OPPOSITE and "d" for DEFAULT, example : "sides=s;s".
 - Checking parameters, if "sides" parameter is used, the number of parameter is the same as number of location.
 - Create a phantom to start at side driving or Opposite side driving.

Signed-off-by: FILLAU Jean-Maxime <jean-maxime.fillau@mapotempo.com>
This commit is contained in:
FILLAU Jean-Maxime
2017-05-18 17:05:11 +02:00
committed by Patrick Niklaus
parent 579a1ed42e
commit 8e70c87e64
10 changed files with 141 additions and 12 deletions
+15 -1
View File
@@ -99,6 +99,16 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
base_parameters.bearings.push_back(std::move(bearing));
};
const auto add_side = [](engine::api::BaseParameters &base_parameters,
const boost::optional<std::string> &side_string) {
boost::optional<engine::Side> side;
if (side_string)
{
side = engine::Side{engine::Side::fromString(side_string.get())};
}
base_parameters.sides.push_back(std::move(side));
};
polyline_chars = qi::char_("a-zA-Z0-9_.--[]{}@?|\\%~`^");
base64_char = qi::char_("a-zA-Z0-9--_=");
unlimited_rule = qi::lit("unlimited")[qi::_val = std::numeric_limits<double>::infinity()];
@@ -149,10 +159,13 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::lit("bearings=") >
(-(qi::short_ > ',' > qi::short_))[ph::bind(add_bearing, qi::_r1, qi::_1)] % ';';
sides_rule = qi::lit("sides=") >
(-qi::as_string[qi::char_("a-zA")])[ph::bind(add_side, qi::_r1, qi::_1)] % ';';
base_rule = radiuses_rule(qi::_r1) //
| hints_rule(qi::_r1) //
| bearings_rule(qi::_r1) //
| generate_hints_rule(qi::_r1);
| generate_hints_rule(qi::_r1) | sides_rule(qi::_r1);
}
protected:
@@ -163,6 +176,7 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
qi::rule<Iterator, Signature> bearings_rule;
qi::rule<Iterator, Signature> radiuses_rule;
qi::rule<Iterator, Signature> hints_rule;
qi::rule<Iterator, Signature> sides_rule;
qi::rule<Iterator, Signature> generate_hints_rule;