mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 08:30:04 +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
	
	 Dan Paulat
						Dan Paulat