mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-20 13:23:59 +00:00
[routing] Simplify notifications on roundabout.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
committed by
Konstantin Pastbin
parent
836c39ff64
commit
1a6bbd756a
@@ -487,10 +487,11 @@ UNIT_TEST(TurnsSound_RoundaboutTurnTest)
|
|||||||
// 620 meters till the 4th turn.
|
// 620 meters till the 4th turn.
|
||||||
vector<TurnItemDist> const turns9 = {
|
vector<TurnItemDist> const turns9 = {
|
||||||
{{25 /* idx */, CarDirection::EnterRoundAbout, 4 /* m_exitNum */}, 620. /* m_distMeters */},
|
{{25 /* idx */, CarDirection::EnterRoundAbout, 4 /* m_exitNum */}, 620. /* m_distMeters */},
|
||||||
{{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 665. /* m_distMeters */}};
|
{{30 /* idx */, CarDirection::LeaveRoundAbout, 4 /* m_exitNum */}, 1000. /* m_distMeters */}};
|
||||||
vector<string> const expectedNotification9 = {{"In 600 meters. Enter the roundabout."},
|
vector<string> const expectedNotification9 = {{"In 600 meters. Enter the roundabout."},
|
||||||
{"Then. Take the fourth exit."}};
|
{"Then. Take the fourth exit."}};
|
||||||
notificationManager.GenerateTurnNotifications(turns9, turnNotifications);
|
notificationManager.GenerateTurnNotifications(turns9, turnNotifications,
|
||||||
|
routing::RouteSegment::RoadNameInfo("Main street"));
|
||||||
TEST_EQUAL(turnNotifications, expectedNotification9, ());
|
TEST_EQUAL(turnNotifications, expectedNotification9, ());
|
||||||
TEST_EQUAL(notificationManager.GetSecondTurnNotification(), CarDirection::LeaveRoundAbout, ());
|
TEST_EQUAL(notificationManager.GetSecondTurnNotification(), CarDirection::LeaveRoundAbout, ());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,15 +75,15 @@ std::string NotificationManager::GenerateTurnText(uint32_t distanceUnits, uint8_
|
|||||||
{
|
{
|
||||||
auto const lengthUnits = m_settings.GetLengthUnits();
|
auto const lengthUnits = m_settings.GetLengthUnits();
|
||||||
|
|
||||||
if (turn.m_turn != CarDirection::None && turn.m_turn != CarDirection::EnterRoundAbout)
|
Notification notif{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits};
|
||||||
return m_getTtsText.GetTurnNotification(
|
if (turn.m_turn == CarDirection::None)
|
||||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits, nextStreetInfo});
|
notif.m_turnDirPedestrian = turn.m_pedestrianTurn;
|
||||||
else if (turn.m_turn == CarDirection::EnterRoundAbout) // Don't include roundabout street name in TTS
|
|
||||||
return m_getTtsText.GetTurnNotification(
|
|
||||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_turn, lengthUnits});
|
|
||||||
|
|
||||||
return m_getTtsText.GetTurnNotification(
|
// https://github.com/organicmaps/organicmaps/issues/6146
|
||||||
{distanceUnits, exitNum, useThenInsteadOfDistance, turn.m_pedestrianTurn, lengthUnits, nextStreetInfo});
|
if (turn.m_turn != CarDirection::EnterRoundAbout)
|
||||||
|
notif.m_nextStreetInfo = nextStreetInfo;
|
||||||
|
|
||||||
|
return m_getTtsText.GetTurnNotification(notif);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string NotificationManager::GenerateRecalculatingText() const
|
std::string NotificationManager::GenerateRecalculatingText() const
|
||||||
@@ -129,12 +129,14 @@ void NotificationManager::GenerateTurnNotifications(std::vector<TurnItemDist> co
|
|||||||
|
|
||||||
double distBetweenTurnsMeters = secondTurn.m_distMeters - firstTurn.m_distMeters;
|
double distBetweenTurnsMeters = secondTurn.m_distMeters - firstTurn.m_distMeters;
|
||||||
ASSERT_GREATER_OR_EQUAL(distBetweenTurnsMeters, 0, ());
|
ASSERT_GREATER_OR_EQUAL(distBetweenTurnsMeters, 0, ());
|
||||||
if (distBetweenTurnsMeters > kSecondTurnThresholdDistM && !IsClassicEntranceToRoundabout(firstTurn, secondTurn))
|
bool const isRoundabout = IsClassicEntranceToRoundabout(firstTurn, secondTurn);
|
||||||
|
if (!isRoundabout && distBetweenTurnsMeters > kSecondTurnThresholdDistM)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ((distBetweenTurnsMeters < kDistanceNotifyThresholdM) || IsClassicEntranceToRoundabout(firstTurn, secondTurn))
|
if (distBetweenTurnsMeters < kDistanceNotifyThresholdM ||
|
||||||
|
(isRoundabout && distBetweenTurnsMeters < kSecondTurnThresholdDistM))
|
||||||
{
|
{
|
||||||
// distanceUnits is not used because "Then" is used
|
// Don't pronounce distance because of immediate "Then".
|
||||||
distBetweenTurnsMeters = 0;
|
distBetweenTurnsMeters = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -167,26 +167,6 @@ struct Notification
|
|||||||
, m_lengthUnits(lengthUnits)
|
, m_lengthUnits(lengthUnits)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance,
|
|
||||||
PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits,
|
|
||||||
RouteSegment::RoadNameInfo const & nextStreetInfo)
|
|
||||||
: m_distanceUnits(distanceUnits)
|
|
||||||
, m_exitNum(exitNum)
|
|
||||||
, m_useThenInsteadOfDistance(useThenInsteadOfDistance)
|
|
||||||
, m_turnDirPedestrian(turnDirPedestrian)
|
|
||||||
, m_lengthUnits(lengthUnits)
|
|
||||||
, m_nextStreetInfo(nextStreetInfo)
|
|
||||||
{}
|
|
||||||
|
|
||||||
Notification(uint32_t distanceUnits, uint8_t exitNum, bool useThenInsteadOfDistance,
|
|
||||||
PedestrianDirection turnDirPedestrian, measurement_utils::Units lengthUnits)
|
|
||||||
: m_distanceUnits(distanceUnits)
|
|
||||||
, m_exitNum(exitNum)
|
|
||||||
, m_useThenInsteadOfDistance(useThenInsteadOfDistance)
|
|
||||||
, m_turnDirPedestrian(turnDirPedestrian)
|
|
||||||
, m_lengthUnits(lengthUnits)
|
|
||||||
{}
|
|
||||||
|
|
||||||
bool operator==(Notification const & rhv) const
|
bool operator==(Notification const & rhv) const
|
||||||
{
|
{
|
||||||
return m_distanceUnits == rhv.m_distanceUnits && m_exitNum == rhv.m_exitNum &&
|
return m_distanceUnits == rhv.m_distanceUnits && m_exitNum == rhv.m_exitNum &&
|
||||||
|
|||||||
Reference in New Issue
Block a user