From b99673f4e6dc568ce056fa1dde50ad77c70cfae2 Mon Sep 17 00:00:00 2001 From: Sergey Magidovich Date: Fri, 26 Jan 2018 16:04:37 +0300 Subject: [OpenLR] Avoid routes with two adjacent fake edges. --- openlr/candidate_paths_getter.cpp | 4 ++++ openlr/paths_connector.cpp | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/openlr/candidate_paths_getter.cpp b/openlr/candidate_paths_getter.cpp index be7a952049..a61e3bb407 100644 --- a/openlr/candidate_paths_getter.cpp +++ b/openlr/candidate_paths_getter.cpp @@ -219,6 +219,10 @@ void CandidatePathsGetter::GetAllSuitablePaths(Graph::EdgeVector const & startLi for (auto const & e : edges) { + // Fake edges are allowed only at the start/end of the path. + if (e.IsFake()) + continue; + if (EdgesAreAlmostEqual(e.GetReverseEdge(), currentEdge)) continue; diff --git a/openlr/paths_connector.cpp b/openlr/paths_connector.cpp index 0052fcaad0..57a9c46f35 100644 --- a/openlr/paths_connector.cpp +++ b/openlr/paths_connector.cpp @@ -196,6 +196,11 @@ bool PathsConnector::FindShortestPath(Graph::Edge const & from, Graph::Edge cons { // TODO(mgsergio): Use frc to filter edges. + // Only start and/or end of the route can be fake. + // Routes made only of fake edges are no used to us. + if (u.IsFake() && e.IsFake()) + continue; + auto const it = scores.find(e); auto const eScore = us + EdgeLength(e); if (it == end(scores) || it->second > eScore) -- cgit v1.2.3