From e619d29e14267d181b4e10e1af382ad5a8530b81 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Thu, 11 Dec 2014 12:02:11 +0300 Subject: [PATCH] Removing turns in the case if (1) source and target names are the same; (2) the angle between is TurnSlightRight, TurnSlightLeft or GoStraight --- routing/osrm_router.cpp | 8 ++++++++ routing/turns.cpp | 4 ++++ routing/turns.hpp | 1 + 3 files changed, 13 insertions(+) diff --git a/routing/osrm_router.cpp b/routing/osrm_router.cpp index e04151e107..c11d3f32b1 100644 --- a/routing/osrm_router.cpp +++ b/routing/osrm_router.cpp @@ -997,6 +997,14 @@ void OsrmRouter::FixupTurns(vector const & points, Route::TurnsT & t continue; } + if (!t.m_srcName.empty() + && t.m_srcName == t.m_trgName + && turns::IsTurnSlightOrStraight(t.m_turn)) + { + turnsDir.erase(turnsDir.begin() + idx); + continue; + } + ++idx; } } diff --git a/routing/turns.cpp b/routing/turns.cpp index 289f3f5703..78ac321260 100644 --- a/routing/turns.cpp +++ b/routing/turns.cpp @@ -54,6 +54,10 @@ bool IsStayOnRoad(TurnDirection t) return (t == turns::GoStraight || t == turns::StayOnRoundAbout); } +bool IsTurnSlightOrStraight(TurnDirection t) +{ + return (t == GoStraight || t == TurnSlightRight || t == TurnSlightLeft); } } +} diff --git a/routing/turns.hpp b/routing/turns.hpp index 3099490252..f9adcb9d12 100644 --- a/routing/turns.hpp +++ b/routing/turns.hpp @@ -46,6 +46,7 @@ bool IsLeftTurn(TurnDirection t); bool IsRightTurn(TurnDirection t); bool IsLeftOrRightTurn(TurnDirection t); bool IsStayOnRoad(TurnDirection t); +bool IsTurnSlightOrStraight(TurnDirection t); } }