diff --git a/data/classificator.txt b/data/classificator.txt index 193b29a79d..ecdecd54cf 100644 --- a/data/classificator.txt +++ b/data/classificator.txt @@ -779,6 +779,9 @@ world + tyres - wine - {} + sponsored + + booking - + {} sport + american_football - archery - diff --git a/data/mapcss-mapping.csv b/data/mapcss-mapping.csv index 8e3e75b161..04928e9a03 100644 --- a/data/mapcss-mapping.csv +++ b/data/mapcss-mapping.csv @@ -1109,12 +1109,14 @@ leisure|sports_centre|yoga;[leisure=sports_centre][sport=yoga];;name;int_name;11 amenity|public_bookcase;1109; tourism|apartment;1110; tourism|resort;1111; -tourism|hotel|booking;[tourism=hotel][provider=booking];;name;int_name;1112; -tourism|motel|booking;[tourism=motel][provider=booking];;name;int_name;1113; -tourism|hostel|booking;[tourism=hostel][provider=booking];;name;int_name;1114; -tourism|chalet|booking;[tourism=chalet][provider=booking];;name;int_name;1115; -tourism|guest_house|booking;[tourism=guest_house][provider=booking];;name;int_name;1116; -tourism|alpine_hut|booking;[tourism=alpine_hut][provider=booking];;name;int_name;1117; -tourism|camp_site|booking;[tourism=camp_site][provider=booking];;name;int_name;1118; -tourism|apartment|booking;[tourism=apartment][provider=booking];;name;int_name;1119; -tourism|resort|booking;[tourism=resort][provider=booking];;name;int_name;1120; +tourism|hotel|booking;[tourism=hotel][sponsored=booking];;name;int_name;1112; +tourism|motel|booking;[tourism=motel][sponsored=booking];;name;int_name;1113; +tourism|hostel|booking;[tourism=hostel][sponsored=booking];;name;int_name;1114; +tourism|chalet|booking;[tourism=chalet][sponsored=booking];;name;int_name;1115; +tourism|guest_house|booking;[tourism=guest_house][sponsored=booking];;name;int_name;1116; +tourism|alpine_hut|booking;[tourism=alpine_hut][sponsored=booking];;name;int_name;1117; +tourism|camp_site|booking;[tourism=camp_site][sponsored=booking];;name;int_name;1118; +tourism|apartment|booking;[tourism=apartment][sponsored=booking];;name;int_name;1119; +tourism|resort|booking;[tourism=resort][sponsored=booking];;name;int_name;1120; +sponsored;[sponsored];;name;int_name;1121; +sponsored|booking;1122; diff --git a/data/types.txt b/data/types.txt index 22e87ce7b2..0bec6373f0 100644 --- a/data/types.txt +++ b/data/types.txt @@ -1118,3 +1118,5 @@ tourism|alpine_hut|booking tourism|camp_site|booking tourism|apartment|booking tourism|resort|booking +sponsored +sponsored|booking diff --git a/data/visibility.txt b/data/visibility.txt index 0791d71017..ec08a3a8af 100644 --- a/data/visibility.txt +++ b/data/visibility.txt @@ -779,6 +779,9 @@ world 00000000000000000000 + tyres 00000000000000000111 - wine 00000000000000000111 - {} + sponsored 00000000000000000000 + + booking 00000000000000000000 - + {} sport 00000000000000000000 + american_football 00000000000000000111 - archery 00000000000000000111 - diff --git a/generator/osm2meta.cpp b/generator/osm2meta.cpp index 7455729b58..eae1b8d3a5 100644 --- a/generator/osm2meta.cpp +++ b/generator/osm2meta.cpp @@ -85,6 +85,18 @@ string MetadataTagProcessorImpl::ValidateAndFormat_stars(string const & v) const return string(1, v[0]); } +string MetadataTagProcessorImpl::ValidateAndFormat_price_rate(string const & v) const +{ + if (v.size() != 1) + return string(); + + // Price rate is a single digit from 0 to 5. + if (v[0] < '0' || v[0] > '5') + return string(); + + return v; +} + string MetadataTagProcessorImpl::ValidateAndFormat_operator(string const & v) const { auto const & isATM = ftypes::IsATMChecker::Instance(); @@ -175,6 +187,24 @@ string MetadataTagProcessorImpl::ValidateAndFormat_building_levels(string v) con return {}; } +string MetadataTagProcessorImpl::ValidateAndFormat_sponsored_id(string const & v) const +{ + uint64_t id; + if (!strings::to_uint64(v, id)) + return string(); + return v; +} + +string MetadataTagProcessorImpl::ValidateAndFormat_rating(string const & v) const +{ + double rating; + if (!strings::to_double(v, rating)) + return string(); + if (rating > 0 && rating <= 10) + return strings::to_string_dac(rating, 1); + return string(); +} + string MetadataTagProcessorImpl::ValidateAndFormat_denomination(string const & v) const { return v; diff --git a/generator/osm2meta.hpp b/generator/osm2meta.hpp index 2a334fe6e0..f187a769f8 100644 --- a/generator/osm2meta.hpp +++ b/generator/osm2meta.hpp @@ -32,6 +32,9 @@ struct MetadataTagProcessorImpl string ValidateAndFormat_building_levels(string v) const; string ValidateAndFormat_denomination(string const & v) const; string ValidateAndFormat_wikipedia(string v) const; + string ValidateAndFormat_price_rate(string const & v) const; + string ValidateAndFormat_sponsored_id(string const & v) const; + string ValidateAndFormat_rating(string const & v) const; protected: FeatureParams & m_params; @@ -91,6 +94,9 @@ public: case Metadata::FMD_HEIGHT: valid = ValidateAndFormat_height(v); break; case Metadata::FMD_DENOMINATION: valid = ValidateAndFormat_denomination(v); break; case Metadata::FMD_BUILDING_LEVELS: valid = ValidateAndFormat_building_levels(v); break; + case Metadata::FMD_SPONSORED_ID: valid = ValidateAndFormat_sponsored_id(v); break; + case Metadata::FMD_PRICE_RATE: valid = ValidateAndFormat_price_rate(v); break; + case Metadata::FMD_RATING: valid = ValidateAndFormat_rating(v); break; case Metadata::FMD_TEST_ID: case Metadata::FMD_COUNT: CHECK(false, ("FMD_COUNT can not be used as a type.")); diff --git a/indexer/feature_meta.cpp b/indexer/feature_meta.cpp index ec00c8c236..6e614d5cb3 100644 --- a/indexer/feature_meta.cpp +++ b/indexer/feature_meta.cpp @@ -88,6 +88,12 @@ bool Metadata::TypeFromString(string const & k, Metadata::EType & outType) outType = Metadata::FMD_BUILDING_LEVELS; else if (k == "denomination") outType = Metadata::FMD_DENOMINATION; + else if (k == "ref:sponsored") + outType = Metadata::FMD_SPONSORED_ID; + else if (k == "price_rate") + outType = Metadata::FMD_PRICE_RATE; + else if (k == "rating:sponsored") + outType = Metadata::FMD_RATING; else return false; @@ -123,6 +129,9 @@ string DebugPrint(feature::Metadata::EType type) case Metadata::FMD_MIN_HEIGHT: return "min_height"; case Metadata::FMD_DENOMINATION: return "denomination"; case Metadata::FMD_BUILDING_LEVELS: return "building:levels"; + case Metadata::FMD_SPONSORED_ID: return "ref:sponsored"; + case Metadata::FMD_PRICE_RATE: return "price_rate"; + case Metadata::FMD_RATING: return "rating:sponsored"; case Metadata::FMD_TEST_ID: return "test_id"; case Metadata::FMD_COUNT: CHECK(false, ("FMD_COUNT can not be used as a type.")); }; diff --git a/indexer/feature_meta.hpp b/indexer/feature_meta.hpp index 7fc272211a..6d1048eab3 100644 --- a/indexer/feature_meta.hpp +++ b/indexer/feature_meta.hpp @@ -123,6 +123,9 @@ public: FMD_DENOMINATION = 21, FMD_BUILDING_LEVELS = 22, FMD_TEST_ID = 23, + FMD_SPONSORED_ID = 24, + FMD_PRICE_RATE = 25, + FMD_RATING = 26, FMD_COUNT }; diff --git a/indexer/map_object.hpp b/indexer/map_object.hpp index a26db39d04..4929efe00a 100644 --- a/indexer/map_object.hpp +++ b/indexer/map_object.hpp @@ -144,6 +144,9 @@ vector MetadataToProps(vector const & metadata) case Metadata::FMD_HEIGHT: case Metadata::FMD_MIN_HEIGHT: case Metadata::FMD_DENOMINATION: + case Metadata::FMD_SPONSORED_ID: + case Metadata::FMD_PRICE_RATE: + case Metadata::FMD_RATING: case Metadata::FMD_TEST_ID: case Metadata::FMD_COUNT: break;