diff --git a/search/ranker.cpp b/search/ranker.cpp index 34f469bb9a..acf3a0d71e 100644 --- a/search/ranker.cpp +++ b/search/ranker.cpp @@ -329,8 +329,13 @@ class RankerResultMaker { public: RankerResultMaker(Ranker & ranker, DataSource const & dataSource, - storage::CountryInfoGetter const & infoGetter, Geocoder::Params const & params) - : m_ranker(ranker), m_dataSource(dataSource), m_infoGetter(infoGetter), m_params(params) + storage::CountryInfoGetter const & infoGetter, + ReverseGeocoder const & reverseGeocoder, Geocoder::Params const & params) + : m_ranker(ranker) + , m_dataSource(dataSource) + , m_infoGetter(infoGetter) + , m_reverseGeocoder(reverseGeocoder) + , m_params(params) { } @@ -378,6 +383,22 @@ private: center = feature::GetCenter(*ft); m_ranker.GetBestMatchName(*ft, name); + // Insert exact address (street and house number) instead of empty result name. + if (name.empty()) + { + ReverseGeocoder::Address addr; + LazyAddressGetter addressGetter(m_reverseGeocoder, center); + if (addressGetter.GetExactAddress(addr)) + { + if (auto streetFeature = LoadFeature(addr.m_street.m_id)) + { + string streetName; + m_ranker.GetBestMatchName(*streetFeature, streetName); + name = streetName + ", " + addr.GetHouseNumber(); + } + } + } + // Country (region) name is a file name if feature isn't from // World.mwm. ASSERT(m_loader && m_loader->GetId() == id.m_mwmId, ()); @@ -560,6 +581,7 @@ private: Ranker & m_ranker; DataSource const & m_dataSource; storage::CountryInfoGetter const & m_infoGetter; + ReverseGeocoder const & m_reverseGeocoder; Geocoder::Params const & m_params; unique_ptr m_loader; @@ -607,14 +629,6 @@ Result Ranker::MakeResult(RankerResult const & rankerResult, bool needAddress, { LazyAddressGetter addressGetter(m_reverseGeocoder, rankerResult.GetCenter()); - // Insert exact address (street and house number) instead of empty result name. - if (name.empty()) - { - ReverseGeocoder::Address addr; - if (addressGetter.GetExactAddress(addr)) - name = FormatStreetAndHouse(addr); - } - address = GetLocalizedRegionInfoForResult(rankerResult); // Format full address only for suitable results. @@ -758,7 +772,7 @@ void Ranker::LoadCountriesTree() { m_regionInfoGetter.LoadCountriesTree(); } void Ranker::MakeRankerResults(Geocoder::Params const & geocoderParams, vector & results) { - RankerResultMaker maker(*this, m_dataSource, m_infoGetter, geocoderParams); + RankerResultMaker maker(*this, m_dataSource, m_infoGetter, m_reverseGeocoder, geocoderParams); for (auto const & r : m_preRankerResults) { auto p = maker(r);