From d54a55c12b5bb8654702d47cfe5eae0c727608f2 Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Mon, 11 Aug 2014 20:29:15 +0200 Subject: [PATCH] implements announcement of waypoints, closes #584 --- DataStructures/RawRouteData.h | 5 +++++ DataStructures/TurnInstructions.h | 2 +- Descriptors/DescriptionFactory.cpp | 10 ++++++++-- Descriptors/DescriptionFactory.h | 2 +- Descriptors/JSONDescriptor.h | 8 +++++--- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/DataStructures/RawRouteData.h b/DataStructures/RawRouteData.h index e034b43bc..f799841b2 100644 --- a/DataStructures/RawRouteData.h +++ b/DataStructures/RawRouteData.h @@ -69,6 +69,11 @@ struct RawRouteData int shortest_path_length; int alternative_path_length; + bool is_via_leg(const std::size_t leg) const + { + return (leg != unpacked_path_segments.size() - 1); + } + RawRouteData() : check_sum(SPECIAL_NODEID), shortest_path_length(INVALID_EDGE_WEIGHT), diff --git a/DataStructures/TurnInstructions.h b/DataStructures/TurnInstructions.h index 61de3b11b..611b574dd 100644 --- a/DataStructures/TurnInstructions.h +++ b/DataStructures/TurnInstructions.h @@ -31,7 +31,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. enum class TurnInstruction : unsigned char { NoTurn = 0, GoStraight, TurnSlightRight, TurnRight, TurnSharpRight, UTurn, - TurnSharpLeft, TurnLeft, TurnSlightLeft, ReachViaPoint, HeadOn, EnterRoundAbout, + TurnSharpLeft, TurnLeft, TurnSlightLeft, ReachViaLocation, HeadOn, EnterRoundAbout, LeaveRoundAbout, StayOnRoundAbout, StartAtEndOfStreet, ReachedYourDestination, EnterAgainstAllowedDirection, LeaveAgainstAllowedDirection, InverseAccessRestrictionFlag = 127, diff --git a/Descriptors/DescriptionFactory.cpp b/Descriptors/DescriptionFactory.cpp index 2d66cc197..2ed10ede5 100644 --- a/Descriptors/DescriptionFactory.cpp +++ b/Descriptors/DescriptionFactory.cpp @@ -50,13 +50,19 @@ void DescriptionFactory::SetStartSegment(const PhantomNode &source, const bool t BOOST_ASSERT(path_description.back().duration == segment_duration); } -void DescriptionFactory::SetEndSegment(const PhantomNode &target, const bool traversed_in_reverse) +void DescriptionFactory::SetEndSegment(const PhantomNode &target, const bool traversed_in_reverse, const bool is_via_location) { target_phantom = target; const EdgeWeight segment_duration = (traversed_in_reverse ? target.reverse_weight : target.forward_weight); path_description.emplace_back( - target.location, target.name_id, segment_duration, 0.f, TurnInstruction::NoTurn, true, true); + target.location, + target.name_id, + segment_duration, + 0.f, + is_via_location ? TurnInstruction::ReachViaLocation : TurnInstruction::NoTurn, + true, + true); BOOST_ASSERT(path_description.back().duration == segment_duration); } diff --git a/Descriptors/DescriptionFactory.h b/Descriptors/DescriptionFactory.h index d081bae88..96f7537eb 100644 --- a/Descriptors/DescriptionFactory.h +++ b/Descriptors/DescriptionFactory.h @@ -80,7 +80,7 @@ class DescriptionFactory void AppendSegment(const FixedPointCoordinate &coordinate, const PathData &data); void BuildRouteSummary(const double distance, const unsigned time); void SetStartSegment(const PhantomNode &start_phantom, const bool traversed_in_reverse); - void SetEndSegment(const PhantomNode &start_phantom, const bool traversed_in_reverse); + void SetEndSegment(const PhantomNode &start_phantom, const bool traversed_in_reverse, const bool is_via_location = false); JSON::Value AppendEncodedPolylineString(const bool return_encoded); std::vector const & GetViaIndices() const; diff --git a/Descriptors/JSONDescriptor.h b/Descriptors/JSONDescriptor.h index 7164ead65..6b35157f4 100644 --- a/Descriptors/JSONDescriptor.h +++ b/Descriptors/JSONDescriptor.h @@ -76,7 +76,8 @@ template class JSONDescriptor : public BaseDescriptor route_leg, const PhantomNodes &leg_phantoms, - const bool target_traversed_in_reverse) + const bool target_traversed_in_reverse, + const bool is_via_leg) { unsigned added_element_count = 0; // Get all the coordinates for the computed route @@ -87,7 +88,7 @@ template class JSONDescriptor : public BaseDescriptor class JSONDescriptor : public BaseDescriptor