Add Generic Radar Data as a common base class to message types 1 and 31

This commit is contained in:
Dan Paulat 2024-01-22 23:01:29 -06:00
parent b8b0812ce6
commit 571d0b2ce9
8 changed files with 191 additions and 41 deletions

View file

@ -1,4 +1,5 @@
#include <scwx/wsr88d/ar2v_file.hpp>
#include <scwx/wsr88d/rda/digital_radar_data_generic.hpp>
#include <scwx/wsr88d/rda/level2_message_factory.hpp>
#include <scwx/wsr88d/rda/rda_types.hpp>
#include <scwx/util/logger.hpp>
@ -109,7 +110,7 @@ std::chrono::system_clock::time_point Ar2vFile::end_time() const
if (p->radarData_.size() > 0)
{
std::shared_ptr<rda::DigitalRadarDataGeneric> lastRadial =
std::shared_ptr<rda::GenericRadarData> lastRadial =
p->radarData_.crbegin()->second->crbegin()->second;
endTime = util::TimePoint(lastRadial->modified_julian_date(),
@ -431,7 +432,7 @@ void Ar2vFileImpl::IndexFile()
rda::WaveformType waveformType =
vcpData_->waveform_type(elevationCut.first);
std::shared_ptr<rda::DigitalRadarDataGeneric>& radial0 =
std::shared_ptr<rda::GenericRadarData>& radial0 =
(*elevationCut.second)[0];
if (radial0 == nullptr)

View file

@ -501,7 +501,7 @@ public:
};
DigitalRadarDataGeneric::DigitalRadarDataGeneric() :
Level2Message(), p(std::make_unique<Impl>())
GenericRadarData(), p(std::make_unique<Impl>())
{
}
DigitalRadarDataGeneric::~DigitalRadarDataGeneric() = default;
@ -586,6 +586,18 @@ std::uint16_t DigitalRadarDataGeneric::data_block_count() const
return p->dataBlockCount_;
}
std::uint16_t DigitalRadarDataGeneric::volume_coverage_pattern_number() const
{
std::uint16_t vcpNumber = 0;
if (p->volumeDataBlock_ != nullptr)
{
vcpNumber = p->volumeDataBlock_->volume_coverage_pattern_number();
}
return vcpNumber;
}
std::shared_ptr<DigitalRadarDataGeneric::ElevationDataBlock>
DigitalRadarDataGeneric::elevation_data_block() const
{
@ -604,7 +616,7 @@ DigitalRadarDataGeneric::volume_data_block() const
return p->volumeDataBlock_;
}
std::shared_ptr<DigitalRadarDataGeneric::MomentDataBlock>
std::shared_ptr<GenericRadarData::MomentDataBlock>
DigitalRadarDataGeneric::moment_data_block(DataBlockType type) const
{
std::shared_ptr<MomentDataBlock> momentDataBlock = nullptr;

View file

@ -0,0 +1,61 @@
#include <scwx/wsr88d/rda/generic_radar_data.hpp>
#include <scwx/util/logger.hpp>
namespace scwx
{
namespace wsr88d
{
namespace rda
{
static const std::string logPrefix_ = "scwx::wsr88d::rda::generic_radar_data";
static const std::unordered_map<std::string, DataBlockType> strToDataBlock_ {
{"VOL", DataBlockType::Volume},
{"ELV", DataBlockType::Elevation},
{"RAD", DataBlockType::Radial},
{"REF", DataBlockType::MomentRef},
{"VEL", DataBlockType::MomentVel},
{"SW ", DataBlockType::MomentSw},
{"ZDR", DataBlockType::MomentZdr},
{"PHI", DataBlockType::MomentPhi},
{"RHO", DataBlockType::MomentRho},
{"CFP", DataBlockType::MomentCfp}};
class GenericRadarData::MomentDataBlock::Impl
{
public:
explicit Impl() {}
};
GenericRadarData::MomentDataBlock::MomentDataBlock() :
p(std::make_unique<Impl>())
{
}
GenericRadarData::MomentDataBlock::~MomentDataBlock() = default;
GenericRadarData::MomentDataBlock::MomentDataBlock(MomentDataBlock&&) noexcept =
default;
GenericRadarData::MomentDataBlock& GenericRadarData::MomentDataBlock::operator=(
MomentDataBlock&&) noexcept = default;
class GenericRadarData::Impl
{
public:
explicit Impl() {};
~Impl() = default;
};
GenericRadarData::GenericRadarData() :
Level2Message(), p(std::make_unique<Impl>())
{
}
GenericRadarData::~GenericRadarData() = default;
GenericRadarData::GenericRadarData(GenericRadarData&&) noexcept = default;
GenericRadarData&
GenericRadarData::operator=(GenericRadarData&&) noexcept = default;
} // namespace rda
} // namespace wsr88d
} // namespace scwx