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

Method RedressRoute

libs/routing/index_router.cpp:1625–1727  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1623}
1624
1625RouterResultCode IndexRouter::RedressRoute(vector<Segment> const & segments, base::Cancellable const & cancellable,
1626 IndexGraphStarter & starter, Route & route)
1627{
1628 CHECK(!segments.empty(), ());
1629 IndexGraphStarter::CheckValidRoute(segments);
1630
1631 size_t const segsCount = segments.size();
1632 vector<geometry::PointWithAltitude> junctions;
1633 junctions.reserve(segsCount + 1);
1634
1635 for (size_t i = 0; i <= segsCount; ++i)
1636 junctions.emplace_back(starter.GetRouteJunction(segments, i).ToPointWithAltitude());
1637
1638 IndexRoadGraph roadGraph(starter, segments, junctions, m_dataSource);
1639 starter.GetGraph().SetMode(WorldGraphMode::NoLeaps);
1640
1641 vector<double> times;
1642 times.reserve(segments.size());
1643
1644 // Time at first route point - weight of first segment.
1645 double time = starter.CalculateETAWithoutPenalty(segments.front());
1646 times.emplace_back(time);
1647
1648 for (size_t i = 1; i < segments.size(); ++i)
1649 {
1650 time += starter.CalculateETA(segments[i - 1], segments[i]);
1651 times.emplace_back(time);
1652 }
1653
1654 m_directionsEngine->SetVehicleType(m_vehicleType);
1655 ReconstructRoute(*m_directionsEngine, roadGraph, cancellable, junctions, times, route);
1656
1657 if (cancellable.IsCancelled())
1658 return RouterResultCode::Cancelled;
1659
1660 if (!route.IsValid())
1661 {
1662 LOG(LERROR, ("RedressRoute failed, segmenst count =", segments.size()));
1663 return RouterResultCode::RouteNotFoundRedressRouteError;
1664 }
1665
1666 auto & worldGraph = starter.GetGraph();
1667
1668 /// @todo I suspect that we can avoid calculating segments inside ReconstructRoute
1669 /// and use original |segments| (IndexRoadGraph::GetRouteSegments).
1670#ifdef DEBUG
1671 {
1672 auto const isPassThroughAllowed = [&worldGraph](Segment const & s)
1673 { return worldGraph.IsPassThroughAllowed(s.GetMwmId(), s.GetFeatureId()); };
1674
1675 auto const & rSegments = route.GetRouteSegments();
1676 ASSERT_EQUAL(segsCount, rSegments.size(), ());
1677 for (size_t i = 0; i < segsCount; ++i)
1678 {
1679 if (segments[i].IsRealSegment())
1680 {
1681 ASSERT_EQUAL(segments[i], rSegments[i].GetSegment(), ());
1682

Callers

nothing calls this directly

Calls 15

ReconstructRouteFunction · 0.85
ToPointWithAltitudeMethod · 0.80
frontMethod · 0.80
SetVehicleTypeMethod · 0.80
GetSegmentMethod · 0.80
SetTransitInfoMethod · 0.80
SetRoadTypesMethod · 0.80
SetSpeedCameraInfoMethod · 0.80
SetTrafficMethod · 0.80
SetSpeedLimitMethod · 0.80

Tested by

no test coverage detected