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

Method FindConnection

libs/search/house_detector.cpp:767–801  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

765}
766
767HouseDetector::StreetPtr HouseDetector::FindConnection(Street const * st, bool beg) const
768{
769 m2::PointD const & pt = beg ? st->m_points.front() : st->m_points.back();
770
771 StreetPtr resStreet(0, false);
772 double resDistance = numeric_limits<double>::max();
773 double const minSqDistance = math::Pow2(m_metersToMercator * STREET_CONNECTION_LENGTH_M);
774
775 for (size_t i = 0; i < m_end2st.size(); ++i)
776 {
777 if (pt.SquaredLength(m_end2st[i].first) > minSqDistance)
778 continue;
779
780 Street * current = m_end2st[i].second;
781
782 // Choose the possible connection from non-processed and from the same street parts.
783 if (current != st && (current->m_number == -1 || current->m_number == m_streetNum) &&
784 Street::IsSameStreets(st, current))
785 {
786 // Choose the closest connection with suitable angle.
787 bool isBeg = beg;
788 pair<double, double> const res = GetConnectionAngleAndDistance(isBeg, st, current);
789 if (fabs(res.first) < STREET_CONNECTION_MAX_ANGLE && res.second < resDistance)
790 {
791 resStreet = StreetPtr(current, isBeg);
792 resDistance = res.second;
793 }
794 }
795 }
796
797 if (resStreet.first && resStreet.first->m_number == -1)
798 return resStreet;
799 else
800 return StreetPtr(0, false);
801}
802
803void HouseDetector::MergeStreets(Street * st)
804{

Callers

nothing calls this directly

Calls 6

Pow2Function · 0.85
frontMethod · 0.80
backMethod · 0.80
SquaredLengthMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected