From fe782535bc94e498be7e8e8d26781093165a7d6e Mon Sep 17 00:00:00 2001 From: Yuri Gorshenin Date: Fri, 25 Mar 2016 12:16:38 +0300 Subject: [PATCH] [reverse-geocoder] Skip address initialization for features outside of buildings. --- map/address_finder.cpp | 23 +++++++++++++++++------ search/reverse_geocoder.cpp | 6 ++++-- search/reverse_geocoder.hpp | 2 +- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/map/address_finder.cpp b/map/address_finder.cpp index e9c39284fb..8137fe9da6 100644 --- a/map/address_finder.cpp +++ b/map/address_finder.cpp @@ -453,16 +453,25 @@ namespace } } */ + search::AddressInfo Framework::GetAddressInfoAtPoint(m2::PointD const & pt) const { + double kDistanceThresholdMeters = 0.5; + search::AddressInfo info; search::ReverseGeocoder const coder(m_model.GetIndex()); search::ReverseGeocoder::Address addr; coder.GetNearbyAddress(pt, addr); - info.m_house = addr.GetHouseNumber(); - info.m_street = addr.GetStreetName(); - info.m_distanceMeters = addr.GetDistance(); + + // We do not init nearby address info for points that are located + // outside of the nearby building. + if (addr.GetDistance() < kDistanceThresholdMeters) + { + info.m_house = addr.GetHouseNumber(); + info.m_street = addr.GetStreetName(); + info.m_distanceMeters = addr.GetDistance(); + } return info; } @@ -482,9 +491,11 @@ search::AddressInfo Framework::GetFeatureAddressInfo(FeatureType & ft) const search::ReverseGeocoder const coder(m_model.GetIndex()); search::ReverseGeocoder::Address addr; - coder.GetNearbyAddress(ft, addr); - info.m_house = addr.GetHouseNumber(); - info.m_street = addr.GetStreetName(); + if (coder.GetExactAddress(ft, addr)) + { + info.m_house = addr.GetHouseNumber(); + info.m_street = addr.GetStreetName(); + } // TODO(vng): Why AddressInfo is responsible for types and names? Refactor out. string defaultName, intName; diff --git a/search/reverse_geocoder.cpp b/search/reverse_geocoder.cpp index 87f74b31a0..dda9d7ab25 100644 --- a/search/reverse_geocoder.cpp +++ b/search/reverse_geocoder.cpp @@ -125,10 +125,12 @@ void ReverseGeocoder::GetNearbyAddress(m2::PointD const & center, Address & addr } } -void ReverseGeocoder::GetNearbyAddress(FeatureType & ft, Address & addr) const +bool ReverseGeocoder::GetExactAddress(FeatureType & ft, Address & addr) const { + if (ft.GetHouseNumber().empty()) + return false; HouseTable table(m_index); - (void)GetNearbyAddress(table, FromFeature(ft, 0.0 /* distMeters */), addr); + return GetNearbyAddress(table, FromFeature(ft, 0.0 /* distMeters */), addr); } bool ReverseGeocoder::GetNearbyAddress(HouseTable & table, Building const & bld, diff --git a/search/reverse_geocoder.hpp b/search/reverse_geocoder.hpp index 2984a888f6..4b45093d0e 100644 --- a/search/reverse_geocoder.hpp +++ b/search/reverse_geocoder.hpp @@ -90,7 +90,7 @@ public: void GetNearbyAddress(m2::PointD const & center, Address & addr) const; /// @return The exact address for feature. /// @precondition ft Should have house number. - void GetNearbyAddress(FeatureType & ft, Address & addr) const; + bool GetExactAddress(FeatureType & ft, Address & addr) const; private: