From dd4bedb85ee30f4f41d3de0669a4debeea37fc8c Mon Sep 17 00:00:00 2001 From: map-per Date: Wed, 10 Dec 2025 10:05:59 +0100 Subject: [PATCH] add constructor Signed-off-by: map-per --- libs/editor/feature_type_to_osm.cpp | 51 +++++++++++++++++++++++++++-- libs/editor/feature_type_to_osm.hpp | 10 ++++-- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/libs/editor/feature_type_to_osm.cpp b/libs/editor/feature_type_to_osm.cpp index 304ad6055..00721292e 100644 --- a/libs/editor/feature_type_to_osm.cpp +++ b/libs/editor/feature_type_to_osm.cpp @@ -1,6 +1,7 @@ #include "editor/feature_type_to_osm.hpp" #include "base/logging.hpp" +#include "base/assert.hpp" #include "coding/reader_streambuf.hpp" #include "indexer/classificator.hpp" #include "platform/platform.hpp" @@ -8,9 +9,16 @@ namespace editor { -void FeatureTypeToOSM::loadConfigFile() { + FeatureTypeToOSM::FeatureTypeToOSM() + { + loadConfigFile(); + } + + void FeatureTypeToOSM::loadConfigFile() { LOG(LINFO, ("Hello from loadConfigFile")); + m_storage.clear(); + Platform & p = GetPlatform(); std::unique_ptr reader = p.GetReader("mapcss-mapping.csv"); @@ -37,14 +45,47 @@ void FeatureTypeToOSM::loadConfigFile() { std::vector tokens = strings::Tokenize(line, ";"); + ASSERT(tokens.size() >= 2, ("TODO1")); + + LOG(LINFO, ("simple type: ", tokens[0])); + + std::string type_name(tokens[0]); + replace(type_name.begin(), type_name.end(), '|', '-'); + + uint32_t type = classif().GetTypeByReadableObjectName(type_name); + if (tokens.size() == 2) { // OSM tags can be derived from type name - LOG(LINFO, ("simple type: ", tokens[0])); + std::vector typeTokens = strings::Tokenize(type_name, "-"); + + ASSERT(typeTokens.size() <= 2, ("OSM tags can not be derived from 3-arity/complex types")); + ASSERT(!typeTokens.empty(), ("No type name found")); + + OSMTag osmTag; + + if (typeTokens.size() >= 2) { + osmTag.key = typeTokens[0]; + osmTag.value = typeTokens[1]; + } + else if (typeTokens.size() == 1) { + osmTag.key = typeTokens[0]; + osmTag.value = "yes"; + } + + m_storage.insert({type, {osmTag}}); + + LOG(LINFO, ("Added type ", type, " with key", osmTag.key, " and value ", osmTag.value)); + } else if (tokens.size() > 2) { + // OSM tags are listed in the entry LOG(LINFO, ("token size:", tokens.size(), " | osmTags: ", tokens[1])); + + std::vector osmTagTokens = strings::Tokenize(tokens[1], ","); + + } @@ -66,4 +107,10 @@ std::vector FeatureTypeToOSM::typeToOSM(uint32_t type) return result; } + +FeatureTypeToOSM & getOSMTranslator() +{ + static FeatureTypeToOSM translator; + return translator; +} } // namespace osm \ No newline at end of file diff --git a/libs/editor/feature_type_to_osm.hpp b/libs/editor/feature_type_to_osm.hpp index b68c5ce20..83ce57af6 100644 --- a/libs/editor/feature_type_to_osm.hpp +++ b/libs/editor/feature_type_to_osm.hpp @@ -2,6 +2,7 @@ #include #include +#include namespace editor { @@ -15,12 +16,17 @@ class FeatureTypeToOSM { public: - void loadConfigFile(); + FeatureTypeToOSM(); + + void loadConfigFile(); //static void typeToOSM(uint32_t type); std::vector typeToOSM(uint32_t type); private: - //std::vector storage; + std::map> m_storage; }; + +FeatureTypeToOSM & getOSMTranslator(); + } // namespace osm \ No newline at end of file