Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c1eda57c13 |
+1
-1
@@ -14,7 +14,7 @@ branches:
|
|||||||
only:
|
only:
|
||||||
- master
|
- master
|
||||||
# enable building tags
|
# enable building tags
|
||||||
- /^v\d+\.\d+(\.\d+)?(\+[^-]+)?(-\S*)?$/
|
- /^v\d+\.\d+(\.\d+)?(-\S*)?$/
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
npm: true
|
npm: true
|
||||||
|
|||||||
@@ -51,6 +51,11 @@ Feature: Car - Allowed start/end modes
|
|||||||
| bc | primary | |
|
| bc | primary | |
|
||||||
| cd | service | private |
|
| cd | service | private |
|
||||||
|
|
||||||
|
When I request a travel time matrix I should get
|
||||||
|
| | 2 | c |
|
||||||
|
| 1 | 59.1 | 35.1 |
|
||||||
|
| b | 35.1 | 11.1 |
|
||||||
|
|
||||||
When I route I should get
|
When I route I should get
|
||||||
| from | to | route |
|
| from | to | route |
|
||||||
| 1 | 2 | ab,bc,cd |
|
| 1 | 2 | ab,bc,cd |
|
||||||
|
|||||||
@@ -63,6 +63,13 @@ namespace api
|
|||||||
*/
|
*/
|
||||||
struct BaseParameters
|
struct BaseParameters
|
||||||
{
|
{
|
||||||
|
|
||||||
|
enum class SnappingType
|
||||||
|
{
|
||||||
|
Default,
|
||||||
|
Any
|
||||||
|
};
|
||||||
|
|
||||||
std::vector<util::Coordinate> coordinates;
|
std::vector<util::Coordinate> coordinates;
|
||||||
std::vector<boost::optional<Hint>> hints;
|
std::vector<boost::optional<Hint>> hints;
|
||||||
std::vector<boost::optional<double>> radiuses;
|
std::vector<boost::optional<double>> radiuses;
|
||||||
@@ -73,15 +80,19 @@ struct BaseParameters
|
|||||||
// Adds hints to response which can be included in subsequent requests, see `hints` above.
|
// Adds hints to response which can be included in subsequent requests, see `hints` above.
|
||||||
bool generate_hints = true;
|
bool generate_hints = true;
|
||||||
|
|
||||||
|
SnappingType snapping = SnappingType::Default;
|
||||||
|
|
||||||
BaseParameters(const std::vector<util::Coordinate> coordinates_ = {},
|
BaseParameters(const std::vector<util::Coordinate> coordinates_ = {},
|
||||||
const std::vector<boost::optional<Hint>> hints_ = {},
|
const std::vector<boost::optional<Hint>> hints_ = {},
|
||||||
std::vector<boost::optional<double>> radiuses_ = {},
|
std::vector<boost::optional<double>> radiuses_ = {},
|
||||||
std::vector<boost::optional<Bearing>> bearings_ = {},
|
std::vector<boost::optional<Bearing>> bearings_ = {},
|
||||||
std::vector<boost::optional<Approach>> approaches_ = {},
|
std::vector<boost::optional<Approach>> approaches_ = {},
|
||||||
bool generate_hints_ = true,
|
bool generate_hints_ = true,
|
||||||
std::vector<std::string> exclude = {})
|
std::vector<std::string> exclude = {},
|
||||||
|
const SnappingType snapping_ = SnappingType::Default)
|
||||||
: coordinates(coordinates_), hints(hints_), radiuses(radiuses_), bearings(bearings_),
|
: coordinates(coordinates_), hints(hints_), radiuses(radiuses_), bearings(bearings_),
|
||||||
approaches(approaches_), exclude(std::move(exclude)), generate_hints(generate_hints_)
|
approaches(approaches_), exclude(std::move(exclude)), generate_hints(generate_hints_),
|
||||||
|
snapping(snapping_)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,11 +78,6 @@ struct RouteParameters : public BaseParameters
|
|||||||
Speed = 0x20,
|
Speed = 0x20,
|
||||||
All = Duration | Nodes | Distance | Weight | Datasources | Speed
|
All = Duration | Nodes | Distance | Weight | Datasources | Speed
|
||||||
};
|
};
|
||||||
enum class SnappingType
|
|
||||||
{
|
|
||||||
Default,
|
|
||||||
Any
|
|
||||||
};
|
|
||||||
|
|
||||||
RouteParameters() = default;
|
RouteParameters() = default;
|
||||||
|
|
||||||
@@ -152,13 +147,12 @@ struct RouteParameters : public BaseParameters
|
|||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const boost::optional<bool> continue_straight_,
|
||||||
std::vector<std::size_t> waypoints_,
|
std::vector<std::size_t> waypoints_,
|
||||||
const SnappingType snapping_,
|
|
||||||
const Args... args_)
|
const Args... args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_},
|
number_of_alternatives{alternatives_ ? 1u : 0u}, annotations{annotations_},
|
||||||
annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None},
|
annotations_type{annotations_ ? AnnotationsType::All : AnnotationsType::None},
|
||||||
geometries{geometries_}, overview{overview_}, continue_straight{continue_straight_},
|
geometries{geometries_}, overview{overview_}, continue_straight{continue_straight_},
|
||||||
waypoints{waypoints_}, snapping{snapping_}
|
waypoints{waypoints_}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,13 +165,12 @@ struct RouteParameters : public BaseParameters
|
|||||||
const OverviewType overview_,
|
const OverviewType overview_,
|
||||||
const boost::optional<bool> continue_straight_,
|
const boost::optional<bool> continue_straight_,
|
||||||
std::vector<std::size_t> waypoints_,
|
std::vector<std::size_t> waypoints_,
|
||||||
const SnappingType snapping_,
|
|
||||||
Args... args_)
|
Args... args_)
|
||||||
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
: BaseParameters{std::forward<Args>(args_)...}, steps{steps_}, alternatives{alternatives_},
|
||||||
number_of_alternatives{alternatives_ ? 1u : 0u},
|
number_of_alternatives{alternatives_ ? 1u : 0u},
|
||||||
annotations{annotations_ == AnnotationsType::None ? false : true},
|
annotations{annotations_ == AnnotationsType::None ? false : true},
|
||||||
annotations_type{annotations_}, geometries{geometries_}, overview{overview_},
|
annotations_type{annotations_}, geometries{geometries_}, overview{overview_},
|
||||||
continue_straight{continue_straight_}, waypoints{waypoints_}, snapping{snapping_}
|
continue_straight{continue_straight_}, waypoints{waypoints_}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -191,7 +184,6 @@ struct RouteParameters : public BaseParameters
|
|||||||
OverviewType overview = OverviewType::Simplified;
|
OverviewType overview = OverviewType::Simplified;
|
||||||
boost::optional<bool> continue_straight;
|
boost::optional<bool> continue_straight;
|
||||||
std::vector<std::size_t> waypoints;
|
std::vector<std::size_t> waypoints;
|
||||||
SnappingType snapping = SnappingType::Default;
|
|
||||||
|
|
||||||
bool IsValid() const
|
bool IsValid() const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -262,8 +262,7 @@ class BasePlugin
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::vector<PhantomNodePair> GetPhantomNodes(const datafacade::BaseDataFacade &facade,
|
std::vector<PhantomNodePair> GetPhantomNodes(const datafacade::BaseDataFacade &facade,
|
||||||
const api::BaseParameters ¶meters,
|
const api::BaseParameters ¶meters) const
|
||||||
const bool use_all_edges = false) const
|
|
||||||
{
|
{
|
||||||
std::vector<PhantomNodePair> phantom_node_pairs(parameters.coordinates.size());
|
std::vector<PhantomNodePair> phantom_node_pairs(parameters.coordinates.size());
|
||||||
|
|
||||||
@@ -271,6 +270,7 @@ class BasePlugin
|
|||||||
const bool use_bearings = !parameters.bearings.empty();
|
const bool use_bearings = !parameters.bearings.empty();
|
||||||
const bool use_radiuses = !parameters.radiuses.empty();
|
const bool use_radiuses = !parameters.radiuses.empty();
|
||||||
const bool use_approaches = !parameters.approaches.empty();
|
const bool use_approaches = !parameters.approaches.empty();
|
||||||
|
const bool use_all_edges = parameters.snapping == api::BaseParameters::SnappingType::Any;
|
||||||
|
|
||||||
BOOST_ASSERT(parameters.IsValid());
|
BOOST_ASSERT(parameters.IsValid());
|
||||||
for (const auto i : util::irange<std::size_t>(0UL, parameters.coordinates.size()))
|
for (const auto i : util::irange<std::size_t>(0UL, parameters.coordinates.size()))
|
||||||
|
|||||||
@@ -162,6 +162,13 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
(-approach_type %
|
(-approach_type %
|
||||||
';')[ph::bind(&engine::api::BaseParameters::approaches, qi::_r1) = qi::_1];
|
';')[ph::bind(&engine::api::BaseParameters::approaches, qi::_r1) = qi::_1];
|
||||||
|
|
||||||
|
snapping_type.add("default", engine::api::BaseParameters::SnappingType::Default)(
|
||||||
|
"any", engine::api::BaseParameters::SnappingType::Any);
|
||||||
|
|
||||||
|
snapping_rule =
|
||||||
|
qi::lit("snapping=") >
|
||||||
|
snapping_type[ph::bind(&engine::api::BaseParameters::snapping, qi::_r1) = qi::_1];
|
||||||
|
|
||||||
exclude_rule = qi::lit("exclude=") >
|
exclude_rule = qi::lit("exclude=") >
|
||||||
(qi::as_string[+qi::char_("a-zA-Z0-9")] %
|
(qi::as_string[+qi::char_("a-zA-Z0-9")] %
|
||||||
',')[ph::bind(&engine::api::BaseParameters::exclude, qi::_r1) = qi::_1];
|
',')[ph::bind(&engine::api::BaseParameters::exclude, qi::_r1) = qi::_1];
|
||||||
@@ -171,7 +178,8 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
| bearings_rule(qi::_r1) //
|
| bearings_rule(qi::_r1) //
|
||||||
| generate_hints_rule(qi::_r1) //
|
| generate_hints_rule(qi::_r1) //
|
||||||
| approach_rule(qi::_r1) //
|
| approach_rule(qi::_r1) //
|
||||||
| exclude_rule(qi::_r1);
|
| exclude_rule(qi::_r1) //
|
||||||
|
| snapping_rule(qi::_r1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -197,8 +205,10 @@ struct BaseParametersGrammar : boost::spirit::qi::grammar<Iterator, Signature>
|
|||||||
qi::rule<Iterator, unsigned char()> base64_char;
|
qi::rule<Iterator, unsigned char()> base64_char;
|
||||||
qi::rule<Iterator, std::string()> polyline_chars;
|
qi::rule<Iterator, std::string()> polyline_chars;
|
||||||
qi::rule<Iterator, double()> unlimited_rule;
|
qi::rule<Iterator, double()> unlimited_rule;
|
||||||
|
qi::rule<Iterator, Signature> snapping_rule;
|
||||||
|
|
||||||
qi::symbols<char, engine::Approach> approach_type;
|
qi::symbols<char, engine::Approach> approach_type;
|
||||||
|
qi::symbols<char, engine::api::BaseParameters::SnappingType> snapping_type;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,9 +82,6 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
|
|||||||
qi::lit("waypoints=") >
|
qi::lit("waypoints=") >
|
||||||
(size_t_ % ';')[ph::bind(&engine::api::RouteParameters::waypoints, qi::_r1) = qi::_1];
|
(size_t_ % ';')[ph::bind(&engine::api::RouteParameters::waypoints, qi::_r1) = qi::_1];
|
||||||
|
|
||||||
snapping_type.add("default", engine::api::RouteParameters::SnappingType::Default)(
|
|
||||||
"any", engine::api::RouteParameters::SnappingType::Any);
|
|
||||||
|
|
||||||
base_rule =
|
base_rule =
|
||||||
BaseGrammar::base_rule(qi::_r1) | waypoints_rule(qi::_r1) |
|
BaseGrammar::base_rule(qi::_r1) | waypoints_rule(qi::_r1) |
|
||||||
(qi::lit("steps=") >
|
(qi::lit("steps=") >
|
||||||
@@ -94,8 +91,6 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
|
|||||||
qi::_1]) |
|
qi::_1]) |
|
||||||
(qi::lit("overview=") >
|
(qi::lit("overview=") >
|
||||||
overview_type[ph::bind(&engine::api::RouteParameters::overview, qi::_r1) = qi::_1]) |
|
overview_type[ph::bind(&engine::api::RouteParameters::overview, qi::_r1) = qi::_1]) |
|
||||||
(qi::lit("snapping=") >
|
|
||||||
snapping_type[ph::bind(&engine::api::RouteParameters::snapping, qi::_r1) = qi::_1]) |
|
|
||||||
(qi::lit("annotations=") >
|
(qi::lit("annotations=") >
|
||||||
(qi::lit("true")[ph::bind(add_annotation, qi::_r1, AnnotationsType::All)] |
|
(qi::lit("true")[ph::bind(add_annotation, qi::_r1, AnnotationsType::All)] |
|
||||||
qi::lit("false")[ph::bind(add_annotation, qi::_r1, AnnotationsType::None)] |
|
qi::lit("false")[ph::bind(add_annotation, qi::_r1, AnnotationsType::None)] |
|
||||||
@@ -117,7 +112,6 @@ struct RouteParametersGrammar : public BaseParametersGrammar<Iterator, Signature
|
|||||||
qi::symbols<char, engine::api::RouteParameters::GeometriesType> geometries_type;
|
qi::symbols<char, engine::api::RouteParameters::GeometriesType> geometries_type;
|
||||||
qi::symbols<char, engine::api::RouteParameters::OverviewType> overview_type;
|
qi::symbols<char, engine::api::RouteParameters::OverviewType> overview_type;
|
||||||
qi::symbols<char, engine::api::RouteParameters::AnnotationsType> annotations_type;
|
qi::symbols<char, engine::api::RouteParameters::AnnotationsType> annotations_type;
|
||||||
qi::symbols<char, engine::api::RouteParameters::SnappingType> snapping_type;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "osrm",
|
"name": "osrm",
|
||||||
"version": "5.22.0+customsnapping.3",
|
"version": "5.22.0-customsnapping.2",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
|
"description": "The Open Source Routing Machine is a high performance routing engine written in C++14 designed to run on OpenStreetMap data.",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|||||||
@@ -87,10 +87,7 @@ Status ViaRoutePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithm
|
|||||||
return Status::Error;
|
return Status::Error;
|
||||||
|
|
||||||
const auto &facade = algorithms.GetFacade();
|
const auto &facade = algorithms.GetFacade();
|
||||||
auto phantom_node_pairs =
|
auto phantom_node_pairs = GetPhantomNodes(facade, route_parameters);
|
||||||
GetPhantomNodes(facade,
|
|
||||||
route_parameters,
|
|
||||||
(route_parameters.snapping == api::RouteParameters::SnappingType::Any));
|
|
||||||
if (phantom_node_pairs.size() != route_parameters.coordinates.size())
|
if (phantom_node_pairs.size() != route_parameters.coordinates.size())
|
||||||
{
|
{
|
||||||
return Error("NoSegment",
|
return Error("NoSegment",
|
||||||
|
|||||||
@@ -284,7 +284,8 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
|
|||||||
|
|
||||||
std::pair<PhantomNode, PhantomNode>
|
std::pair<PhantomNode, PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const Approach /*approach*/) const override
|
const Approach /*approach*/,
|
||||||
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -292,7 +293,8 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
|
|||||||
std::pair<PhantomNode, PhantomNode>
|
std::pair<PhantomNode, PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const double /*max_distance*/,
|
const double /*max_distance*/,
|
||||||
const Approach /*approach*/) const override
|
const Approach /*approach*/,
|
||||||
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -302,7 +304,8 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
|
|||||||
const double /*max_distance*/,
|
const double /*max_distance*/,
|
||||||
const int /*bearing*/,
|
const int /*bearing*/,
|
||||||
const int /*bearing_range*/,
|
const int /*bearing_range*/,
|
||||||
const Approach /*approach*/) const override
|
const Approach /*approach*/,
|
||||||
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
@@ -311,7 +314,8 @@ class ContiguousInternalMemoryDataFacade<routing_algorithms::offline::Algorithm>
|
|||||||
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const int /*bearing*/,
|
const int /*bearing*/,
|
||||||
const int /*bearing_range*/,
|
const int /*bearing_range*/,
|
||||||
const Approach /*approach*/) const override
|
const Approach /*approach*/,
|
||||||
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,39 +167,39 @@ class MockBaseDataFacade : public engine::datafacade::BaseDataFacade
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::pair<engine::PhantomNode, engine::PhantomNode>
|
std::pair<engine::PhantomNode, engine::PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const util::Coordinate /*input_coordinate*/,
|
const engine::Approach /*approach*/,
|
||||||
const engine::Approach /*approach*/) const override
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<engine::PhantomNode, engine::PhantomNode>
|
std::pair<engine::PhantomNode, engine::PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const util::Coordinate /*input_coordinate*/,
|
const double /*max_distance*/,
|
||||||
const double /*max_distance*/,
|
const engine::Approach /*approach*/,
|
||||||
const engine::Approach /*approach*/) const override
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<engine::PhantomNode, engine::PhantomNode>
|
std::pair<engine::PhantomNode, engine::PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const util::Coordinate /*input_coordinate*/,
|
const double /*max_distance*/,
|
||||||
const double /*max_distance*/,
|
const int /*bearing*/,
|
||||||
const int /*bearing*/,
|
const int /*bearing_range*/,
|
||||||
const int /*bearing_range*/,
|
const engine::Approach /*approach*/,
|
||||||
const engine::Approach /*approach*/) const override
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<engine::PhantomNode, engine::PhantomNode>
|
std::pair<engine::PhantomNode, engine::PhantomNode>
|
||||||
NearestPhantomNodeWithAlternativeFromBigComponent(
|
NearestPhantomNodeWithAlternativeFromBigComponent(const util::Coordinate /*input_coordinate*/,
|
||||||
const util::Coordinate /*input_coordinate*/,
|
const int /*bearing*/,
|
||||||
const int /*bearing*/,
|
const int /*bearing_range*/,
|
||||||
const int /*bearing_range*/,
|
const engine::Approach /*approach*/,
|
||||||
const engine::Approach /*approach*/) const override
|
const bool /* use_all_edges */) const override
|
||||||
{
|
{
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user