[generator] Add support of Panoramax tag

Signed-off-by: Jean-Baptiste Charron <jeanbaptiste.charron@outlook.fr>
Co-authored by: Harry Bond <me@hbond.xyz>
This commit is contained in:
Jean-Baptiste
2025-06-22 21:42:46 +02:00
committed by Konstantin Pastbin
parent 495167c11f
commit 6a10cffe51
6 changed files with 28 additions and 2 deletions

View File

@@ -275,6 +275,8 @@
<li>Code2000 Font<br>
&copy; 1998&ndash;2003 James Kass; Shareware</li>
</ul>
<li><a href="https://upload.wikimedia.org/wikipedia/commons/a/a9/Panoramax.svg">Panoramax</a><br>
&copy; 2023 Adrien Pavie; <a href="license" class="license">CC BY 4.0 License</a></li>
<p id="icons">We also use these icons on the map:</p>

View File

@@ -270,6 +270,7 @@ public:
string const opening_hours(meta.Get(feature::Metadata::FMD_OPEN_HOURS));
string const wikipedia(meta.Get(feature::Metadata::FMD_WIKIPEDIA));
string const wikimedia_commons(meta.Get(feature::Metadata::FMD_WIKIMEDIA_COMMONS));
string const panoramax(meta.Get(feature::Metadata::FMD_PANORAMAX));
string const floor(meta.Get(feature::Metadata::FMD_LEVEL));
string const fee = category.ends_with("-fee") ? "yes" : "";
string const atm = HasAtm(f) ? "yes" : "";
@@ -278,7 +279,7 @@ public:
osmId, uid, lat, lon, mwmName, category, name, std::string(city),
addrStreet, addrHouse, phone, website, stars, std::string(metaOperator), internet,
denomination, wheelchair, opening_hours, wikipedia, floor, fee, atm, contact_facebook,
contact_instagram, contact_twitter, contact_vk, contact_line, contact_fediverse, contact_bluesky, wikimedia_commons};
contact_instagram, contact_twitter, contact_vk, contact_line, contact_fediverse, contact_bluesky, wikimedia_commons, panoramax};
AppendNames(f, columns);
PrintAsCSV(columns, ';', cout);
@@ -292,7 +293,7 @@ void PrintHeader()
"phone", "website", "cuisines", "stars", "operator",
"internet", "denomination", "wheelchair", "opening_hours", "wikipedia",
"floor", "fee", "atm", "contact_facebook", "contact_instagram",
"contact_twitter", "contact_vk", "contact_line", "contact_fediverse", "contact_bluesky", "wikimedia_commons"};
"contact_twitter", "contact_vk", "contact_line", "contact_fediverse", "contact_bluesky", "wikimedia_commons", "panoramax"};
// Append all supported name languages in order.
for (uint8_t idx = 1; idx < kLangCount; idx++)
columns.push_back("name_" + string(StringUtf8Multilang::GetLangByCode(idx)));

View File

@@ -17,6 +17,7 @@
#include <cmath>
#include <cstdlib>
#include <optional>
#include <regex>
#include <unordered_map>
#include <unordered_set>
@@ -309,6 +310,22 @@ std::string MetadataTagProcessorImpl::ValidateAndFormat_wikimedia_commons(std::s
return {};
}
std::string MetadataTagProcessorImpl::ValidateAndFormat_panoramax(std::string v)
{
static auto const s_panoramaxRegex = std::regex(R"(^([a-z0-9]{8}(-[a-z0-9]{4}){3}-[a-z0-9]{12})$)");
if (std::regex_match(v, s_panoramaxRegex))
return v;
url::Url const parsedUrl = url::Url::FromString(v);
if (const std::string* paramValue = parsedUrl.GetParamValue("pic"))
{
if (std::regex_match(*paramValue, s_panoramaxRegex))
return v;
}
LOG(LDEBUG, ("Invalid Panoramax tag value:", v));
return {};
}
std::string MetadataTagProcessorImpl::ValidateAndFormat_airport_iata(std::string const & v) const
{
if (!ftypes::IsAirportChecker::Instance()(m_params.m_types))
@@ -548,6 +565,7 @@ void MetadataTagProcessor::operator()(std::string const & k, std::string const &
case Metadata::FMD_POSTCODE: valid = ValidateAndFormat_postcode(v); break;
case Metadata::FMD_WIKIPEDIA: valid = ValidateAndFormat_wikipedia(v); break;
case Metadata::FMD_WIKIMEDIA_COMMONS: valid = ValidateAndFormat_wikimedia_commons(v); break;
case Metadata::FMD_PANORAMAX: valid = ValidateAndFormat_panoramax(v); break;
case Metadata::FMD_FLATS: valid = ValidateAndFormat_flats(v); break;
case Metadata::FMD_MIN_HEIGHT: // The same validator as for height.
case Metadata::FMD_HEIGHT: valid = ValidateAndFormat_height(v); break;

View File

@@ -33,6 +33,7 @@ struct MetadataTagProcessorImpl
static std::string ValidateAndFormat_denomination(std::string const & v) ;
static std::string ValidateAndFormat_wikipedia(std::string v) ;
static std::string ValidateAndFormat_wikimedia_commons(std::string v) ;
static std::string ValidateAndFormat_panoramax(std::string v) ;
std::string ValidateAndFormat_airport_iata(std::string const & v) const;
static std::string ValidateAndFormat_brand(std::string const & v);
std::string ValidateAndFormat_duration(std::string const & v) const;

View File

@@ -124,6 +124,8 @@ bool Metadata::TypeFromString(string_view k, Metadata::EType & outType)
outType = Metadata::FMD_WIKIPEDIA;
else if (k == "wikimedia_commons")
outType = Metadata::FMD_WIKIMEDIA_COMMONS;
else if (k == "panoramax")
outType = Metadata::FMD_PANORAMAX;
else if (k == "addr:flats")
outType = Metadata::FMD_FLATS;
else if (k == "height")
@@ -275,6 +277,7 @@ string ToString(Metadata::EType type)
case Metadata::FMD_JUNCTION_REF: return "junction:ref";
case Metadata::FMD_BUILDING_MIN_LEVEL: return "building:min_level";
case Metadata::FMD_WIKIMEDIA_COMMONS: return "wikimedia_commons";
case Metadata::FMD_PANORAMAX: return "panoramax";
case Metadata::FMD_CAPACITY: return "capacity";
case Metadata::FMD_WHEELCHAIR: return "wheelchair";
case Metadata::FMD_LOCAL_REF: return "local_ref";

View File

@@ -157,6 +157,7 @@ public:
FMD_NETWORK = 49,
FMD_CONTACT_FEDIVERSE = 50,
FMD_CONTACT_BLUESKY = 51,
FMD_PANORAMAX = 52,
FMD_COUNT
};