Add routed parameter to limit matching size
This commit is contained in:
parent
e5830b0116
commit
d8d46e0f3e
@ -33,15 +33,21 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
struct libosrm_config
|
||||
{
|
||||
libosrm_config(const libosrm_config &) = delete;
|
||||
libosrm_config() : max_locations_distance_table(100), use_shared_memory(false) {}
|
||||
libosrm_config()
|
||||
: max_locations_distance_table(100), max_locations_map_matching(-1),
|
||||
use_shared_memory(false)
|
||||
{
|
||||
}
|
||||
|
||||
libosrm_config(const ServerPaths &paths, const bool flag, const int max)
|
||||
: server_paths(paths), max_locations_distance_table(max), use_shared_memory(flag)
|
||||
libosrm_config(const ServerPaths &paths, const bool flag, const int max_table, const int max_matching)
|
||||
: server_paths(paths), max_locations_distance_table(max_table),
|
||||
max_locations_map_matching(max_matching), use_shared_memory(flag)
|
||||
{
|
||||
}
|
||||
|
||||
ServerPaths server_paths;
|
||||
int max_locations_distance_table;
|
||||
int max_locations_map_matching;
|
||||
bool use_shared_memory;
|
||||
};
|
||||
|
||||
|
@ -82,7 +82,8 @@ OSRM_impl::OSRM_impl(libosrm_config &lib_config)
|
||||
RegisterPlugin(new HelloWorldPlugin());
|
||||
RegisterPlugin(new LocatePlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
|
||||
RegisterPlugin(new NearestPlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
|
||||
RegisterPlugin(new MapMatchingPlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
|
||||
RegisterPlugin(new MapMatchingPlugin<BaseDataFacade<QueryEdge::EdgeData>>(
|
||||
query_data_facade, lib_config.max_locations_map_matching));
|
||||
RegisterPlugin(new TimestampPlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
|
||||
RegisterPlugin(new ViaRoutePlugin<BaseDataFacade<QueryEdge::EdgeData>>(query_data_facade));
|
||||
}
|
||||
|
@ -59,9 +59,10 @@ template <class DataFacadeT> class MapMatchingPlugin : public BasePlugin
|
||||
using TraceClassification = ClassifierT::ClassificationT;
|
||||
|
||||
public:
|
||||
MapMatchingPlugin(DataFacadeT *facade)
|
||||
MapMatchingPlugin(DataFacadeT *facade, const int max_locations_map_matching)
|
||||
: descriptor_string("match")
|
||||
, facade(facade)
|
||||
, max_locations_map_matching(max_locations_map_matching)
|
||||
// the values where derived from fitting a laplace distribution
|
||||
// to the values of manually classified traces
|
||||
, classifier(LaplaceDistribution(0.0057154021891018675, 0.020294704891166186),
|
||||
@ -225,6 +226,13 @@ template <class DataFacadeT> class MapMatchingPlugin : public BasePlugin
|
||||
{
|
||||
return 400;
|
||||
}
|
||||
|
||||
// enforce maximum number of locations for performance reasons
|
||||
if (max_locations_map_matching > 0 && static_cast<int>(input_coords.size()) > max_locations_map_matching)
|
||||
{
|
||||
return 400;
|
||||
}
|
||||
|
||||
bool found_candidates = getCandiates(input_coords, sub_trace_lengths, candidates_lists);
|
||||
if (!found_candidates)
|
||||
{
|
||||
@ -299,6 +307,7 @@ template <class DataFacadeT> class MapMatchingPlugin : public BasePlugin
|
||||
private:
|
||||
std::string descriptor_string;
|
||||
DataFacadeT *facade;
|
||||
int max_locations_map_matching;
|
||||
ClassifierT classifier;
|
||||
};
|
||||
|
||||
|
@ -77,7 +77,8 @@ int main(int argc, const char *argv[])
|
||||
|
||||
const unsigned init_result = GenerateServerProgramOptions(
|
||||
argc, argv, lib_config.server_paths, ip_address, ip_port, requested_thread_num,
|
||||
lib_config.use_shared_memory, trial_run, lib_config.max_locations_distance_table);
|
||||
lib_config.use_shared_memory, trial_run, lib_config.max_locations_distance_table,
|
||||
lib_config.max_locations_map_matching);
|
||||
if (init_result == INIT_OK_DO_NOT_START_ENGINE)
|
||||
{
|
||||
return 0;
|
||||
|
@ -151,7 +151,8 @@ inline unsigned GenerateServerProgramOptions(const int argc,
|
||||
int &requested_num_threads,
|
||||
bool &use_shared_memory,
|
||||
bool &trial,
|
||||
int &max_locations_distance_table)
|
||||
int &max_locations_distance_table,
|
||||
int &max_locations_map_matching)
|
||||
{
|
||||
// declare a group of options that will be allowed only on command line
|
||||
boost::program_options::options_description generic_options("Options");
|
||||
@ -165,34 +166,35 @@ inline unsigned GenerateServerProgramOptions(const int argc,
|
||||
// declare a group of options that will be allowed both on command line
|
||||
// as well as in a config file
|
||||
boost::program_options::options_description config_options("Configuration");
|
||||
config_options.add_options()(
|
||||
"hsgrdata", boost::program_options::value<boost::filesystem::path>(&paths["hsgrdata"]),
|
||||
".hsgr file")("nodesdata",
|
||||
boost::program_options::value<boost::filesystem::path>(&paths["nodesdata"]),
|
||||
".nodes file")(
|
||||
"edgesdata", boost::program_options::value<boost::filesystem::path>(&paths["edgesdata"]),
|
||||
".edges file")("geometry",
|
||||
boost::program_options::value<boost::filesystem::path>(&paths["geometries"]),
|
||||
".geometry file")(
|
||||
"ramindex", boost::program_options::value<boost::filesystem::path>(&paths["ramindex"]),
|
||||
".ramIndex file")(
|
||||
"fileindex", boost::program_options::value<boost::filesystem::path>(&paths["fileindex"]),
|
||||
"File index file")(
|
||||
"namesdata", boost::program_options::value<boost::filesystem::path>(&paths["namesdata"]),
|
||||
".names file")("timestamp",
|
||||
boost::program_options::value<boost::filesystem::path>(&paths["timestamp"]),
|
||||
".timestamp file")(
|
||||
"ip,i", boost::program_options::value<std::string>(&ip_address)->default_value("0.0.0.0"),
|
||||
"IP address")("port,p", boost::program_options::value<int>(&ip_port)->default_value(5000),
|
||||
"TCP/IP port")(
|
||||
"threads,t", boost::program_options::value<int>(&requested_num_threads)->default_value(8),
|
||||
"Number of threads to use")(
|
||||
"shared-memory,s",
|
||||
boost::program_options::value<bool>(&use_shared_memory)->implicit_value(true),
|
||||
"Load data from shared memory")(
|
||||
"max-table-size,m",
|
||||
boost::program_options::value<int>(&max_locations_distance_table)->default_value(100),
|
||||
"Max. locations supported in distance table query");
|
||||
config_options.add_options()
|
||||
("hsgrdata", boost::program_options::value<boost::filesystem::path>(&paths["hsgrdata"]),
|
||||
".hsgr file")
|
||||
("nodesdata", boost::program_options::value<boost::filesystem::path>(&paths["nodesdata"]),
|
||||
".nodes file")
|
||||
("edgesdata", boost::program_options::value<boost::filesystem::path>(&paths["edgesdata"]),
|
||||
".edges file")
|
||||
("geometry", boost::program_options::value<boost::filesystem::path>(&paths["geometries"]),
|
||||
".geometry file")
|
||||
("ramindex", boost::program_options::value<boost::filesystem::path>(&paths["ramindex"]),
|
||||
".ramIndex file")
|
||||
("fileindex", boost::program_options::value<boost::filesystem::path>(&paths["fileindex"]),
|
||||
"File index file")
|
||||
("namesdata", boost::program_options::value<boost::filesystem::path>(&paths["namesdata"]),
|
||||
".names file")
|
||||
("timestamp", boost::program_options::value<boost::filesystem::path>(&paths["timestamp"]),
|
||||
".timestamp file")
|
||||
("ip,i", boost::program_options::value<std::string>(&ip_address)->default_value("0.0.0.0"),
|
||||
"IP address")
|
||||
("port,p", boost::program_options::value<int>(&ip_port)->default_value(5000),
|
||||
"TCP/IP port")
|
||||
("threads,t", boost::program_options::value<int>(&requested_num_threads)->default_value(8),
|
||||
"Number of threads to use")
|
||||
("shared-memory,s", boost::program_options::value<bool>(&use_shared_memory)->implicit_value(true),
|
||||
"Load data from shared memory")
|
||||
("max-table-size,m", boost::program_options::value<int>(&max_locations_distance_table)->default_value(100),
|
||||
"Max. locations supported in distance table query")
|
||||
("max-matching-size,m", boost::program_options::value<int>(&max_locations_map_matching)->default_value(-1),
|
||||
"Max. locations supported in map matching query");
|
||||
|
||||
// hidden options, will be allowed both on command line and in config
|
||||
// file, but will not be shown to the user
|
||||
@ -269,6 +271,10 @@ inline unsigned GenerateServerProgramOptions(const int argc,
|
||||
{
|
||||
throw osrm::exception("Max location for distance table must be a positive number");
|
||||
}
|
||||
if (2 > max_locations_map_matching)
|
||||
{
|
||||
throw osrm::exception("Max location for map matching must be at least two");
|
||||
}
|
||||
|
||||
SimpleLogger().Write() << visible_options;
|
||||
return INIT_OK_DO_NOT_START_ENGINE;
|
||||
|
Loading…
Reference in New Issue
Block a user