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:
authorIlya Zverev <zverik@textual.ru>2016-07-15 14:24:22 +0300
committerIlya Zverev <zverik@textual.ru>2016-07-19 19:26:12 +0300
commit2999143e9ceede334c6db5a02e04b150a30fbffe (patch)
tree81151f36cdedebb71c8a88e00bea18eb6c19b2aa /generator
parent9841d1c865be3f3b477d4c06fad408a046273351 (diff)
[olympics] Mix objects with olympics tag
Diffstat (limited to 'generator')
-rw-r--r--generator/osm_element.cpp7
-rw-r--r--generator/osm_element.hpp2
-rw-r--r--generator/osm_source.cpp2
-rw-r--r--generator/tag_admixer.hpp52
4 files changed, 63 insertions, 0 deletions
diff --git a/generator/osm_element.cpp b/generator/osm_element.cpp
index 5e54137283..272bf4cc4b 100644
--- a/generator/osm_element.cpp
+++ b/generator/osm_element.cpp
@@ -138,3 +138,10 @@ string DebugPrint(OsmElement const & e)
{
return e.ToString();
}
+
+string DebugPrint(OsmElement::Tag const & tag)
+{
+ stringstream ss;
+ ss << tag.key << '=' << tag.value;
+ return ss.str();
+}
diff --git a/generator/osm_element.hpp b/generator/osm_element.hpp
index 6a89905b9b..cca5e99717 100644
--- a/generator/osm_element.hpp
+++ b/generator/osm_element.hpp
@@ -157,3 +157,5 @@ struct OsmElement
};
string DebugPrint(OsmElement const & e);
+string DebugPrint(OsmElement::EntityType e);
+string DebugPrint(OsmElement::Tag const & tag);
diff --git a/generator/osm_source.cpp b/generator/osm_source.cpp
index 236303b92f..b3bfdf13ea 100644
--- a/generator/osm_source.cpp
+++ b/generator/osm_source.cpp
@@ -514,6 +514,7 @@ bool GenerateFeaturesImpl(feature::GenerateInfo & info)
TagAdmixer tagAdmixer(info.GetIntermediateFileName("ways", ".csv"),
info.GetIntermediateFileName("towns", ".csv"));
TagReplacer tagReplacer(GetPlatform().ResourcesDir() + REPLACED_TAGS_FILE);
+ OsmTagMixer osmTagMixer(GetPlatform().ResourcesDir() + MIXED_TAGS_FILE);
// If info.m_bookingDatafileName is empty then no data will be loaded.
generator::BookingDataset bookingDataset(info.m_bookingDatafileName,
@@ -526,6 +527,7 @@ bool GenerateFeaturesImpl(feature::GenerateInfo & info)
{
tagReplacer(e);
tagAdmixer(e);
+ osmTagMixer(e);
if (bookingDataset.BookingFilter(*e))
{
diff --git a/generator/tag_admixer.hpp b/generator/tag_admixer.hpp
index 4139c01cd2..0aa14a6353 100644
--- a/generator/tag_admixer.hpp
+++ b/generator/tag_admixer.hpp
@@ -180,3 +180,55 @@ public:
}
}
};
+
+class OsmTagMixer
+{
+ map<pair<OsmElement::EntityType, uint64_t>, vector<OsmElement::Tag>> m_elements;
+
+public:
+ OsmTagMixer(string const & filePath)
+ {
+ ifstream stream(filePath);
+ vector<string> values;
+ vector<OsmElement::Tag> tags;
+ string line;
+ while (std::getline(stream, line))
+ {
+ if (line.empty() || line.front() == '#')
+ continue;
+
+ strings::ParseCSVRow(line, ',', values);
+ if (values.size() < 3)
+ continue;
+
+ OsmElement::EntityType entityType = OsmElement::StringToEntityType(values[0]);
+ uint64_t id;
+ if (entityType == OsmElement::EntityType::Unknown || !strings::to_uint64(values[1], id))
+ continue;
+
+ for (size_t i = 2; i < values.size(); ++i)
+ {
+ auto p = values[i].find('=');
+ if (p != string::npos)
+ tags.push_back(OsmElement::Tag(values[i].substr(0, p), values[i].substr(p + 1)));
+ }
+
+ if (!tags.empty())
+ {
+ pair<OsmElement::EntityType, uint64_t> elementPair = {entityType, id};
+ m_elements[elementPair].swap(tags);
+ }
+ }
+ }
+
+ void operator()(OsmElement * p)
+ {
+ pair<OsmElement::EntityType, uint64_t> elementId = {p->type, p->id};
+ auto elements = m_elements.find(elementId);
+ if (elements != m_elements.end())
+ {
+ for (OsmElement::Tag tag : elements->second)
+ p->AddTag(tag.key, tag.value);
+ }
+ }
+};