Class: ADSB::CPR::Report

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/adsb/cpr/report.rb

Instance Method Summary collapse

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

#altitudeObject

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
  message = @parity.eql?(0) ? @even : @odd
  return message.altitude
end

#latitudeObject

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

#longitudeObject

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