MCPcopy Create free account
hub / github.com/comaps/comaps / ProcessSubroute

Method ProcessSubroute

libs/map/transit/transit_display.cpp:597–678  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

595}
596
597bool TransitRouteDisplay::ProcessSubroute(vector<routing::RouteSegment> const & segments, df::Subroute & subroute)
598{
599 if (m_subrouteIndex > 0)
600 {
601 TransitStepInfo step;
602 step.m_type = TransitType::IntermediatePoint;
603 step.m_intermediateIndex = m_subrouteIndex - 1;
604 m_routeInfo.AddStep(step);
605 }
606
607 ++m_subrouteIndex;
608
609 TransitDisplayInfos transitDisplayInfos;
610 CollectTransitDisplayInfo(segments, transitDisplayInfos);
611
612 // Read transit display info.
613 if (!m_transitReadManager.GetTransitDisplayInfo(transitDisplayInfos))
614 return false;
615
616 subroute.m_maxPixelWidth = m_maxSubrouteWidth;
617 subroute.m_styleType = df::SubrouteStyleType::Multiple;
618 subroute.m_style.clear();
619 subroute.m_style.reserve(segments.size());
620
621 SubrouteParams sp;
622 sp.m_prevDistance = m_routeInfo.m_totalDistInMeters;
623 sp.m_prevTime = m_routeInfo.m_totalTimeInSec;
624
625 for (auto const & s : segments)
626 {
627 auto const time = static_cast<int>(ceil(s.GetTimeFromBeginningSec() - sp.m_prevTime));
628 auto const distance = s.GetDistFromBeginningMeters() - sp.m_prevDistance;
629 sp.m_prevDistance = s.GetDistFromBeginningMeters();
630 sp.m_prevTime = s.GetTimeFromBeginningSec();
631
632 if (!s.HasTransitInfo())
633 {
634 m_routeInfo.AddStep(TransitStepInfo(TransitType::Pedestrian, distance, time));
635
636 AddTransitPedestrianSegment(s.GetJunction().GetPoint(), subroute);
637 sp.m_lastColor = "";
638 sp.m_lastLineId = routing::transit::kInvalidLineId;
639 sp.m_transitType = TransitType::Pedestrian;
640 continue;
641 }
642
643 SubrouteSegmentParams ssp(s.GetTransitInfo());
644
645 ssp.m_time = time;
646 ssp.m_distance = distance;
647 ssp.m_mwmId = m_getMwmIdFn(s.GetSegment().GetMwmId());
648 ssp.m_displayInfo = *transitDisplayInfos.at(ssp.m_mwmId).get();
649
650 if (ssp.m_transitInfo.GetVersion() == ::transit::TransitVersion::OnlySubway)
651 {
652 if (ssp.m_transitInfo.GetType() == routing::TransitInfo::Type::Edge)
653 AddEdgeSubwayForSubroute(s, subroute, sp, ssp);
654 else if (ssp.m_transitInfo.GetType() == routing::TransitInfo::Type::Gate)

Callers 1

InsertRouteMethod · 0.80

Calls 15

GetTransitDisplayInfoMethod · 0.80
GetSegmentMethod · 0.80
atMethod · 0.80
TransitStepInfoClass · 0.70
getMethod · 0.65
AddStepMethod · 0.45
clearMethod · 0.45
reserveMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected