diff options
author | tatiana-yan <tatiana.kondakova@gmail.com> | 2019-04-16 15:22:05 +0300 |
---|---|---|
committer | mpimenov <mpimenov@users.noreply.github.com> | 2019-04-19 13:43:33 +0300 |
commit | a92382e5cdf52a69520789f35f7bda1174f2edc8 (patch) | |
tree | cf54e3119d9e986f6481b9083db47572ea4e27e8 /generator | |
parent | 639eb6471f8b290190b34030d0dc2d20709cd7e6 (diff) |
[generator] Add ratings section.
Diffstat (limited to 'generator')
-rw-r--r-- | generator/CMakeLists.txt | 2 | ||||
-rw-r--r-- | generator/generator_tool/generator_tool.cpp | 6 | ||||
-rw-r--r-- | generator/ratings_section_builder.cpp | 60 | ||||
-rw-r--r-- | generator/ratings_section_builder.hpp | 9 |
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 |