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

Method GetBearingScore

tools/openlr/score_candidate_paths_getter.cpp:302–324  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

300}
301
302bool ScoreCandidatePathsGetter::GetBearingScore(BearingPointsSelector const & pointsSelector,
303 ScoreCandidatePathsGetter::Link const & part,
304 m2::PointD const & bearStartPoint, uint32_t requiredBearing,
305 Score & score)
306{
307 auto const bearEndPoint = pointsSelector.GetEndPoint(part.m_edge, part.m_distanceM);
308
309 auto const bearingDeg = scpg::BearingInDeg(bearStartPoint, bearEndPoint);
310 double const requiredBearingDeg = scpg::ToAngleInDeg(requiredBearing);
311 double const angleDeviationDeg = scpg::DifferenceInDeg(bearingDeg, requiredBearingDeg);
312
313 // If the bearing according to osm segments (|bearingDeg|) is significantly different
314 // from the bearing set in openlr (|requiredBearingDeg|) the candidate should be skipped.
315 double constexpr kMinAngleDeviationDeg = 50.0;
316 if (angleDeviationDeg > kMinAngleDeviationDeg)
317 return false;
318
319 double constexpr kMaxScoreForBearing = 60.0;
320 double constexpr kAngleDeviationFactor = 1.0 / 4.3;
321 score = static_cast<Score>(kMaxScoreForBearing / (1.0 + angleDeviationDeg * kAngleDeviationFactor));
322
323 return true;
324}
325} // namespace openlr

Callers

nothing calls this directly

Calls 4

BearingInDegFunction · 0.85
ToAngleInDegFunction · 0.85
DifferenceInDegFunction · 0.85
GetEndPointMethod · 0.45

Tested by

no test coverage detected