From 831e3ef72554a53b1d5f610c590ca66dbf68afc4 Mon Sep 17 00:00:00 2001 From: Sergey Yershov Date: Thu, 15 Jan 2015 13:54:50 +0300 Subject: [PATCH] Added metadata for turns and peak --- generator/generator_tests/metadata_test.cpp | 20 ++++++++++ generator/osm2meta.hpp | 43 +++++++++++++++++++++ indexer/feature_meta.hpp | 6 ++- indexer/ftypes_matcher.cpp | 13 +++++++ indexer/ftypes_matcher.hpp | 8 ++++ 5 files changed, 89 insertions(+), 1 deletion(-) diff --git a/generator/generator_tests/metadata_test.cpp b/generator/generator_tests/metadata_test.cpp index 7662e69d69..023a182b6f 100644 --- a/generator/generator_tests/metadata_test.cpp +++ b/generator/generator_tests/metadata_test.cpp @@ -98,6 +98,26 @@ UNIT_TEST(Metadata_ValidateAndFormat_operator) params.GetMetadata().Drop(feature::FeatureMetadata::FMD_OPERATOR); } +UNIT_TEST(Metadata_ValidateAndFormat_ele) +{ + classificator::Load(); + Classificator const & c = classif(); + uint32_t const type_peak = c.GetTypeByPath({ "natural", "peak" }); + + FeatureParams params; + MetadataTagProcessor p(params); + + // ignore tag 'operator' if feature have inappropriate type + p("ele", "123"); + TEST(params.GetMetadata().Empty(), ()); + + params.SetType(type_peak); + p("ele", "123"); + TEST_EQUAL(params.GetMetadata().Get(feature::FeatureMetadata::FMD_ELE), "123", ()); + params.GetMetadata().Drop(feature::FeatureMetadata::FMD_ELE); +} + + UNIT_TEST(Metadata_ReadWrite_Intermediate) { FeatureParams params; diff --git a/generator/osm2meta.hpp b/generator/osm2meta.hpp index cd1067853c..d2de87a125 100644 --- a/generator/osm2meta.hpp +++ b/generator/osm2meta.hpp @@ -61,6 +61,30 @@ public: if (!value.empty()) m_params.GetMetadata().Add(feature::FeatureMetadata::FMD_OPEN_HOURS, value); } + else if (k == "ele") + { + string const & value = ValidateAndFormat_ele(v); + if (!value.empty()) + m_params.GetMetadata().Add(feature::FeatureMetadata::FMD_ELE, value); + } + else if (k == "turn:lanes") + { + string const & value = ValidateAndFormat_turn_lanes(v); + if (!value.empty()) + m_params.GetMetadata().Add(feature::FeatureMetadata::FMD_TURN_LANES, value); + } + else if (k == "turn:lanes:forward") + { + string const & value = ValidateAndFormat_turn_lanes_forward(v); + if (!value.empty()) + m_params.GetMetadata().Add(feature::FeatureMetadata::FMD_TURN_LANES_FORWARD, value); + } + else if (k == "turn:lanes:backward") + { + string const & value = ValidateAndFormat_turn_lanes_backward(v); + if (!value.empty()) + m_params.GetMetadata().Add(feature::FeatureMetadata::FMD_TURN_LANES_BACKWARD, value); + } return false; } @@ -109,5 +133,24 @@ protected: { return v; } + string ValidateAndFormat_ele(string const & v) const + { + static ftypes::IsPeakChecker const IsPeak; + if (!IsPeak(m_params.m_Types)) + return string(); + return v; + } + string ValidateAndFormat_turn_lanes(string const & v) const + { + return v; + } + string ValidateAndFormat_turn_lanes_forward(string const & v) const + { + return v; + } + string ValidateAndFormat_turn_lanes_backward(string const & v) const + { + return v; + } }; diff --git a/indexer/feature_meta.hpp b/indexer/feature_meta.hpp index fed65ea7e4..ccd972eede 100644 --- a/indexer/feature_meta.hpp +++ b/indexer/feature_meta.hpp @@ -24,7 +24,11 @@ namespace feature FMD_STARS, FMD_OPERATOR, FMD_URL, - FMD_INTERNET + FMD_INTERNET, + FMD_ELE, + FMD_TURN_LANES, + FMD_TURN_LANES_FORWARD, + FMD_TURN_LANES_BACKWARD }; bool Add(EMetadataType type, string const & s) diff --git a/indexer/ftypes_matcher.cpp b/indexer/ftypes_matcher.cpp index 9b0dacf6fb..6a502e9f08 100644 --- a/indexer/ftypes_matcher.cpp +++ b/indexer/ftypes_matcher.cpp @@ -44,6 +44,19 @@ bool BaseChecker::operator() (vector const & types) const return false; } +IsPeakChecker::IsPeakChecker() +{ + Classificator const & c = classif(); + m_types.push_back(c.GetTypeByPath({ "natural", "peak" })); +} + +IsPeakChecker const & IsPeakChecker::Instance() +{ + static const IsPeakChecker inst; + return inst; +} + + IsATMChecker::IsATMChecker() { Classificator const & c = classif(); diff --git a/indexer/ftypes_matcher.hpp b/indexer/ftypes_matcher.hpp index ea793e832e..9ed2044cae 100644 --- a/indexer/ftypes_matcher.hpp +++ b/indexer/ftypes_matcher.hpp @@ -30,6 +30,14 @@ public: static uint32_t PrepareToMatch(uint32_t type, uint8_t level); }; +class IsPeakChecker : public BaseChecker +{ +public: + IsPeakChecker(); + + static IsPeakChecker const & Instance(); +}; + class IsATMChecker : public BaseChecker { public: