Class: ADSB::CPR::Report
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- ADSB::CPR::Report
- Defined in:
- lib/adsb/cpr/report.rb
Instance Method Summary collapse
-
#altitude ⇒ Object
Get the reported altitude in feet.
-
#initialize(even, odd) ⇒ Report
constructor
Create a new compact position report.
-
#latitude ⇒ Object
Get the reported latitude in decimal degrees.
-
#longitude ⇒ Object
Get the reported longitude in decimal degrees.
Constructor Details
#initialize(even, odd) ⇒ Report
Create a new compact position report.
Attributes
-
even- The position message of even parity -
odd- The position message of odd parity
Examples
even = ADSB::Message.new('8D40621D58C382D690C8AC2863A7')
odd = ADSB::Message.new('8D40621D58C382D690C8AC2863A7')
report = ADSB::CPR::Report.new(even, odd)
17 18 19 20 21 22 |
# File 'lib/adsb/cpr/report.rb', line 17 def initialize even, odd @even = even @odd = odd @parity = even.created_at > odd.created_at ? 0 : 1 super @parity.eql?(0) ? @even : @odd end |
Instance Method Details
#altitude ⇒ Object
Get the reported altitude in feet.
Examples
even = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
odd = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
report = CPR::Report.new(even, odd)
altitude = report.altitude
31 32 33 34 |
# File 'lib/adsb/cpr/report.rb', line 31 def altitude = @parity.eql?(0) ? @even : @odd return .altitude end |
#latitude ⇒ Object
Get the reported latitude in decimal degrees.
Examples
even = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
odd = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
report = CPR::Report.new(even, odd)
latitude = report.latitude
43 44 45 |
# File 'lib/adsb/cpr/report.rb', line 43 def latitude return @parity.eql?(0) ? even_latitude : odd_latitude end |
#longitude ⇒ Object
Get the reported longitude in decimal degrees.
Examples
even = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
odd = CPR::Message.new('8D40621D58C382D690C8AC2863A7')
report = CPR::Report.new(even, odd)
longitude = report.longitude
54 55 56 57 58 59 |
# File 'lib/adsb/cpr/report.rb', line 54 def longitude ni = n(latitude, @parity) m = (@even.longitude * (transition_latitude(latitude) - 1) - @odd.longitude * transition_latitude(latitude) + 0.5).floor longitude = @parity.eql?(0) ? 360.0 / ni * (m % ni + @even.longitude) : 360.0 / ni * (m % ni + @odd.longitude) return longitude >= 180 ? longitude - 360 : longitude end |