Skip to content

Commit ff25fc7

Browse files
TheMarexdanpat
authored andcommitted
Revert "Hardcode search radius parameters"
This reverts commit 2c9e18d.
1 parent b34ed58 commit ff25fc7

File tree

3 files changed

+44
-12
lines changed

3 files changed

+44
-12
lines changed

include/engine/api/match_parameters.hpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2828
#ifndef ENGINE_API_MATCH_PARAMETERS_HPP
2929
#define ENGINE_API_MATCH_PARAMETERS_HPP
3030

31+
#define SEARCH_RADIUS_BASE_DEFAULT 45
32+
#define SEARCH_RADIUS_BASE_LIMIT 100
33+
#define SEARCH_RADIUS_MULTIPLIER_DEFAULT 3.5
34+
#define SEARCH_RADIUS_MULTIPLIER_LIMIT 10
35+
#define SEARCH_RADIUS_MAX_DEFAULT 200
36+
#define SEARCH_RADIUS_MAX_LIMIT 500
37+
3138
#include "engine/api/route_parameters.hpp"
3239

3340
#include <vector>
@@ -67,10 +74,20 @@ struct MatchParameters : public RouteParameters
6774
}
6875

6976
std::vector<unsigned> timestamps;
77+
78+
double search_radius_base = SEARCH_RADIUS_BASE_DEFAULT;
79+
double search_radius_multiplier = SEARCH_RADIUS_MULTIPLIER_DEFAULT;
80+
double search_radius_max = SEARCH_RADIUS_MAX_DEFAULT;
81+
7082
bool IsValid() const
7183
{
7284
return RouteParameters::IsValid() &&
73-
(timestamps.empty() || timestamps.size() == coordinates.size());
85+
(timestamps.empty() || timestamps.size() == coordinates.size()) &&
86+
search_radius_base >= 0 && search_radius_multiplier >= 0 && search_radius_max > 0 &&
87+
// limit the search_radius parameters to sane values to prevent overloading the server
88+
search_radius_base <= SEARCH_RADIUS_BASE_LIMIT &&
89+
search_radius_multiplier <= SEARCH_RADIUS_MULTIPLIER_LIMIT &&
90+
search_radius_max <= SEARCH_RADIUS_MAX_LIMIT;
7491
}
7592
};
7693
}

include/server/api/match_parameter_grammar.hpp

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,33 @@ struct MatchParametersGrammar final : public RouteParametersGrammar<Iterator, Si
3333
(qi::uint_ %
3434
';')[ph::bind(&engine::api::MatchParameters::timestamps, qi::_r1) = qi::_1];
3535

36+
search_radius_base_rule =
37+
qi::lit("search_radius_base=") > qi::double_[
38+
ph::bind(&engine::api::MatchParameters::search_radius_base, qi::_r1) = qi::_1];
39+
40+
search_radius_multiplier_rule =
41+
qi::lit("search_radius_multiplier=") > qi::double_[
42+
ph::bind(&engine::api::MatchParameters::search_radius_multiplier, qi::_r1) = qi::_1];
43+
44+
search_radius_max_rule =
45+
qi::lit("search_radius_max=") > qi::double_[
46+
ph::bind(&engine::api::MatchParameters::search_radius_max, qi::_r1) = qi::_1];
47+
3648
root_rule = BaseGrammar::query_rule(qi::_r1) > -qi::lit(".json") >
37-
-('?' > (timestamps_rule(qi::_r1) | BaseGrammar::base_rule(qi::_r1)) % '&');
49+
-('?' > (timestamps_rule(qi::_r1) |
50+
search_radius_base_rule(qi::_r1) |
51+
search_radius_multiplier_rule(qi::_r1) |
52+
search_radius_max_rule(qi::_r1) |
53+
BaseGrammar::base_rule(qi::_r1))
54+
% '&');
3855
}
3956

4057
private:
4158
qi::rule<Iterator, Signature> root_rule;
4259
qi::rule<Iterator, Signature> timestamps_rule;
60+
qi::rule<Iterator, Signature> search_radius_base_rule;
61+
qi::rule<Iterator, Signature> search_radius_multiplier_rule;
62+
qi::rule<Iterator, Signature> search_radius_max_rule;
4363
};
4464
}
4565
}

src/engine/plugins/match.cpp

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@
1919
#include <string>
2020
#include <vector>
2121

22-
static double search_radius_for_gps_radius(double gps_radius)
23-
{
24-
// For a given GPS radius, determine the radius we need to search for candidate street segments
25-
// to have a 99.9% chance of finding the correct segment.
26-
// For more detail, see the analysis at https://github.com/Project-OSRM/osrm-backend/pull/3184
27-
return std::min(gps_radius * 3.5 + 45, 200);
28-
}
29-
3022
namespace osrm
3123
{
3224
namespace engine
@@ -161,8 +153,11 @@ Status MatchPlugin::HandleRequest(const std::shared_ptr<datafacade::BaseDataFaca
161153
parameters.radiuses.end(),
162154
search_radiuses.begin(),
163155
[&](const boost::optional<double> &maybe_radius) {
164-
double gps_radius = maybe_radius ? *maybe_radius : DEFAULT_GPS_PRECISION;
165-
return search_radius_for_gps_radius(gps_radius);
156+
double in_radius = maybe_radius ? *maybe_radius : DEFAULT_GPS_PRECISION;
157+
158+
return std::min(
159+
in_radius * parameters.search_radius_multiplier + parameters.search_radius_base,
160+
parameters.search_radius_max);
166161
});
167162
}
168163

0 commit comments

Comments
 (0)