Welcome to mirror list, hosted at ThFree Co, Russian Federation.

sponsored_dataset_inl.hpp « generator - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 09dcd46dcc497324544d55efd32de767c7ce15e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#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()
  {
    LoadDataSource(m_dataSource);
    m_coder = make_unique<search::ReverseGeocoder>(m_dataSource);
  }

  template <typename SponsoredObject>
  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<search::ReverseGeocoder> m_coder;
};

// SponsoredDataset --------------------------------------------------------------------------------
template <typename SponsoredObject>
SponsoredDataset<SponsoredObject>::SponsoredDataset(std::string const & dataPath)
  : m_storage(kDistanceLimitInMeters, kMaxSelectedElements)
{
  m_storage.LoadData(dataPath);
}

template <typename SponsoredObject>
void SponsoredDataset<SponsoredObject>::BuildOsmObjects(function<void(FeatureBuilder1 &)> const & fn) const
{
  for (auto const & item : m_storage.GetObjects())
    BuildObject(item.second, fn);
}

template <typename SponsoredObject>
typename SponsoredDataset<SponsoredObject>::ObjectId
SponsoredDataset<SponsoredObject>::FindMatchingObjectId(FeatureBuilder1 const & fb) const
{
  if (NecessaryMatchingConditionHolds(fb))
    return FindMatchingObjectIdImpl(fb);
  return Object::InvalidObjectId();
}
}  // namespace generator