MCPcopy Create free account
hub / github.com/Project-OSRM/osrm-backend / classifyIntersection

Function classifyIntersection

src/guidance/turn_classification.cpp:11–91  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9{
10
11std::pair<util::guidance::EntryClass, util::guidance::BearingClass>
12classifyIntersection(Intersection intersection, const osrm::util::Coordinate &location)
13{
14 if (intersection.empty())
15 return {};
16
17 std::sort(intersection.begin(),
18 intersection.end(),
19 [](const ConnectedRoad &left, const ConnectedRoad &right)
20 { return left.perceived_bearing < right.perceived_bearing; });
21
22 util::guidance::EntryClass entry_class;
23 util::guidance::BearingClass bearing_class;
24
25 const bool canBeDiscretized = [&]()
26 {
27 if (intersection.size() <= 1)
28 return true;
29
30 DiscreteBearing last_discrete_bearing = util::guidance::BearingClass::getDiscreteBearing(
31 std::round(intersection.back().perceived_bearing));
32 for (const auto &road : intersection)
33 {
34 const DiscreteBearing discrete_bearing =
35 util::guidance::BearingClass::getDiscreteBearing(
36 std::round(road.perceived_bearing));
37 if (discrete_bearing == last_discrete_bearing)
38 return false;
39 last_discrete_bearing = discrete_bearing;
40 }
41 return true;
42 }();
43
44 // finally transfer data to the entry/bearing classes
45 std::size_t number = 0;
46 if (canBeDiscretized)
47 {
48 if (util::guidance::BearingClass::getDiscreteBearing(
49 intersection.back().perceived_bearing) <
50 util::guidance::BearingClass::getDiscreteBearing(
51 intersection.front().perceived_bearing))
52 {
53 intersection.insert(intersection.begin(), intersection.back());
54 intersection.pop_back();
55 }
56 for (const auto &road : intersection)
57 {
58 if (road.entry_allowed)
59 {
60 if (!entry_class.activate(number))
61 {
62 util::Log(logWARNING) << "Road " << number << " was not activated at "
63 << util::toOSMLink(location);
64 }
65 }
66
67 auto discrete_bearing_class = util::guidance::BearingClass::getDiscreteBearing(
68 std::round(road.perceived_bearing));

Callers 1

annotateTurnsFunction · 0.85

Calls 11

LogClass · 0.85
toOSMLinkFunction · 0.85
insertMethod · 0.80
activateMethod · 0.80
addMethod · 0.80
emptyMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
sizeMethod · 0.45
backMethod · 0.45
frontMethod · 0.45

Tested by

no test coverage detected