module GeoCalc::Destination

Public Class Methods

destination_point(base_point, brng, dist) click to toggle source

Returns the destination point from this point having travelled the given distance (in km) on the given initial bearing (bearing may vary before destination is reached)

see(#williams.best.vwh.net/avform.htm#LL)

@param [Numeric] Initial bearing in degrees @param [Numeric] Distance in km @return [Array] Destination point

# File lib/geo_calc/calc/destination.rb, line 16
def self.destination_point base_point, brng, dist
  dist = dist / base_point.earth_radius_km  # convert dist to angular distance in radians
  brng = brng.to_rad 
  lat1 = base_point.lat.to_rad
  lon1 = base_point.lon.to_rad

  lat2 = Math.asin( Math.sin(lat1) * Math.cos(dist) + Math.cos(lat1) * Math.sin(dist) * Math.cos(brng) )
  lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(dist) * Math.cos(lat1), Math.cos(dist) - Math.sin(lat1) * Math.sin(lat2))

  lon2 = (lon2 + 3*Math::PI) % (2*Math::PI) - Math::PI  # normalise to -180...+180

  [lat2.to_deg, lon2.to_deg]
  # GeoPoint.new lat2.to_deg, lon2.to_deg
end

Public Instance Methods

destination_point(brng, dist) click to toggle source
# File lib/geo_calc/calc/destination.rb, line 3
def destination_point brng, dist
  GeoCalc::Destination.destination_point self, brng, dist
end