From ee99b510031e98209106419f3bd115076e3c6d8c Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Sat, 29 Apr 2023 00:18:44 -0500 Subject: [PATCH] Add map provider helper functions --- scwx-qt/scwx-qt.cmake | 2 + scwx-qt/source/scwx/qt/map/map_provider.cpp | 129 ++++++++++++++++++++ scwx-qt/source/scwx/qt/map/map_provider.hpp | 47 +++++++ 3 files changed, 178 insertions(+) create mode 100644 scwx-qt/source/scwx/qt/map/map_provider.cpp create mode 100644 scwx-qt/source/scwx/qt/map/map_provider.hpp diff --git a/scwx-qt/scwx-qt.cmake b/scwx-qt/scwx-qt.cmake index 15d09a62..32d900ce 100644 --- a/scwx-qt/scwx-qt.cmake +++ b/scwx-qt/scwx-qt.cmake @@ -78,6 +78,7 @@ set(HDR_MAP source/scwx/qt/map/alert_layer.hpp source/scwx/qt/map/generic_layer.hpp source/scwx/qt/map/layer_wrapper.hpp source/scwx/qt/map/map_context.hpp + source/scwx/qt/map/map_provider.hpp source/scwx/qt/map/map_settings.hpp source/scwx/qt/map/map_widget.hpp source/scwx/qt/map/overlay_layer.hpp @@ -89,6 +90,7 @@ set(SRC_MAP source/scwx/qt/map/alert_layer.cpp source/scwx/qt/map/generic_layer.cpp source/scwx/qt/map/layer_wrapper.cpp source/scwx/qt/map/map_context.cpp + source/scwx/qt/map/map_provider.cpp source/scwx/qt/map/map_widget.cpp source/scwx/qt/map/overlay_layer.cpp source/scwx/qt/map/radar_product_layer.cpp diff --git a/scwx-qt/source/scwx/qt/map/map_provider.cpp b/scwx-qt/source/scwx/qt/map/map_provider.cpp new file mode 100644 index 00000000..b7810802 --- /dev/null +++ b/scwx-qt/source/scwx/qt/map/map_provider.cpp @@ -0,0 +1,129 @@ +#include +#include + +#include + +#include + +namespace scwx +{ +namespace qt +{ +namespace map +{ + +static const std::unordered_map mapProviderName_ { + {MapProvider::Mapbox, "Mapbox"}, + {MapProvider::MapTiler, "MapTiler"}, + {MapProvider::Unknown, "?"}}; + +// Draw below tunnels, ferries and roads +static const std::vector mapboxDrawBelow_ { + "tunnel", "ferry", "road"}; +static const std::vector maptilerDrawBelow_ { + "tunnel", "ferry", "road"}; + +static const std::unordered_map mapProviderInfo_ { + {MapProvider::Mapbox, + MapProviderInfo { + .mapProvider_ {MapProvider::Mapbox}, + .cacheDbName_ {"mbgl-cache.db"}, + .settingsTemplate_ { + QMapLibreGL::Settings::SettingsTemplate::MapboxSettings}, + .mapStyles_ {{.name_ {"Streets"}, + .url_ {"mapbox://styles/mapbox/streets-v11"}, + .drawBelow_ {mapboxDrawBelow_}}, + {.name_ {"Outdoors"}, + .url_ {"mapbox://styles/mapbox/outdoors-v11"}, + .drawBelow_ {mapboxDrawBelow_}}, + {.name_ {"Light"}, + .url_ {"mapbox://styles/mapbox/light-v10"}, + .drawBelow_ {mapboxDrawBelow_}}, + {.name_ {"Dark"}, + .url_ {"mapbox://styles/mapbox/dark-v10"}, + .drawBelow_ {mapboxDrawBelow_}}, + {.name_ {"Satellite"}, + .url_ {"mapbox://styles/mapbox/satellite-v9"}, + .drawBelow_ {mapboxDrawBelow_}}, + {.name_ {"Satellite Streets"}, + .url_ {"mapbox://styles/mapbox/satellite-streets-v11"}, + .drawBelow_ {mapboxDrawBelow_}}}}}, + {MapProvider::MapTiler, + MapProviderInfo { + .mapProvider_ {MapProvider::MapTiler}, + .cacheDbName_ {"maptiler-cache.db"}, + .settingsTemplate_ { + QMapLibreGL::Settings::SettingsTemplate::MapTilerSettings}, + .mapStyles_ {{.name_ {"Satellite"}, + .url_ {"maptiler://maps/hybrid"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Streets"}, + .url_ {"maptiler://maps/streets-v2"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Basic"}, + .url_ {"maptiler://maps/basic-v2"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Bright"}, + .url_ {"maptiler://maps/bright-v2"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Outdoor"}, + .url_ {"maptiler://maps/outdoor-v2"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Topo"}, + .url_ {"maptiler://maps/topo-v2"}, + .drawBelow_ {maptilerDrawBelow_}}, + {.name_ {"Winter"}, + .url_ {"maptiler://maps/winter-v2"}, + .drawBelow_ {maptilerDrawBelow_}}}}}, + {MapProvider::Unknown, MapProviderInfo {}}}; + +MapProvider GetMapProvider(const std::string& name) +{ + auto result = + std::find_if(mapProviderName_.cbegin(), + mapProviderName_.cend(), + [&](const std::pair& pair) -> bool + { return boost::iequals(pair.second, name); }); + + if (result != mapProviderName_.cend()) + { + return result->first; + } + else + { + return MapProvider::Unknown; + } +} + +std::string GetMapProviderName(MapProvider mapProvider) +{ + return mapProviderName_.at(mapProvider); +} + +std::string GetMapProviderApiKey(MapProvider mapProvider) +{ + switch (mapProvider) + { + case MapProvider::Mapbox: + return manager::SettingsManager::general_settings() + .mapbox_api_key() + .GetValue(); + + case MapProvider::MapTiler: + return manager::SettingsManager::general_settings() + .maptiler_api_key() + .GetValue(); + + default: + return "?"; + } +} + +const MapProviderInfo& GetMapProviderInfo(MapProvider mapProvider) +{ + return mapProviderInfo_.at(mapProvider); +} + +} // namespace map +} // namespace qt +} // namespace scwx diff --git a/scwx-qt/source/scwx/qt/map/map_provider.hpp b/scwx-qt/source/scwx/qt/map/map_provider.hpp new file mode 100644 index 00000000..9f57c730 --- /dev/null +++ b/scwx-qt/source/scwx/qt/map/map_provider.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +#include + +#include + +namespace scwx +{ +namespace qt +{ +namespace map +{ + +enum class MapProvider +{ + Mapbox, + MapTiler, + Unknown +}; +typedef util::Iterator + MapProviderIterator; + +struct MapStyle +{ + std::string name_; + std::string url_; + std::vector drawBelow_; +}; + +struct MapProviderInfo +{ + MapProvider mapProvider_ {MapProvider::Unknown}; + std::string cacheDbName_ {}; + QMapLibreGL::Settings::SettingsTemplate settingsTemplate_ {}; + std::vector mapStyles_ {}; +}; + +MapProvider GetMapProvider(const std::string& name); +std::string GetMapProviderName(MapProvider mapProvider); +std::string GetMapProviderApiKey(MapProvider mapProvider); +const MapProviderInfo& GetMapProviderInfo(MapProvider mapProvider); + +} // namespace map +} // namespace qt +} // namespace scwx