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