class Geodesy::Bearing

Attributes

ending_point[R]
starting_point[R]

Public Class Methods

new(start_point, end_point) click to toggle source

start_point is a Geodesy::Coordinates end_point is a Geodesy::Coordinates

# File lib/geodesy/bearing.rb, line 12
def initialize(start_point, end_point)
  @starting_point = start_point
  @ending_point   = end_point
end

Public Instance Methods

calculate() click to toggle source
# File lib/geodesy/bearing.rb, line 17
def calculate
  start_lat_in_radians  = starting_point.lat.to_radians
  end_lat_in_radians    = ending_point.lat.to_radians
  delta                 = (ending_point.lng.angle - starting_point.lng.angle).to_radians

  # formula: http://mathforum.org/library/drmath/view/55417.html
  y = Math.sin(delta) * Math.cos(end_lat_in_radians)
  x = ( Math.cos(start_lat_in_radians) * Math.sin(end_lat_in_radians) ) -
      ( Math.sin(start_lat_in_radians) * Math.cos(end_lat_in_radians) * Math.cos(delta) )
  z = Math.atan2(y, x)

  ( z.to_degrees + 360 ) % 360
end