From 48d5651e3288dedc7bcc18b95f07781e8da5e10a Mon Sep 17 00:00:00 2001 From: Siarhei Fedartsou Date: Fri, 10 May 2024 20:37:37 +0200 Subject: [PATCH] Optimise path distance calculation in MLD map matching --- .../engine/routing_algorithms/routing_base_mld.hpp | 13 +++++++------ src/benchmarks/match.cpp | 3 ++- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/include/engine/routing_algorithms/routing_base_mld.hpp b/include/engine/routing_algorithms/routing_base_mld.hpp index b680867ee..9cb16b02a 100644 --- a/include/engine/routing_algorithms/routing_base_mld.hpp +++ b/include/engine/routing_algorithms/routing_base_mld.hpp @@ -650,25 +650,26 @@ double getNetworkDistance(SearchEngineData &engine_working_data, return std::numeric_limits::max(); } - + BOOST_ASSERT(unpacked_nodes.size() >= 1); EdgeDistance distance = {0.0}; - if (source_phantom.forward_segment_id.id == unpacked_nodes[0]) + if (source_phantom.forward_segment_id.id == unpacked_nodes.front()) { BOOST_ASSERT(source_phantom.forward_segment_id.enabled); distance = EdgeDistance{0} - source_phantom.GetForwardDistance(); } - else if (source_phantom.reverse_segment_id.id == unpacked_nodes[0]) + else if (source_phantom.reverse_segment_id.id == unpacked_nodes.front()) { BOOST_ASSERT(source_phantom.reverse_segment_id.enabled); distance = EdgeDistance{0} - source_phantom.GetReverseDistance(); } - - for (size_t index = 0; index < unpacked_nodes.size() - 1; ++index) { + + for (size_t index = 0; index < unpacked_nodes.size() - 1; ++index) + { distance += facade.GetNodeDistance(unpacked_nodes[index]); } - + if (target_phantom.forward_segment_id.id == unpacked_nodes.back()) { BOOST_ASSERT(target_phantom.forward_segment_id.enabled); diff --git a/src/benchmarks/match.cpp b/src/benchmarks/match.cpp index 8bad6ea95..caed1a00b 100644 --- a/src/benchmarks/match.cpp +++ b/src/benchmarks/match.cpp @@ -33,7 +33,8 @@ try // Configure based on a .osrm base path, and no datasets in shared mem from osrm-datastore EngineConfig config; config.storage_config = {argv[1]}; - config.algorithm = (argc > 2 && std::string{argv[2]} == "mld") ? EngineConfig::Algorithm::MLD : EngineConfig::Algorithm::CH; + config.algorithm = (argc > 2 && std::string{argv[2]} == "mld") ? EngineConfig::Algorithm::MLD + : EngineConfig::Algorithm::CH; config.use_shared_memory = false; // Routing machine with several services (such as Route, Table, Nearest, Trip, Match)