From f47f008e7debdf608662556bda06a8bde117ab4a Mon Sep 17 00:00:00 2001 From: "Daniel J. Hofmann" Date: Thu, 3 Mar 2016 15:34:13 +0100 Subject: [PATCH] Puts step maneuver handling into implementation file --- include/engine/guidance/assemble_steps.hpp | 28 +++------------- include/engine/guidance/leg_geometry.hpp | 3 +- include/engine/guidance/route_step.hpp | 2 ++ src/engine/guidance/assemble_steps.cpp | 39 ++++++++++++++++++++++ 4 files changed, 48 insertions(+), 24 deletions(-) create mode 100644 src/engine/guidance/assemble_steps.cpp diff --git a/include/engine/guidance/assemble_steps.hpp b/include/engine/guidance/assemble_steps.hpp index bc459ebdc..253e76d1c 100644 --- a/include/engine/guidance/assemble_steps.hpp +++ b/include/engine/guidance/assemble_steps.hpp @@ -24,29 +24,11 @@ namespace guidance { namespace detail { -// FIXME move implementation to cpp -inline StepManeuver stepManeuverFromGeometry(extractor::guidance::TurnInstruction instruction, - const LegGeometry &leg_geometry, - const std::size_t segment_index, - const unsigned exit) -{ - auto turn_index = leg_geometry.BackIndex(segment_index); - BOOST_ASSERT(turn_index > 0); - BOOST_ASSERT(turn_index < leg_geometry.locations.size() - 1); - - // TODO chose a bigger look-a-head to smooth complex geometry - const auto pre_turn_coordinate = leg_geometry.locations[turn_index - 1]; - const auto turn_coordinate = leg_geometry.locations[turn_index]; - const auto post_turn_coordinate = leg_geometry.locations[turn_index + 1]; - - const double pre_turn_bearing = - util::coordinate_calculation::bearing(pre_turn_coordinate, turn_coordinate); - const double post_turn_bearing = - util::coordinate_calculation::bearing(turn_coordinate, post_turn_coordinate); - - return StepManeuver{turn_coordinate, pre_turn_bearing, post_turn_bearing, instruction, exit}; -} -} +StepManeuver stepManeuverFromGeometry(extractor::guidance::TurnInstruction instruction, + const LegGeometry &leg_geometry, + const std::size_t segment_index, + const unsigned exit); +} // ns detail template std::vector assembleSteps(const DataFacadeT &facade, diff --git a/include/engine/guidance/leg_geometry.hpp b/include/engine/guidance/leg_geometry.hpp index 1b2d184d1..15fa53db2 100644 --- a/include/engine/guidance/leg_geometry.hpp +++ b/include/engine/guidance/leg_geometry.hpp @@ -5,7 +5,8 @@ #include "util/integer_range.hpp" #include -#include + +#include #include #include diff --git a/include/engine/guidance/route_step.hpp b/include/engine/guidance/route_step.hpp index 0b3f21159..1a53579f9 100644 --- a/include/engine/guidance/route_step.hpp +++ b/include/engine/guidance/route_step.hpp @@ -4,6 +4,8 @@ #include "extractor/travel_mode.hpp" #include "engine/guidance/step_maneuver.hpp" +#include + #include #include diff --git a/src/engine/guidance/assemble_steps.cpp b/src/engine/guidance/assemble_steps.cpp new file mode 100644 index 000000000..094b5ca6d --- /dev/null +++ b/src/engine/guidance/assemble_steps.cpp @@ -0,0 +1,39 @@ +#include "engine/guidance/assemble_steps.hpp" + +#include + +#include + +namespace osrm +{ +namespace engine +{ +namespace guidance +{ +namespace detail +{ +StepManeuver stepManeuverFromGeometry(extractor::guidance::TurnInstruction instruction, + const LegGeometry &leg_geometry, + const std::size_t segment_index, + const unsigned exit) +{ + auto turn_index = leg_geometry.BackIndex(segment_index); + BOOST_ASSERT(turn_index > 0); + BOOST_ASSERT(turn_index < leg_geometry.locations.size() - 1); + + // TODO chose a bigger look-a-head to smooth complex geometry + const auto pre_turn_coordinate = leg_geometry.locations[turn_index - 1]; + const auto turn_coordinate = leg_geometry.locations[turn_index]; + const auto post_turn_coordinate = leg_geometry.locations[turn_index + 1]; + + const double pre_turn_bearing = + util::coordinate_calculation::bearing(pre_turn_coordinate, turn_coordinate); + const double post_turn_bearing = + util::coordinate_calculation::bearing(turn_coordinate, post_turn_coordinate); + + return StepManeuver{turn_coordinate, pre_turn_bearing, post_turn_bearing, instruction, exit}; +} +} // ns detail +} // ns engine +} // ns guidance +} // ns detail