| 166 | LocalitySelector::LocalitySelector(m2::PointD const & p) : m_p(p) {} |
| 167 | |
| 168 | void LocalitySelector::operator()(LocalityItem const & item) |
| 169 | { |
| 170 | auto const inside = item.m_boundaries.HasPoint(m_p); |
| 171 | |
| 172 | // TODO (@y, @m): replace this naive score by p-values on |
| 173 | // multivariate Gaussian. |
| 174 | double const distance = mercator::DistanceOnEarth(item.m_center, m_p); |
| 175 | |
| 176 | // GetPopulationByRadius may return 0. |
| 177 | double const score = (ftypes::GetPopulationByRadius(distance) + 1) / static_cast<double>(item.m_population); |
| 178 | |
| 179 | if (!inside && m_inside) |
| 180 | return; |
| 181 | |
| 182 | ASSERT(inside || !m_inside, ()); |
| 183 | |
| 184 | if ((inside && !m_inside) || (score < m_score)) |
| 185 | { |
| 186 | m_inside = inside; |
| 187 | m_score = score; |
| 188 | m_locality = &item; |
| 189 | } |
| 190 | } |
| 191 | |
| 192 | // LocalityFinder::Holder -------------------------------------------------------------------------- |
| 193 | LocalityFinder::Holder::Holder(double radiusMeters) : m_radiusMeters(radiusMeters) {} |
nothing calls this directly
no test coverage detected