diff options
author | Olga Khlopkova <o.khlopkova@corp.mail.ru> | 2020-10-22 22:29:25 +0300 |
---|---|---|
committer | Anatoliy V. Tomilov <tomilov@users.noreply.github.com> | 2020-10-29 13:51:50 +0300 |
commit | 834ee4c7ef8d1dfb41b71d6d0aec7b5ae1cd58aa (patch) | |
tree | 0df0a53f8e359759808ce18442ee7e13f7e3f061 /transit | |
parent | 696929d952a46ac8d8db3c855b22a1d9a8e77c72 (diff) |
[transit] Fix edges direction for route rendering.
Diffstat (limited to 'transit')
-rw-r--r-- | transit/world_feed/world_feed.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/transit/world_feed/world_feed.cpp b/transit/world_feed/world_feed.cpp index 8b9de3c060..ccfb303cbc 100644 --- a/transit/world_feed/world_feed.cpp +++ b/transit/world_feed/world_feed.cpp @@ -1784,6 +1784,18 @@ bool WorldFeed::PrepareEdgesInRegion(std::string const & region) std::tie(edgeData.m_shapeLink.m_startIndex, edgeData.m_shapeLink.m_endIndex) = FindPointsOnShape(shapePoints, it->second[0].front(), it->second[0].back()); } + + CHECK(edgeData.m_shapeLink.m_startIndex != 0 || edgeData.m_shapeLink.m_endIndex != 0, (edgeData.m_shapeLink.m_shapeId)); + + auto const & pointOnShapeStart = shapePoints[edgeData.m_shapeLink.m_startIndex]; + auto const & pointOnShapeEnd = shapePoints[edgeData.m_shapeLink.m_endIndex]; + + auto const & pointStopStart = m_stops.m_data.at(edgeId.m_fromStopId).m_point; + + if (mercator::DistanceOnEarth(pointOnShapeStart, pointStopStart) > mercator::DistanceOnEarth(pointOnShapeEnd, pointStopStart)) + { + std::swap(edgeData.m_shapeLink.m_startIndex, edgeData.m_shapeLink.m_endIndex); + } } return !edgeIdsInRegion.empty(); |