diff --git a/generator/osm_translator.hpp b/generator/osm_translator.hpp index 7262ae9bc9..8e8f6168e0 100644 --- a/generator/osm_translator.hpp +++ b/generator/osm_translator.hpp @@ -168,7 +168,8 @@ protected: if (!ref.empty()) { std::string const & network = e.GetTagValue("network"); - if (!network.empty() && network.find('/') == std::string::npos) + // Not processing networks with more than 15 chars (see road_shields_parser.cpp). + if (!network.empty() && network.find('/') == std::string::npos && network.size() < 15) ref = network + '/' + ref; std::string const & refBase = m_current->GetTag("ref"); if (!refBase.empty()) diff --git a/indexer/road_shields_parser.cpp b/indexer/road_shields_parser.cpp index 9bd0571db9..718ba17f99 100644 --- a/indexer/road_shields_parser.cpp +++ b/indexer/road_shields_parser.cpp @@ -108,6 +108,7 @@ public: std::set GetRoadShields() const { std::set result; + std::set defaultShields; std::vector shieldsRawTests = strings::Tokenize(m_baseRoadNumber, ";"); for (std::string const & rawText : shieldsRawTests) { @@ -123,8 +124,17 @@ public: shield.m_type = FindNetworkShield(rawText.substr(0, slashPos)); } if (!shield.m_name.empty() && shield.m_type != RoadShieldType::Hidden) + { + if (shield.m_type != RoadShieldType::Default) + { + // Schedule deletion of a shield with the same text and default style, if present. + defaultShields.insert({RoadShieldType::Default, shield.m_name, shield.m_additionalText}); + } result.insert(std::move(shield)); + } } + for (RoadShield const & shield : defaultShields) + result.erase(shield); return result; }