| 765 | } |
| 766 | |
| 767 | HouseDetector::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 | |
| 803 | void HouseDetector::MergeStreets(Street * st) |
| 804 | { |
nothing calls this directly
no test coverage detected