mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:00:05 +00:00
TDWR range updates
This commit is contained in:
parent
732a7e233c
commit
41b491314b
6 changed files with 35 additions and 19 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue