diff --git a/wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp b/wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp index bbeb9067..85679634 100644 --- a/wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp +++ b/wxdata/include/scwx/wsr88d/rpg/rpg_types.hpp @@ -1,5 +1,7 @@ #pragma once +#include + namespace scwx { namespace wsr88d @@ -53,6 +55,9 @@ enum class DataLevelCode Unknown }; +const std::string& GetDataLevelCodeName(DataLevelCode dataLevelCode); +const std::string& GetDataLevelCodeShortName(DataLevelCode dataLevelCode); + } // namespace rpg } // namespace wsr88d } // namespace scwx diff --git a/wxdata/source/scwx/wsr88d/rpg/rpg_types.cpp b/wxdata/source/scwx/wsr88d/rpg/rpg_types.cpp new file mode 100644 index 00000000..eb90df08 --- /dev/null +++ b/wxdata/source/scwx/wsr88d/rpg/rpg_types.cpp @@ -0,0 +1,114 @@ +#include + +#include + +namespace scwx +{ +namespace wsr88d +{ +namespace rpg +{ + +static const std::unordered_map dataLevelCodeName_ { + {DataLevelCode::BadData, "Bad Data"}, + {DataLevelCode::BelowThreshold, "Below Threshold"}, + {DataLevelCode::Blank, ""}, + {DataLevelCode::ChaffDetection, "Chaff Detection"}, + {DataLevelCode::EditRemove, "Edit/Remove"}, + {DataLevelCode::FlaggedData, "Flagged Data"}, + {DataLevelCode::Missing, "Missing"}, + {DataLevelCode::NoData, "No Data"}, + {DataLevelCode::OutsideCoverageArea, "Data Outside Coverage Area"}, + {DataLevelCode::NoAccumulation, "No Accumulation"}, + {DataLevelCode::RangeFolded, "Range Folded"}, + {DataLevelCode::Reserved, "Reserved"}, + + // Hydrometeor Classification + {DataLevelCode::Biological, "Biological"}, + {DataLevelCode::AnomalousPropagationGroundClutter, + "Anomalous Propagation/Ground Clutter"}, + {DataLevelCode::IceCrystals, "Ice Crystals"}, + {DataLevelCode::DrySnow, "Dry Snow"}, + {DataLevelCode::WetSnow, "Wet Snow"}, + {DataLevelCode::LightAndOrModerateRain, "Light/Moderate Rain"}, + {DataLevelCode::HeavyRain, "Heavy Rain"}, + {DataLevelCode::BigDrops, "Big Drops"}, + {DataLevelCode::Graupel, "Graupel"}, + {DataLevelCode::SmallHail, "Small Hail"}, + {DataLevelCode::LargeHail, "Large Hail"}, + {DataLevelCode::GiantHail, "Giant Hail"}, + {DataLevelCode::UnknownClassification, "Unknown Classification"}, + + // Rainfall Rate Classification + {DataLevelCode::NoPrecipitation, "No Precip (Biota or NoEcho)"}, + {DataLevelCode::Unfilled, "Unfilled"}, + {DataLevelCode::Convective, "Convective R(Z,ZDR)"}, + {DataLevelCode::Tropical, "Tropical R(Z,ZDR)"}, + {DataLevelCode::SpecificAttenuation, "Specific Attenuation"}, + {DataLevelCode::KL, "R(KDP) 25 Coeff."}, + {DataLevelCode::KH, "R(KDP) 44 Coeff."}, + {DataLevelCode::Z1, "R(Z)"}, + {DataLevelCode::Z6, "R(Z) * 0.6"}, + {DataLevelCode::Z8, "R(Z) * 0.8"}, + {DataLevelCode::SI, "R(Z) * multiplier"}, + + {DataLevelCode::Unknown, "?"}}; + +static const std::unordered_map + dataLevelCodeShortName_ { + {DataLevelCode::BadData, ""}, + {DataLevelCode::BelowThreshold, "TH"}, + {DataLevelCode::Blank, ""}, + {DataLevelCode::ChaffDetection, ""}, + {DataLevelCode::EditRemove, ""}, + {DataLevelCode::FlaggedData, ""}, + {DataLevelCode::Missing, ""}, + {DataLevelCode::NoData, "ND"}, + {DataLevelCode::OutsideCoverageArea, ""}, + {DataLevelCode::NoAccumulation, ""}, + {DataLevelCode::RangeFolded, "RF"}, + {DataLevelCode::Reserved, ""}, + + // Hydrometeor Classification + {DataLevelCode::Biological, "BI"}, + {DataLevelCode::AnomalousPropagationGroundClutter, "GC"}, + {DataLevelCode::IceCrystals, "IC"}, + {DataLevelCode::DrySnow, "DS"}, + {DataLevelCode::WetSnow, "WS"}, + {DataLevelCode::LightAndOrModerateRain, "RA"}, + {DataLevelCode::HeavyRain, "HR"}, + {DataLevelCode::BigDrops, "BD"}, + {DataLevelCode::Graupel, "GR"}, + {DataLevelCode::SmallHail, "HA"}, + {DataLevelCode::LargeHail, "LH"}, + {DataLevelCode::GiantHail, "GH"}, + {DataLevelCode::UnknownClassification, "UK"}, + + // Rainfall Rate Classification + {DataLevelCode::NoPrecipitation, "NP"}, + {DataLevelCode::Unfilled, "UF"}, + {DataLevelCode::Convective, "CZ"}, + {DataLevelCode::Tropical, "TZ"}, + {DataLevelCode::SpecificAttenuation, "SA"}, + {DataLevelCode::KL, "KL"}, + {DataLevelCode::KH, "KH"}, + {DataLevelCode::Z1, "Z1"}, + {DataLevelCode::Z6, "Z6"}, + {DataLevelCode::Z8, "Z8"}, + {DataLevelCode::SI, "SI"}, + + {DataLevelCode::Unknown, "?"}}; + +const std::string& GetDataLevelCodeName(DataLevelCode dataLevelCode) +{ + return dataLevelCodeName_.at(dataLevelCode); +} + +const std::string& GetDataLevelCodeShortName(DataLevelCode dataLevelCode) +{ + return dataLevelCodeShortName_.at(dataLevelCode); +} + +} // namespace rpg +} // namespace wsr88d +} // namespace scwx diff --git a/wxdata/wxdata.cmake b/wxdata/wxdata.cmake index 11a6d54b..786e40a2 100644 --- a/wxdata/wxdata.cmake +++ b/wxdata/wxdata.cmake @@ -186,6 +186,7 @@ set(SRC_WSR88D_RPG source/scwx/wsr88d/rpg/ccb_header.cpp source/scwx/wsr88d/rpg/radar_coded_message.cpp source/scwx/wsr88d/rpg/radial_data_packet.cpp source/scwx/wsr88d/rpg/raster_data_packet.cpp + source/scwx/wsr88d/rpg/rpg_types.cpp source/scwx/wsr88d/rpg/scit_forecast_data_packet.cpp source/scwx/wsr88d/rpg/set_color_level_packet.cpp source/scwx/wsr88d/rpg/special_graphic_symbol_packet.cpp