mirror of
				https://github.com/ciphervance/supercell-wx.git
				synced 2025-10-31 09:00:05 +00:00 
			
		
		
		
	Add Generic Radar Data as a common base class to message types 1 and 31
This commit is contained in:
		
							parent
							
								
									b8b0812ce6
								
							
						
					
					
						commit
						571d0b2ce9
					
				
					 8 changed files with 191 additions and 41 deletions
				
			
		|  | @ -1,10 +1,6 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/util/iterator.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| #include <units/angle.h> | ||||
| #include <units/length.h> | ||||
| #include <scwx/wsr88d/rda/generic_radar_data.hpp> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
|  | @ -13,30 +9,7 @@ namespace wsr88d | |||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| enum class DataBlockType | ||||
| { | ||||
|    Volume, | ||||
|    Elevation, | ||||
|    Radial, | ||||
|    MomentRef, | ||||
|    MomentVel, | ||||
|    MomentSw, | ||||
|    MomentZdr, | ||||
|    MomentPhi, | ||||
|    MomentRho, | ||||
|    MomentCfp, | ||||
|    Unknown | ||||
| }; | ||||
| typedef util:: | ||||
|    Iterator<DataBlockType, DataBlockType::MomentRef, DataBlockType::MomentCfp> | ||||
|       MomentDataBlockTypeIterator; | ||||
| 
 | ||||
| class DigitalRadarDataGeneric; | ||||
| 
 | ||||
| typedef std::map<std::uint16_t, std::shared_ptr<DigitalRadarDataGeneric>> | ||||
|    ElevationScan; | ||||
| 
 | ||||
| class DigitalRadarDataGeneric : public Level2Message | ||||
| class DigitalRadarDataGeneric : public GenericRadarData | ||||
| { | ||||
| public: | ||||
|    class DataBlock; | ||||
|  | @ -69,11 +42,13 @@ public: | |||
|    std::uint8_t          radial_spot_blanking_status() const; | ||||
|    std::uint8_t          azimuth_indexing_mode() const; | ||||
|    std::uint16_t         data_block_count() const; | ||||
|    std::uint16_t         volume_coverage_pattern_number() const; | ||||
| 
 | ||||
|    std::shared_ptr<ElevationDataBlock> elevation_data_block() const; | ||||
|    std::shared_ptr<RadialDataBlock>    radial_data_block() const; | ||||
|    std::shared_ptr<VolumeDataBlock>    volume_data_block() const; | ||||
|    std::shared_ptr<MomentDataBlock> moment_data_block(DataBlockType type) const; | ||||
|    std::shared_ptr<GenericRadarData::MomentDataBlock> | ||||
|    moment_data_block(DataBlockType type) const; | ||||
| 
 | ||||
|    bool Parse(std::istream& is); | ||||
| 
 | ||||
|  | @ -128,7 +103,9 @@ private: | |||
|    bool Parse(std::istream& is); | ||||
| }; | ||||
| 
 | ||||
| class DigitalRadarDataGeneric::MomentDataBlock : public DataBlock | ||||
| class DigitalRadarDataGeneric::MomentDataBlock : | ||||
|     public DataBlock, | ||||
|     public GenericRadarData::MomentDataBlock | ||||
| { | ||||
| public: | ||||
|    explicit MomentDataBlock(const std::string& dataBlockType, | ||||
|  |  | |||
							
								
								
									
										97
									
								
								wxdata/include/scwx/wsr88d/rda/generic_radar_data.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										97
									
								
								wxdata/include/scwx/wsr88d/rda/generic_radar_data.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,97 @@ | |||
| #pragma once | ||||
| 
 | ||||
| #include <scwx/util/iterator.hpp> | ||||
| #include <scwx/wsr88d/rda/level2_message.hpp> | ||||
| 
 | ||||
| #include <units/angle.h> | ||||
| #include <units/length.h> | ||||
| 
 | ||||
| namespace scwx | ||||
| { | ||||
| namespace wsr88d | ||||
| { | ||||
| namespace rda | ||||
| { | ||||
| 
 | ||||
| enum class DataBlockType | ||||
| { | ||||
|    Volume, | ||||
|    Elevation, | ||||
|    Radial, | ||||
|    MomentRef, | ||||
|    MomentVel, | ||||
|    MomentSw, | ||||
|    MomentZdr, | ||||
|    MomentPhi, | ||||
|    MomentRho, | ||||
|    MomentCfp, | ||||
|    Unknown | ||||
| }; | ||||
| typedef util:: | ||||
|    Iterator<DataBlockType, DataBlockType::MomentRef, DataBlockType::MomentCfp> | ||||
|       MomentDataBlockTypeIterator; | ||||
| 
 | ||||
| class GenericRadarData; | ||||
| 
 | ||||
| typedef std::map<std::uint16_t, std::shared_ptr<GenericRadarData>> | ||||
|    ElevationScan; | ||||
| 
 | ||||
| class GenericRadarData : public Level2Message | ||||
| { | ||||
| public: | ||||
|    class MomentDataBlock; | ||||
| 
 | ||||
|    explicit GenericRadarData(); | ||||
|    virtual ~GenericRadarData(); | ||||
| 
 | ||||
|    GenericRadarData(const GenericRadarData&)            = delete; | ||||
|    GenericRadarData& operator=(const GenericRadarData&) = delete; | ||||
| 
 | ||||
|    GenericRadarData(GenericRadarData&&) noexcept; | ||||
|    GenericRadarData& operator=(GenericRadarData&&) noexcept; | ||||
| 
 | ||||
|    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         volume_coverage_pattern_number() const = 0; | ||||
| 
 | ||||
|    virtual std::shared_ptr<MomentDataBlock> | ||||
|    moment_data_block(DataBlockType type) const = 0; | ||||
| 
 | ||||
| private: | ||||
|    class Impl; | ||||
|    std::unique_ptr<Impl> p; | ||||
| }; | ||||
| 
 | ||||
| class GenericRadarData::MomentDataBlock | ||||
| { | ||||
| public: | ||||
|    explicit MomentDataBlock(); | ||||
|    virtual ~MomentDataBlock(); | ||||
| 
 | ||||
|    MomentDataBlock(const MomentDataBlock&)            = delete; | ||||
|    MomentDataBlock& operator=(const MomentDataBlock&) = delete; | ||||
| 
 | ||||
|    MomentDataBlock(MomentDataBlock&&) noexcept; | ||||
|    MomentDataBlock& operator=(MomentDataBlock&&) noexcept; | ||||
| 
 | ||||
|    virtual std::uint16_t            number_of_data_moment_gates() const = 0; | ||||
|    virtual units::kilometers<float> data_moment_range() const           = 0; | ||||
|    virtual std::uint16_t            data_moment_range_raw() const       = 0; | ||||
|    virtual units::kilometers<float> | ||||
|                          data_moment_range_sample_interval() const     = 0; | ||||
|    virtual std::uint16_t data_moment_range_sample_interval_raw() const = 0; | ||||
|    virtual std::int16_t  snr_threshold_raw() const                     = 0; | ||||
|    virtual std::uint8_t  data_word_size() const                        = 0; | ||||
|    virtual float         scale() const                                 = 0; | ||||
|    virtual float         offset() const                                = 0; | ||||
|    virtual const void*   data_moments() const                          = 0; | ||||
| 
 | ||||
| private: | ||||
|    class Impl; | ||||
|    std::unique_ptr<Impl> p; | ||||
| }; | ||||
| 
 | ||||
| } // namespace rda
 | ||||
| } // namespace wsr88d
 | ||||
| } // namespace scwx
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dan Paulat
						Dan Paulat