mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 07:00:06 +00:00 
			
		
		
		
	Add scaled values for ranges and angles in Digital Radar Data
This commit is contained in:
		
							parent
							
								
									807d98d7ef
								
							
						
					
					
						commit
						5058e3493c
					
				
					 2 changed files with 79 additions and 31 deletions
				
			
		|  | @ -2,6 +2,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | #include <scwx/wsr88d/rda/level2_message.hpp> | ||||||
| 
 | 
 | ||||||
|  | #include <units/angle.h> | ||||||
|  | #include <units/length.h> | ||||||
|  | 
 | ||||||
| namespace scwx | namespace scwx | ||||||
| { | { | ||||||
| namespace wsr88d | namespace wsr88d | ||||||
|  | @ -21,31 +24,37 @@ public: | ||||||
|    DigitalRadarData(DigitalRadarData&&) noexcept; |    DigitalRadarData(DigitalRadarData&&) noexcept; | ||||||
|    DigitalRadarData& operator=(DigitalRadarData&&) noexcept; |    DigitalRadarData& operator=(DigitalRadarData&&) noexcept; | ||||||
| 
 | 
 | ||||||
|    std::uint32_t collection_time() const; |    std::uint32_t            collection_time() const; | ||||||
|    std::uint16_t modified_julian_date() const; |    std::uint16_t            modified_julian_date() const; | ||||||
|    std::uint16_t unambiguous_range() const; |    std::uint16_t            unambiguous_range() const; | ||||||
|    std::uint16_t azimuth_angle() const; |    std::uint16_t            azimuth_angle_raw() const; | ||||||
|    std::uint16_t azimuth_number() const; |    units::degrees<float>    azimuth_angle() const; | ||||||
|    std::uint16_t radial_status() const; |    std::uint16_t            azimuth_number() const; | ||||||
|    std::uint16_t elevation_angle() const; |    std::uint16_t            radial_status() const; | ||||||
|    std::uint16_t elevation_number() const; |    std::uint16_t            elevation_angle_raw() const; | ||||||
|    std::uint16_t surveillance_range() const; |    units::degrees<float>    elevation_angle() const; | ||||||
|    std::uint16_t doppler_range() const; |    std::uint16_t            elevation_number() const; | ||||||
|    std::uint16_t surveillance_range_sample_interval() const; |    std::uint16_t            surveillance_range_raw() const; | ||||||
|    std::uint16_t doppler_range_sample_interval() const; |    units::kilometers<float> surveillance_range() const; | ||||||
|    std::uint16_t number_of_surveillance_bins() const; |    std::uint16_t            doppler_range_raw() const; | ||||||
|    std::uint16_t number_of_doppler_bins() const; |    units::kilometers<float> doppler_range() const; | ||||||
|    std::uint16_t cut_sector_number() const; |    std::uint16_t            surveillance_range_sample_interval_raw() const; | ||||||
|    float         calibration_constant() const; |    units::kilometers<float> surveillance_range_sample_interval() const; | ||||||
|    std::uint16_t surveillance_pointer() const; |    std::uint16_t            doppler_range_sample_interval_raw() const; | ||||||
|    std::uint16_t velocity_pointer() const; |    units::kilometers<float> doppler_range_sample_interval() const; | ||||||
|    std::uint16_t spectral_width_pointer() const; |    std::uint16_t            number_of_surveillance_bins() const; | ||||||
|    std::uint16_t doppler_velocity_resolution() const; |    std::uint16_t            number_of_doppler_bins() const; | ||||||
|    std::uint16_t volume_coverage_pattern_number() const; |    std::uint16_t            cut_sector_number() const; | ||||||
|    std::uint16_t nyquist_velocity() const; |    float                    calibration_constant() const; | ||||||
|    std::uint16_t atmos() const; |    std::uint16_t            surveillance_pointer() const; | ||||||
|    std::uint16_t tover() const; |    std::uint16_t            velocity_pointer() const; | ||||||
|    std::uint16_t radial_spot_blanking_status() const; |    std::uint16_t            spectral_width_pointer() const; | ||||||
|  |    std::uint16_t            doppler_velocity_resolution() const; | ||||||
|  |    std::uint16_t            volume_coverage_pattern_number() const; | ||||||
|  |    std::uint16_t            nyquist_velocity() const; | ||||||
|  |    std::uint16_t            atmos() const; | ||||||
|  |    std::uint16_t            tover() const; | ||||||
|  |    std::uint16_t            radial_spot_blanking_status() const; | ||||||
| 
 | 
 | ||||||
|    bool Parse(std::istream& is); |    bool Parse(std::istream& is); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -11,6 +11,12 @@ namespace rda | ||||||
| static const std::string logPrefix_ = "scwx::wsr88d::rda::digital_radar_data"; | static const std::string logPrefix_ = "scwx::wsr88d::rda::digital_radar_data"; | ||||||
| static const auto        logger_    = util::Logger::Create(logPrefix_); | static const auto        logger_    = util::Logger::Create(logPrefix_); | ||||||
| 
 | 
 | ||||||
|  | // Table III-A Angle Data Format
 | ||||||
|  | constexpr float kAngleDataScale = 0.0054931640625f; | ||||||
|  | 
 | ||||||
|  | // Table III-B Range Format
 | ||||||
|  | constexpr float kRangeScale = 0.001f; | ||||||
|  | 
 | ||||||
| class DigitalRadarData::Impl | class DigitalRadarData::Impl | ||||||
| { | { | ||||||
| public: | public: | ||||||
|  | @ -73,11 +79,16 @@ std::uint16_t DigitalRadarData::unambiguous_range() const | ||||||
|    return p->unambiguousRange_; |    return p->unambiguousRange_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::azimuth_angle() const | std::uint16_t DigitalRadarData::azimuth_angle_raw() const | ||||||
| { | { | ||||||
|    return p->azimuthAngle_; |    return p->azimuthAngle_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | units::degrees<float> DigitalRadarData::azimuth_angle() const | ||||||
|  | { | ||||||
|  |    return units::degrees<float> {p->azimuthAngle_ * kAngleDataScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::uint16_t DigitalRadarData::azimuth_number() const | std::uint16_t DigitalRadarData::azimuth_number() const | ||||||
| { | { | ||||||
|    return p->azimuthNumber_; |    return p->azimuthNumber_; | ||||||
|  | @ -88,36 +99,64 @@ std::uint16_t DigitalRadarData::radial_status() const | ||||||
|    return p->radialStatus_; |    return p->radialStatus_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::elevation_angle() const | std::uint16_t DigitalRadarData::elevation_angle_raw() const | ||||||
| { | { | ||||||
|    return p->elevationAngle_; |    return p->elevationAngle_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | units::degrees<float> DigitalRadarData::elevation_angle() const | ||||||
|  | { | ||||||
|  |    return units::degrees<float> {p->elevationAngle_ * kAngleDataScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::uint16_t DigitalRadarData::elevation_number() const | std::uint16_t DigitalRadarData::elevation_number() const | ||||||
| { | { | ||||||
|    return p->elevationNumber_; |    return p->elevationNumber_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::surveillance_range() const | std::uint16_t DigitalRadarData::surveillance_range_raw() const | ||||||
| { | { | ||||||
|    return p->surveillanceRange_; |    return p->surveillanceRange_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::doppler_range() const | units::kilometers<float> DigitalRadarData::surveillance_range() const | ||||||
|  | { | ||||||
|  |    return units::kilometers<float> {p->surveillanceRange_ * kRangeScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::uint16_t DigitalRadarData::doppler_range_raw() const | ||||||
| { | { | ||||||
|    return p->dopplerRange_; |    return p->dopplerRange_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::surveillance_range_sample_interval() const | units::kilometers<float> DigitalRadarData::doppler_range() const | ||||||
|  | { | ||||||
|  |    return units::kilometers<float> {p->dopplerRange_ * kRangeScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::uint16_t DigitalRadarData::surveillance_range_sample_interval_raw() const | ||||||
| { | { | ||||||
|    return p->surveillanceRangeSampleInterval_; |    return p->surveillanceRangeSampleInterval_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::uint16_t DigitalRadarData::doppler_range_sample_interval() const | units::kilometers<float> | ||||||
|  | DigitalRadarData::surveillance_range_sample_interval() const | ||||||
|  | { | ||||||
|  |    return units::kilometers<float> {p->surveillanceRangeSampleInterval_ * | ||||||
|  |                                     kRangeScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | std::uint16_t DigitalRadarData::doppler_range_sample_interval_raw() const | ||||||
| { | { | ||||||
|    return p->dopplerRangeSampleInterval_; |    return p->dopplerRangeSampleInterval_; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | units::kilometers<float> DigitalRadarData::doppler_range_sample_interval() const | ||||||
|  | { | ||||||
|  |    return units::kilometers<float> {p->dopplerRangeSampleInterval_ * | ||||||
|  |                                     kRangeScale}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| std::uint16_t DigitalRadarData::number_of_surveillance_bins() const | std::uint16_t DigitalRadarData::number_of_surveillance_bins() const | ||||||
| { | { | ||||||
|    return p->numberOfSurveillanceBins_; |    return p->numberOfSurveillanceBins_; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat