class Gstatsat::SatelliteBearing
Attributes
azimuth[RW]
elevation[RW]
Public Class Methods
new(params = {})
click to toggle source
# File lib/gstatsat.rb, line 38 def initialize(params = {}) validate(params) @satellite = params.fetch(:satellite) @base_station = params.fetch(:base_station) calculate_bearing end
Public Instance Methods
visible?()
click to toggle source
# File lib/gstatsat.rb, line 45 def visible? elevation > 0 end
Private Instance Methods
calculate_bearing()
click to toggle source
# File lib/gstatsat.rb, line 50 def calculate_bearing earths_radius = 6371 satellite_height = 35786 azimuthal_angle_rads = to_radians(@base_station.longitude - @satellite.longitude) base_station_latitude_rads = to_radians(@base_station.latitude) sigma = earths_radius.to_f / ( earths_radius + satellite_height ) beta = Math.acos(Math.cos(base_station_latitude_rads) * Math.cos(azimuthal_angle_rads)) @elevation = to_degrees(Math.atan((Math.cos(beta) - sigma) / Math.sin(beta))).round(1) @azimuth = to_degrees(Math::PI + Math::atan(Math::tan(azimuthal_angle_rads) / Math::sin(base_station_latitude_rads))).round(1) end
to_degrees(radians)
click to toggle source
# File lib/gstatsat.rb, line 66 def to_degrees(radians) radians * 180 / Math::PI end
to_radians(degrees)
click to toggle source
# File lib/gstatsat.rb, line 62 def to_radians(degrees) degrees * Math::PI / 180 end
validate(params)
click to toggle source
# File lib/gstatsat.rb, line 70 def validate(params) raise KeyError, 'satellite is not Gstatsat::Satellite class' unless params.fetch(:satellite).is_a? Gstatsat::Satellite raise KeyError, 'base_station is not Gstatsat::BaseStation class' unless params.fetch(:base_station).is_a? Gstatsat::BaseStation end