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

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortatiana-yan <tatiana.kondakova@gmail.com>2019-04-16 15:22:05 +0300
committermpimenov <mpimenov@users.noreply.github.com>2019-04-19 13:43:33 +0300
commita92382e5cdf52a69520789f35f7bda1174f2edc8 (patch)
treecf54e3119d9e986f6481b9083db47572ea4e27e8 /generator
parent639eb6471f8b290190b34030d0dc2d20709cd7e6 (diff)
[generator] Add ratings section.
Diffstat (limited to 'generator')
-rw-r--r--generator/CMakeLists.txt2
-rw-r--r--generator/generator_tool/generator_tool.cpp6
-rw-r--r--generator/ratings_section_builder.cpp60
-rw-r--r--generator/ratings_section_builder.hpp9
4 files changed, 75 insertions, 2 deletions
diff --git a/generator/CMakeLists.txt b/generator/CMakeLists.txt
index e3638486f1..3dab15006f 100644
--- a/generator/CMakeLists.txt
+++ b/generator/CMakeLists.txt
@@ -143,6 +143,8 @@ set(SRC
place_node.hpp
platform_helpers.cpp
platform_helpers.hpp
+ ratings_section_builder.cpp
+ ratings_section_builder.hpp
relation_tags.cpp
relation_tags.hpp
relation_tags_enricher.cpp
diff --git a/generator/generator_tool/generator_tool.cpp b/generator/generator_tool/generator_tool.cpp
index e45821eb5d..ac0e1294b6 100644
--- a/generator/generator_tool/generator_tool.cpp
+++ b/generator/generator_tool/generator_tool.cpp
@@ -20,6 +20,7 @@
#include "generator/platform_helpers.hpp"
#include "generator/popular_places_section_builder.hpp"
#include "generator/popularity.hpp"
+#include "generator/ratings_section_builder.hpp"
#include "generator/regions/collector_region_info.hpp"
#include "generator/regions/regions.hpp"
#include "generator/restriction_generator.hpp"
@@ -637,9 +638,10 @@ int GeneratorToolMain(int argc, char ** argv)
if (!FLAGS_ugc_data.empty())
{
if (!BuildUgcMwmSection(FLAGS_ugc_data, datFile, osmToFeatureFilename))
- {
LOG(LCRITICAL, ("Error generating UGC mwm section."));
- }
+
+ if (!BuildRatingsMwmSection(FLAGS_ugc_data, datFile, osmToFeatureFilename))
+ LOG(LCRITICAL, ("Error generating ratings mwm section."));
}
if (!FLAGS_wikipedia_pages.empty())
diff --git a/generator/ratings_section_builder.cpp b/generator/ratings_section_builder.cpp
new file mode 100644
index 0000000000..5639b1e569
--- /dev/null
+++ b/generator/ratings_section_builder.cpp
@@ -0,0 +1,60 @@
+#include "generator/ratings_section_builder.hpp"
+
+#include "generator/ugc_translator.hpp"
+#include "generator/utils.hpp"
+
+#include "ugc/binary/index_ugc.hpp"
+
+#include "indexer/feature_data.hpp"
+#include "indexer/feature_processor.hpp"
+#include "indexer/rank_table.hpp"
+
+#include "base/geo_object_id.hpp"
+
+#include <cstdint>
+#include <unordered_map>
+#include <vector>
+
+#include "defines.hpp"
+
+namespace generator
+{
+bool BuildRatingsMwmSection(std::string const & srcDbFilename, std::string const & mwmFile,
+ std::string const & osmToFeatureFilename)
+{
+ LOG(LINFO, ("Build Ratings section"));
+
+ std::unordered_map<uint32_t, std::vector<base::GeoObjectId>> featureToOsmId;
+ if (!ParseFeatureIdToOsmIdMapping(osmToFeatureFilename, featureToOsmId))
+ return false;
+
+ UGCTranslator translator(srcDbFilename);
+ std::vector<uint8_t> content;
+ bool haveUgc = false;
+ uint8_t constexpr kNoRating = 0;
+
+ feature::ForEachFromDat(mwmFile, [&](FeatureType & f, uint32_t featureId) {
+ auto const it = featureToOsmId.find(featureId);
+ CHECK(it != featureToOsmId.cend() && !it->second.empty(),
+ ("FeatureID", featureId, "is not found in", osmToFeatureFilename));
+
+ ugc::UGC ugc;
+ if (GetUgcForFeature(it->second[0], feature::TypesHolder(f), translator, ugc))
+ {
+ content.emplace_back(ugc.GetPackedRating());
+ haveUgc = true;
+ }
+ else
+ {
+ content.emplace_back(kNoRating);
+ }
+ });
+
+ if (!haveUgc)
+ return true;
+
+ FilesContainerW cont(mwmFile, FileWriter::OP_WRITE_EXISTING);
+ search::RankTableBuilder::Create(content, cont, RATINGS_FILE_TAG);
+ return true;
+}
+} // namespace generator
diff --git a/generator/ratings_section_builder.hpp b/generator/ratings_section_builder.hpp
new file mode 100644
index 0000000000..86188a154b
--- /dev/null
+++ b/generator/ratings_section_builder.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+#include <string>
+
+namespace generator
+{
+bool BuildRatingsMwmSection(std::string const & ugcDbFilename, std::string const & mwmFile,
+ std::string const & osmToFeatureFilename);
+} // namespace generator