class Geodesy::Destination
Attributes
bearing[R]
distance[R]
radius[R]
starting_point[R]
Public Class Methods
new(starting_point, bearing, distance)
click to toggle source
StartingPoint is a Coordinate Object Bearing
is a Float Object Distance is an Integer or Float Object - default units: meters
# File lib/geodesy/destination.rb, line 16 def initialize(starting_point, bearing, distance) @starting_point = starting_point @radius = Geodesy::EARTH_RADIUS @bearing = bearing @distance = distance end
Public Instance Methods
calculate()
click to toggle source
# File lib/geodesy/destination.rb, line 23 def calculate angular_distance = distance / radius bearing_to_radians = bearing.to_radians lat_radians = starting_point.lat.to_radians lng_radians = starting_point.lng.to_radians x = Math.asin( ( Math.sin(lat_radians) * Math.cos(angular_distance) ) + ( Math.cos(lat_radians) * Math.sin(angular_distance) * Math.cos(bearing_to_radians) ) ) y = lng_radians + Math.atan2( Math.sin(bearing_to_radians) * Math.sin(angular_distance) * Math.cos(lat_radians), Math.cos(angular_distance) - Math.sin(lat_radians) * Math.sin(x) ) # normalize y to -180°..+180° z = ( y + 3 * Math::PI ) % ( 2 * Math::PI ) - Math::PI Coordinates.new( x.to_degrees, z.to_degrees ) end