diff --git a/features/support/route.js b/features/support/route.js index 76ce70e43..32401b731 100644 --- a/features/support/route.js +++ b/features/support/route.js @@ -132,7 +132,7 @@ module.exports = function () { this.summary = (instructions) => { if (instructions) { - return instructions.legs.map(l => l.summary).join(','); + return instructions.legs.map(l => l.summary).join(';'); } }; diff --git a/features/testbot/summaries.feature b/features/testbot/summaries.feature new file mode 100644 index 000000000..cbadc7e12 --- /dev/null +++ b/features/testbot/summaries.feature @@ -0,0 +1,29 @@ +@routing @basic @testbot +Feature: Basic Routing + + Background: + Given the profile "testbot" + Given a grid size of 500 meters + + @smallest + Scenario: Summaries when routing on a simple network + Given the node map + | b | | | f | + | | | | | + | c | d | | g | + | | | | | + | a | | e | | + + And the ways + | nodes | name | + | acb | road | + | de | 1 st | + | cd | | + | dg | blvd | + | df | street | + + When I route I should get + | waypoints | route | summary | + | a,e | road,,1 st,1 st | road, 1 st | + | a,d,f | road,,,street,street | road;street | + | a,e,f | road,,1 st,1 st,1 st,street,street | road, 1 st;1 st, street | diff --git a/include/engine/guidance/assemble_leg.hpp b/include/engine/guidance/assemble_leg.hpp index fe8832dc2..fcfa51138 100644 --- a/include/engine/guidance/assemble_leg.hpp +++ b/include/engine/guidance/assemble_leg.hpp @@ -6,6 +6,7 @@ #include "engine/guidance/route_leg.hpp" #include "engine/guidance/route_step.hpp" #include "engine/internal_route_result.hpp" +#include #include #include @@ -177,16 +178,16 @@ inline RouteLeg assembleLeg(const datafacade::BaseDataFacade &facade, BOOST_ASSERT(detail::MAX_USED_SEGMENTS > 0); BOOST_ASSERT(summary_array.begin() != summary_array.end()); - summary = std::accumulate(std::next(summary_array.begin()), - summary_array.end(), - facade.GetNameForID(summary_array.front()), - [&facade](std::string previous, const std::uint32_t name_id) { - if (name_id != 0) - { - previous += ", " + facade.GetNameForID(name_id); - } - return previous; - }); + std::vector summary_names; + for (auto nameIt = summary_array.begin(), end = summary_array.end(); nameIt != end; ++nameIt) + { + auto name = facade.GetNameForID(* nameIt); + name = name.empty() ? facade.GetRefForID(* nameIt) : name; + if (!name.empty()) + summary_names.push_back(name); + } + BOOST_ASSERT(summary_names.size() =< MAX_USED_SEGMENTS); + summary = boost::algorithm::join(summary_names, ", "); } return RouteLeg{duration, distance, summary, {}};