mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:10:04 +00:00
Process and index Digital Radar Data
This commit is contained in:
parent
730c1a9ba7
commit
835e8d8f0d
4 changed files with 31 additions and 17 deletions
|
|
@ -36,7 +36,7 @@ public:
|
|||
std::uint16_t radial_length() const;
|
||||
std::uint8_t azimuth_resolution_spacing() const;
|
||||
std::uint8_t radial_status() const;
|
||||
std::uint8_t elevation_number() const;
|
||||
std::uint16_t elevation_number() const;
|
||||
std::uint8_t cut_sector_number() const;
|
||||
units::degrees<float> elevation_angle() const;
|
||||
std::uint8_t radial_spot_blanking_status() const;
|
||||
|
|
|
|||
|
|
@ -53,6 +53,8 @@ public:
|
|||
virtual std::uint32_t collection_time() const = 0;
|
||||
virtual std::uint16_t modified_julian_date() const = 0;
|
||||
virtual units::degrees<float> azimuth_angle() const = 0;
|
||||
virtual std::uint16_t azimuth_number() const = 0;
|
||||
virtual std::uint16_t elevation_number() const = 0;
|
||||
virtual std::uint16_t volume_coverage_pattern_number() const = 0;
|
||||
|
||||
virtual std::shared_ptr<MomentDataBlock>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
#include <scwx/wsr88d/ar2v_file.hpp>
|
||||
#include <scwx/wsr88d/rda/digital_radar_data_generic.hpp>
|
||||
#include <scwx/wsr88d/rda/digital_radar_data.hpp>
|
||||
#include <scwx/wsr88d/rda/level2_message_factory.hpp>
|
||||
#include <scwx/wsr88d/rda/rda_types.hpp>
|
||||
#include <scwx/util/logger.hpp>
|
||||
|
|
@ -59,8 +59,7 @@ public:
|
|||
void IndexFile();
|
||||
void ParseLDMRecords();
|
||||
void ParseLDMRecord(std::istream& is);
|
||||
void ProcessRadarData(
|
||||
const std::shared_ptr<rda::DigitalRadarDataGeneric>& message);
|
||||
void ProcessRadarData(const std::shared_ptr<rda::GenericRadarData>& message);
|
||||
|
||||
std::string tapeFilename_;
|
||||
std::string extensionNumber_;
|
||||
|
|
@ -391,9 +390,10 @@ void Ar2vFileImpl::HandleMessage(std::shared_ptr<rda::Level2Message>& message)
|
|||
std::static_pointer_cast<rda::VolumeCoveragePatternData>(message);
|
||||
break;
|
||||
|
||||
case static_cast<std::uint8_t>(rda::MessageId::DigitalRadarData):
|
||||
case static_cast<std::uint8_t>(rda::MessageId::DigitalRadarDataGeneric):
|
||||
ProcessRadarData(
|
||||
std::static_pointer_cast<rda::DigitalRadarDataGeneric>(message));
|
||||
std::static_pointer_cast<rda::GenericRadarData>(message));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
@ -402,7 +402,7 @@ void Ar2vFileImpl::HandleMessage(std::shared_ptr<rda::Level2Message>& message)
|
|||
}
|
||||
|
||||
void Ar2vFileImpl::ProcessRadarData(
|
||||
const std::shared_ptr<rda::DigitalRadarDataGeneric>& message)
|
||||
const std::shared_ptr<rda::GenericRadarData>& message)
|
||||
{
|
||||
std::uint16_t azimuthIndex = message->azimuth_number() - 1;
|
||||
std::uint16_t elevationIndex = message->elevation_number() - 1;
|
||||
|
|
@ -419,18 +419,10 @@ void Ar2vFileImpl::IndexFile()
|
|||
{
|
||||
logger_->debug("Indexing file");
|
||||
|
||||
if (vcpData_ == nullptr)
|
||||
{
|
||||
logger_->warn("Cannot index file without VCP data");
|
||||
return;
|
||||
}
|
||||
|
||||
for (auto& elevationCut : radarData_)
|
||||
{
|
||||
std::uint16_t elevationAngle =
|
||||
vcpData_->elevation_angle_raw(elevationCut.first);
|
||||
rda::WaveformType waveformType =
|
||||
vcpData_->waveform_type(elevationCut.first);
|
||||
std::uint16_t elevationAngle {};
|
||||
rda::WaveformType waveformType = rda::WaveformType::Unknown;
|
||||
|
||||
std::shared_ptr<rda::GenericRadarData>& radial0 =
|
||||
(*elevationCut.second)[0];
|
||||
|
|
@ -441,6 +433,26 @@ void Ar2vFileImpl::IndexFile()
|
|||
continue;
|
||||
}
|
||||
|
||||
std::shared_ptr<rda::DigitalRadarData> digitalRadarData0 = nullptr;
|
||||
|
||||
if (vcpData_ != nullptr)
|
||||
{
|
||||
elevationAngle = vcpData_->elevation_angle_raw(elevationCut.first);
|
||||
waveformType = vcpData_->waveform_type(elevationCut.first);
|
||||
}
|
||||
else if ((digitalRadarData0 =
|
||||
std::dynamic_pointer_cast<rda::DigitalRadarData>(
|
||||
(*elevationCut.second)[0])) != nullptr)
|
||||
{
|
||||
elevationAngle = digitalRadarData0->elevation_angle_raw();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Return here, because we should only have a single message type
|
||||
logger_->warn("Cannot index file without VCP data");
|
||||
return;
|
||||
}
|
||||
|
||||
for (rda::DataBlockType dataBlockType :
|
||||
rda::MomentDataBlockTypeIterator())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -556,7 +556,7 @@ std::uint8_t DigitalRadarDataGeneric::radial_status() const
|
|||
return p->radialStatus_;
|
||||
}
|
||||
|
||||
std::uint8_t DigitalRadarDataGeneric::elevation_number() const
|
||||
std::uint16_t DigitalRadarDataGeneric::elevation_number() const
|
||||
{
|
||||
return p->elevationNumber_;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue