diff options
author | Lev Dragunov <l.dragunov@corp.mail.ru> | 2016-02-08 13:25:18 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:17:05 +0300 |
commit | d509601df4041ea66bc906dae104a3a642ea42b6 (patch) | |
tree | 0b33250a942211311482e1f5c65da59f881613df | |
parent | 00903aaa035194f3d22e3e26783713fd1a77c66e (diff) |
OSRM way id plugin search scope fix.
-rw-r--r-- | 3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp b/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp index 5faa1cedd7..308530909a 100644 --- a/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp +++ b/3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp @@ -44,6 +44,8 @@ public: int HandleRequest(const RouteParameters & route_parameters, osrm::json::Object & reply) override final { + double constexpr kMaxDistanceToFindMeters = 1000.0; + // We process only two points case if (route_parameters.coordinates.size() != 2) return 400; @@ -57,17 +59,23 @@ public: for (const auto i : osrm::irange<std::size_t>(0, route_parameters.coordinates.size())) { - std::vector<PhantomNode> phantom_node_vector; - // FixedPointCoordinate &coordinate = route_parameters.coordinates[i]; - if (m_facade->IncrementalFindPhantomNodeForCoordinate(route_parameters.coordinates[i], - phantom_node_vector, 1)) + std::vector<std::pair<PhantomNode, double>> phantom_node_vector; + //FixedPointCoordinate &coordinate = route_parameters.coordinates[i]; + if (m_facade->IncrementalFindPhantomNodeForCoordinateWithMaxDistance(route_parameters.coordinates[i], + phantom_node_vector, kMaxDistanceToFindMeters, + 0 /*min_number_of_phantom_nodes*/, 2 /*max_number_of_phantom_nodes*/)) { - BOOST_ASSERT(!phantom_node_vector.empty()); - phantom_node_pair_list[i].first = phantom_node_vector.front(); - if (phantom_node_vector.size() > 1) - { - phantom_node_pair_list[i].second = phantom_node_vector.back(); - } + BOOST_ASSERT(!phantom_node_vector.empty()); + // Don't know why, but distance may be higher that maxDistance. + if (phantom_node_vector.front().second > kMaxDistanceToFindMeters) + continue; + phantom_node_pair_list[i].first = phantom_node_vector.front().first; + if (phantom_node_vector.size() > 1) + { + if (phantom_node_vector.back().second > kMaxDistanceToFindMeters) + continue; + phantom_node_pair_list[i].second = phantom_node_vector.back().first; + } } } |