Add support for a default-bearing-radius flag
This commit is contained in:
parent
192d077ada
commit
2f40a47529
@ -43,11 +43,11 @@ template <typename Algorithm> class Engine final : public EngineInterface
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit Engine(const EngineConfig &config)
|
explicit Engine(const EngineConfig &config)
|
||||||
: route_plugin(config.max_locations_viaroute, config.max_alternatives), //
|
: route_plugin(config.max_locations_viaroute, config.max_alternatives, config.default_bearing_radius), //
|
||||||
table_plugin(config.max_locations_distance_table), //
|
table_plugin(config.max_locations_distance_table, config.default_bearing_radius), //
|
||||||
nearest_plugin(config.max_results_nearest), //
|
nearest_plugin(config.max_results_nearest, config.default_bearing_radius), //
|
||||||
trip_plugin(config.max_locations_trip), //
|
trip_plugin(config.max_locations_trip, config.default_bearing_radius), //
|
||||||
match_plugin(config.max_locations_map_matching, config.max_radius_map_matching), //
|
match_plugin(config.max_locations_map_matching, config.max_radius_map_matching, config.default_bearing_radius), //
|
||||||
tile_plugin() //
|
tile_plugin() //
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@ -83,6 +83,7 @@ struct EngineConfig final
|
|||||||
int max_locations_map_matching = -1;
|
int max_locations_map_matching = -1;
|
||||||
double max_radius_map_matching = -1.0;
|
double max_radius_map_matching = -1.0;
|
||||||
int max_results_nearest = -1;
|
int max_results_nearest = -1;
|
||||||
|
boost::optional<double> default_bearing_radius;
|
||||||
int max_alternatives = 3; // set an arbitrary upper bound; can be adjusted by user
|
int max_alternatives = 3; // set an arbitrary upper bound; can be adjusted by user
|
||||||
bool use_shared_memory = true;
|
bool use_shared_memory = true;
|
||||||
boost::filesystem::path memory_file;
|
boost::filesystem::path memory_file;
|
||||||
|
|||||||
@ -20,10 +20,11 @@ class MatchPlugin : public BasePlugin
|
|||||||
using CandidateLists = routing_algorithms::CandidateLists;
|
using CandidateLists = routing_algorithms::CandidateLists;
|
||||||
static const constexpr double RADIUS_MULTIPLIER = 3;
|
static const constexpr double RADIUS_MULTIPLIER = 3;
|
||||||
|
|
||||||
MatchPlugin(const int max_locations_map_matching, const double max_radius_map_matching)
|
MatchPlugin(const int max_locations_map_matching, const double max_radius_map_matching, const boost::optional<double> default_bearing_radius)
|
||||||
: max_locations_map_matching(max_locations_map_matching),
|
: max_locations_map_matching(max_locations_map_matching),
|
||||||
max_radius_map_matching(max_radius_map_matching)
|
max_radius_map_matching(max_radius_map_matching)
|
||||||
{
|
{
|
||||||
|
this->default_bearing_radius = default_bearing_radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
|
|||||||
@ -13,7 +13,7 @@ namespace osrm::engine::plugins
|
|||||||
class NearestPlugin final : public BasePlugin
|
class NearestPlugin final : public BasePlugin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit NearestPlugin(const int max_results);
|
explicit NearestPlugin(const int max_results, const boost::optional<double> default_bearing_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::NearestParameters ¶ms,
|
const api::NearestParameters ¶ms,
|
||||||
|
|||||||
@ -237,7 +237,7 @@ class BasePlugin
|
|||||||
phantom_nodes[i] = facade.NearestPhantomNodes(
|
phantom_nodes[i] = facade.NearestPhantomNodes(
|
||||||
parameters.coordinates[i],
|
parameters.coordinates[i],
|
||||||
number_of_results,
|
number_of_results,
|
||||||
use_radiuses ? parameters.radiuses[i] : boost::none,
|
use_radiuses ? parameters.radiuses[i] : default_bearing_radius,
|
||||||
use_bearings ? parameters.bearings[i] : boost::none,
|
use_bearings ? parameters.bearings[i] : boost::none,
|
||||||
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
||||||
: engine::Approach::UNRESTRICTED);
|
: engine::Approach::UNRESTRICTED);
|
||||||
@ -279,7 +279,7 @@ class BasePlugin
|
|||||||
|
|
||||||
alternatives[i] = facade.NearestCandidatesWithAlternativeFromBigComponent(
|
alternatives[i] = facade.NearestCandidatesWithAlternativeFromBigComponent(
|
||||||
parameters.coordinates[i],
|
parameters.coordinates[i],
|
||||||
use_radiuses ? parameters.radiuses[i] : boost::none,
|
use_radiuses ? parameters.radiuses[i] : default_bearing_radius,
|
||||||
use_bearings ? parameters.bearings[i] : boost::none,
|
use_bearings ? parameters.bearings[i] : boost::none,
|
||||||
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
use_approaches && parameters.approaches[i] ? parameters.approaches[i].get()
|
||||||
: engine::Approach::UNRESTRICTED,
|
: engine::Approach::UNRESTRICTED,
|
||||||
@ -320,6 +320,8 @@ class BasePlugin
|
|||||||
return std::string("Could not find a matching segment for coordinate ") +
|
return std::string("Could not find a matching segment for coordinate ") +
|
||||||
std::to_string(missing_index);
|
std::to_string(missing_index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boost::optional<double> default_bearing_radius;
|
||||||
};
|
};
|
||||||
} // namespace osrm::engine::plugins
|
} // namespace osrm::engine::plugins
|
||||||
|
|
||||||
|
|||||||
@ -14,7 +14,7 @@ namespace osrm::engine::plugins
|
|||||||
class TablePlugin final : public BasePlugin
|
class TablePlugin final : public BasePlugin
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TablePlugin(const int max_locations_distance_table);
|
explicit TablePlugin(const int max_locations_distance_table, const boost::optional<double> default_bearing_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::TableParameters ¶ms,
|
const api::TableParameters ¶ms,
|
||||||
|
|||||||
@ -32,7 +32,9 @@ class TripPlugin final : public BasePlugin
|
|||||||
const bool roundtrip) const;
|
const bool roundtrip) const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TripPlugin(const int max_locations_trip_) : max_locations_trip(max_locations_trip_) {}
|
explicit TripPlugin(const int max_locations_trip_, const boost::optional<double> default_bearing_radius) : max_locations_trip(max_locations_trip_) {
|
||||||
|
this->default_bearing_radius = default_bearing_radius;
|
||||||
|
}
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::TripParameters ¶meters,
|
const api::TripParameters ¶meters,
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class ViaRoutePlugin final : public BasePlugin
|
|||||||
const int max_alternatives;
|
const int max_alternatives;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit ViaRoutePlugin(int max_locations_viaroute, int max_alternatives);
|
explicit ViaRoutePlugin(int max_locations_viaroute, int max_alternatives, const boost::optional<double> default_bearing_radius);
|
||||||
|
|
||||||
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::RouteParameters &route_parameters,
|
const api::RouteParameters &route_parameters,
|
||||||
|
|||||||
@ -285,6 +285,7 @@ inline engine_config_ptr argumentsToEngineConfig(const Napi::CallbackInfo &args)
|
|||||||
auto max_results_nearest = params.Get("max_results_nearest");
|
auto max_results_nearest = params.Get("max_results_nearest");
|
||||||
auto max_alternatives = params.Get("max_alternatives");
|
auto max_alternatives = params.Get("max_alternatives");
|
||||||
auto max_radius_map_matching = params.Get("max_radius_map_matching");
|
auto max_radius_map_matching = params.Get("max_radius_map_matching");
|
||||||
|
auto default_bearing_radius = params.Get("default_bearing_radius");
|
||||||
|
|
||||||
if (!max_locations_trip.IsUndefined() && !max_locations_trip.IsNumber())
|
if (!max_locations_trip.IsUndefined() && !max_locations_trip.IsNumber())
|
||||||
{
|
{
|
||||||
@ -316,6 +317,11 @@ inline engine_config_ptr argumentsToEngineConfig(const Napi::CallbackInfo &args)
|
|||||||
ThrowError(args.Env(), "max_alternatives must be an integral number");
|
ThrowError(args.Env(), "max_alternatives must be an integral number");
|
||||||
return engine_config_ptr();
|
return engine_config_ptr();
|
||||||
}
|
}
|
||||||
|
if (!default_bearing_radius.IsUndefined() && !default_bearing_radius.IsNumber())
|
||||||
|
{
|
||||||
|
ThrowError(args.Env(), "default_bearing_radius must be an integral number");
|
||||||
|
return engine_config_ptr();
|
||||||
|
}
|
||||||
|
|
||||||
if (max_locations_trip.IsNumber())
|
if (max_locations_trip.IsNumber())
|
||||||
engine_config->max_locations_trip = max_locations_trip.ToNumber().Int32Value();
|
engine_config->max_locations_trip = max_locations_trip.ToNumber().Int32Value();
|
||||||
@ -333,6 +339,8 @@ inline engine_config_ptr argumentsToEngineConfig(const Napi::CallbackInfo &args)
|
|||||||
engine_config->max_alternatives = max_alternatives.ToNumber().Int32Value();
|
engine_config->max_alternatives = max_alternatives.ToNumber().Int32Value();
|
||||||
if (max_radius_map_matching.IsNumber())
|
if (max_radius_map_matching.IsNumber())
|
||||||
engine_config->max_radius_map_matching = max_radius_map_matching.ToNumber().DoubleValue();
|
engine_config->max_radius_map_matching = max_radius_map_matching.ToNumber().DoubleValue();
|
||||||
|
if (default_bearing_radius.IsNumber())
|
||||||
|
engine_config->default_bearing_radius = default_bearing_radius.ToNumber().DoubleValue();
|
||||||
|
|
||||||
return engine_config;
|
return engine_config;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,7 +10,9 @@
|
|||||||
namespace osrm::engine::plugins
|
namespace osrm::engine::plugins
|
||||||
{
|
{
|
||||||
|
|
||||||
NearestPlugin::NearestPlugin(const int max_results_) : max_results{max_results_} {}
|
NearestPlugin::NearestPlugin(const int max_results_, const boost::optional<double> default_bearing_radius_) : max_results{max_results_} {
|
||||||
|
this->default_bearing_radius = default_bearing_radius_;
|
||||||
|
}
|
||||||
|
|
||||||
Status NearestPlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status NearestPlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
const api::NearestParameters ¶ms,
|
const api::NearestParameters ¶ms,
|
||||||
|
|||||||
@ -14,9 +14,10 @@
|
|||||||
namespace osrm::engine::plugins
|
namespace osrm::engine::plugins
|
||||||
{
|
{
|
||||||
|
|
||||||
TablePlugin::TablePlugin(const int max_locations_distance_table)
|
TablePlugin::TablePlugin(const int max_locations_distance_table, const boost::optional<double> default_bearing_radius)
|
||||||
: max_locations_distance_table(max_locations_distance_table)
|
: max_locations_distance_table(max_locations_distance_table)
|
||||||
{
|
{
|
||||||
|
this->default_bearing_radius = default_bearing_radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status TablePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
|
|||||||
@ -15,9 +15,10 @@
|
|||||||
namespace osrm::engine::plugins
|
namespace osrm::engine::plugins
|
||||||
{
|
{
|
||||||
|
|
||||||
ViaRoutePlugin::ViaRoutePlugin(int max_locations_viaroute, int max_alternatives)
|
ViaRoutePlugin::ViaRoutePlugin(int max_locations_viaroute, int max_alternatives, const boost::optional<double> default_bearing_radius)
|
||||||
: max_locations_viaroute(max_locations_viaroute), max_alternatives(max_alternatives)
|
: max_locations_viaroute(max_locations_viaroute), max_alternatives(max_alternatives)
|
||||||
{
|
{
|
||||||
|
this->default_bearing_radius = default_bearing_radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status ViaRoutePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
Status ViaRoutePlugin::HandleRequest(const RoutingAlgorithmsInterface &algorithms,
|
||||||
|
|||||||
@ -147,7 +147,10 @@ inline unsigned generateServerProgramOptions(const int argc,
|
|||||||
"Max. number of alternatives supported in the MLD route query") //
|
"Max. number of alternatives supported in the MLD route query") //
|
||||||
("max-matching-radius",
|
("max-matching-radius",
|
||||||
value<double>(&config.max_radius_map_matching)->default_value(-1.0),
|
value<double>(&config.max_radius_map_matching)->default_value(-1.0),
|
||||||
"Max. radius size supported in map matching query. Default: unlimited.");
|
"Max. radius size supported in map matching query. Default: unlimited.") //
|
||||||
|
("default-bearings-radius",
|
||||||
|
value<boost::optional<double>>(&config.default_bearing_radius),
|
||||||
|
"Default radius size for queries with bearings. Default: unlimited.");
|
||||||
|
|
||||||
// hidden options, will be allowed on command line, but will not be shown to the user
|
// hidden options, will be allowed on command line, but will not be shown to the user
|
||||||
boost::program_options::options_description hidden_options("Hidden options");
|
boost::program_options::options_description hidden_options("Hidden options");
|
||||||
|
|||||||
@ -112,6 +112,12 @@ test('constructor: throws if dataset_name is not a string', function(assert) {
|
|||||||
assert.throws(function() { new OSRM({dataset_name: "unsued_name___", shared_memory: true}); }, /Could not find shared memory region/, 'Does not accept wrong name');
|
assert.throws(function() { new OSRM({dataset_name: "unsued_name___", shared_memory: true}); }, /Could not find shared memory region/, 'Does not accept wrong name');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('constructor: takes a default_bearing_radius argument', function(assert) {
|
||||||
|
assert.plan(1);
|
||||||
|
var osrm = new OSRM({default_bearing_radius: 1});
|
||||||
|
assert.ok(osrm);
|
||||||
|
});
|
||||||
|
|
||||||
test('constructor: parses custom limits', function(assert) {
|
test('constructor: parses custom limits', function(assert) {
|
||||||
assert.plan(1);
|
assert.plan(1);
|
||||||
var osrm = new OSRM({
|
var osrm = new OSRM({
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user