Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLev Dragunov <l.dragunov@corp.mail.ru>2016-02-08 13:25:18 +0300
committerSergey Yershov <yershov@corp.mail.ru>2016-03-23 16:17:05 +0300
commitd509601df4041ea66bc906dae104a3a642ea42b6 (patch)
tree0b33250a942211311482e1f5c65da59f881613df
parent00903aaa035194f3d22e3e26783713fd1a77c66e (diff)
OSRM way id plugin search scope fix.
-rw-r--r--3party/osrm/osrm-backend/plugins/WayIdPlugin.hpp28
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;
+ }
}
}