diff --git a/map/routing_manager.cpp b/map/routing_manager.cpp index 97785eba45..d59fb69abc 100644 --- a/map/routing_manager.cpp +++ b/map/routing_manager.cpp @@ -103,6 +103,7 @@ RouteMarkData GetLastPassedPoint(BookmarkManager * bmManager, vectorMyPositionMark().GetPivot(); data.m_isMyPosition = false; + data.m_replaceWithMyPosition = true; } return data; @@ -116,6 +117,7 @@ void SerializeRoutePoint(json_t * node, RouteMarkData const & data) ToJSONObject(*node, "subtitle", data.m_subTitle); ToJSONObject(*node, "x", data.m_position.x); ToJSONObject(*node, "y", data.m_position.y); + ToJSONObject(*node, "replaceWithMyPosition", data.m_replaceWithMyPosition); } RouteMarkData DeserializeRoutePoint(json_t * node) @@ -133,6 +135,8 @@ RouteMarkData DeserializeRoutePoint(json_t * node) FromJSONObject(node, "x", data.m_position.x); FromJSONObject(node, "y", data.m_position.y); + FromJSONObject(node, "replaceWithMyPosition", data.m_replaceWithMyPosition); + return data; } @@ -1397,13 +1401,18 @@ void RoutingManager::LoadRoutePoints(LoadRouteHandler const & handler) [this, handler, points = std::move(points)]() mutable { ASSERT(m_bmManager != nullptr, ()); - // If we have found my position, we use my position as start point. + // If we have found my position and the saved route used the user's position, we use my position as start point. + bool routeUsedPosition = false; auto const & myPosMark = m_bmManager->MyPositionMark(); auto editSession = m_bmManager->GetEditSession(); editSession.ClearGroup(UserMark::Type::ROUTING); for (auto & p : points) { - if (p.m_pointType == RouteMarkType::Start && myPosMark.HasPosition()) + // Check if the saved route used the user's position + if (p.m_replaceWithMyPosition && p.m_pointType == RouteMarkType::Start) + routeUsedPosition = true; + + if (p.m_replaceWithMyPosition && p.m_pointType == RouteMarkType::Start && myPosMark.HasPosition()) { RouteMarkData startPt; startPt.m_pointType = RouteMarkType::Start; @@ -1417,9 +1426,9 @@ void RoutingManager::LoadRoutePoints(LoadRouteHandler const & handler) } } - // If we don't have my position, save loading timestamp. Probably - // we will get my position soon. - if (!myPosMark.HasPosition()) + // If we don't have my position and the saved route used it, save loading timestamp. + // Probably we will get my position soon. + if (routeUsedPosition && !myPosMark.HasPosition()) m_loadRoutePointsTimestamp = chrono::steady_clock::now(); if (handler) diff --git a/map/routing_mark.hpp b/map/routing_mark.hpp index d147de22ce..e2d0007add 100644 --- a/map/routing_mark.hpp +++ b/map/routing_mark.hpp @@ -22,6 +22,7 @@ struct RouteMarkData bool m_isVisible = true; bool m_isMyPosition = false; bool m_isPassed = false; + bool m_replaceWithMyPosition = false; m2::PointD m_position; };