TDWR range updates

This commit is contained in:
Dan Paulat 2022-04-08 18:37:47 -05:00
parent 732a7e233c
commit 41b491314b
6 changed files with 35 additions and 19 deletions

View file

@ -104,13 +104,20 @@ RadarProductManager::coordinates(common::RadialSize radialSize) const
{
switch (radialSize)
{
case common::RadialSize::_0_5Degree: return p->coordinates0_5Degree_;
case common::RadialSize::_1Degree: return p->coordinates1Degree_;
case common::RadialSize::_0_5Degree:
return p->coordinates0_5Degree_;
case common::RadialSize::_1Degree:
return p->coordinates1Degree_;
}
throw std::exception("Invalid radial size");
}
float RadarProductManager::gate_size() const
{
return (p->radarSite_->type() == "tdwr") ? 150.0f : 250.0f;
}
std::shared_ptr<config::RadarSite> RadarProductManager::radar_site() const
{
return p->radarSite_;
@ -133,6 +140,8 @@ void RadarProductManager::Initialize()
const QMapbox::Coordinate radar(p->radarSite_->latitude(),
p->radarSite_->longitude());
const float gateSize = gate_size();
// Calculate half degree azimuth coordinates
timer.start();
std::vector<float>& coordinates0_5Degree = p->coordinates0_5Degree_;
@ -154,7 +163,7 @@ void RadarProductManager::Initialize()
static_cast<uint16_t>(radialGate / common::MAX_DATA_MOMENT_GATES);
const float angle = radial * 0.5f - 0.25f; // 0.5 degree radial
const float range = (gate + 1) * 250.0f; // 0.25km gate size
const float range = (gate + 1) * gateSize;
const size_t offset = radialGate * 2;
double latitude;
@ -192,7 +201,7 @@ void RadarProductManager::Initialize()
static_cast<uint16_t>(radialGate / common::MAX_DATA_MOMENT_GATES);
const float angle = radial * 1.0f - 0.5f; // 1 degree radial
const float range = (gate + 1) * 250.0f; // 0.25km gate size
const float range = (gate + 1) * gateSize;
const size_t offset = radialGate * 2;
double latitude;

View file

@ -30,6 +30,7 @@ public:
~RadarProductManager();
const std::vector<float>& coordinates(common::RadialSize radialSize) const;
float gate_size() const;
std::shared_ptr<config::RadarSite> radar_site() const;
void Initialize();

View file

@ -60,7 +60,10 @@ public:
colorTable_ {},
colorTableLut_ {},
colorTableMin_ {2},
colorTableMax_ {254}
colorTableMax_ {254},
savedColorTable_ {nullptr},
savedScale_ {0.0f},
savedOffset_ {0.0f}
{
auto it = blockTypes_.find(product);
@ -471,10 +474,14 @@ void Level2ProductView::ComputeSweep()
const uint16_t dataMomentIntervalH = dataMomentInterval / 2;
// Compute gate size (number of base 250m gates per bin)
const uint16_t gateSize = std::max<uint16_t>(1, dataMomentInterval / 250);
const uint16_t gateSizeMeters =
static_cast<uint16_t>(p->radarProductManager_->gate_size());
const uint16_t gateSize =
std::max<uint16_t>(1, dataMomentInterval / gateSizeMeters);
// Compute gate range [startGate, endGate)
const uint16_t startGate = (dataMomentRange - dataMomentIntervalH) / 250;
const uint16_t startGate =
(dataMomentRange - dataMomentIntervalH) / gateSizeMeters;
const uint16_t numberOfDataMomentGates =
std::min<uint16_t>(momentData->number_of_data_moment_gates(),
static_cast<uint16_t>(gates));

View file

@ -40,7 +40,10 @@ public:
colorTable_ {},
colorTableLut_ {},
colorTableMin_ {2},
colorTableMax_ {254}
colorTableMax_ {254},
savedColorTable_ {nullptr},
savedScale_ {0.0f},
savedOffset_ {0.0f}
{
}
~Level3RadialViewImpl() = default;
@ -48,7 +51,6 @@ public:
std::string product_;
std::shared_ptr<manager::RadarProductManager> radarProductManager_;
float selectedElevation_;
std::chrono::system_clock::time_point selectedTime_;
std::shared_ptr<wsr88d::rpg::GraphicProductMessage> graphicMessage_;
@ -168,11 +170,6 @@ void Level3RadialView::LoadColorTable(
UpdateColorTable();
}
void Level3RadialView::SelectElevation(float elevation)
{
p->selectedElevation_ = elevation;
}
void Level3RadialView::SelectTime(std::chrono::system_clock::time_point time)
{
p->selectedTime_ = time;
@ -435,8 +432,11 @@ void Level3RadialView::ComputeSweep()
const uint16_t dataMomentIntervalH = dataMomentInterval / 2;
const uint16_t dataMomentRange = dataMomentIntervalH;
// Compute gate size (number of base 250m gates per bin)
const uint16_t gateSize = std::max<uint16_t>(1, dataMomentInterval / 250);
// Compute gate size (number of base gates per bin)
const uint16_t gateSize = std::max<uint16_t>(
1,
dataMomentInterval /
static_cast<uint16_t>(p->radarProductManager_->gate_size()));
// Compute gate range [startGate, endGate)
const uint16_t startGate = 0;

View file

@ -37,7 +37,6 @@ public:
const std::vector<float>& vertices() const override;
void LoadColorTable(std::shared_ptr<common::ColorTable> colorTable) override;
void SelectElevation(float elevation) override;
void SelectTime(std::chrono::system_clock::time_point time) override;
void Update() override;

View file

@ -35,8 +35,8 @@ static const std::unordered_map<int16_t, uint16_t> rangeMap_ {
{151, 230}, {153, 460}, {154, 300}, {155, 300}, {159, 300}, {161, 300},
{163, 300}, {165, 300}, {166, 230}, {167, 300}, {168, 300}, {169, 230},
{170, 230}, {171, 230}, {172, 230}, {173, 230}, {174, 230}, {175, 230},
{176, 230}, {177, 230}, {178, 300}, {179, 300}, {180, 90}, {181, 90},
{182, 90}, {184, 90}, {186, 415}, {193, 460}, {195, 460}, {196, 50}};
{176, 230}, {177, 230}, {178, 300}, {179, 300}, {180, 89}, {181, 89},
{182, 89}, {184, 89}, {186, 412}, {193, 460}, {195, 460}, {196, 50}};
static const std::unordered_map<int16_t, uint16_t> xResolutionMap_ {
{19, 1000}, {20, 2000}, {27, 1000}, {30, 1000}, {31, 2000}, {32, 1000},