#include "generator/sponsored_dataset.hpp" #include "generator/utils.hpp" #include "search/reverse_geocoder.hpp" #include "indexer/data_source.hpp" #include "geometry/latlon.hpp" #include "geometry/mercator.hpp" #include "base/logging.hpp" #include "base/stl_add.hpp" #include "base/string_utils.hpp" namespace generator { class AddressMatcher { public: AddressMatcher() : m_dataSource(make_unique()) { LoadDataSource(m_dataSource); m_coder = make_unique(m_dataSource); } template void operator()(SponsoredObject & object) { search::ReverseGeocoder::Address addr; m_coder->GetNearbyAddress(MercatorBounds::FromLatLon(object.m_latLon), addr); object.m_street = addr.GetStreetName(); object.m_houseNumber = addr.GetHouseNumber(); } private: DataSource m_dataSource; std::unique_ptr m_coder; }; // SponsoredDataset -------------------------------------------------------------------------------- template SponsoredDataset::SponsoredDataset(std::string const & dataPath) : m_storage(kDistanceLimitInMeters, kMaxSelectedElements) { m_storage.LoadData(dataPath); } template void SponsoredDataset::BuildOsmObjects(function const & fn) const { for (auto const & item : m_storage.GetObjects()) BuildObject(item.second, fn); } template typename SponsoredDataset::ObjectId SponsoredDataset::FindMatchingObjectId(FeatureBuilder1 const & fb) const { if (NecessaryMatchingConditionHolds(fb)) return FindMatchingObjectIdImpl(fb); return Object::InvalidObjectId(); } } // namespace generator