module Fit4Ruby::GeoMath

Public Class Methods

cos(deg) click to toggle source
# File lib/fit4ruby/GeoMath.rb, line 44
def GeoMath.cos(deg)
  Math.cos(deg_to_rad(deg))
end
deg_to_rad(deg) click to toggle source
# File lib/fit4ruby/GeoMath.rb, line 48
def GeoMath.deg_to_rad(deg)
  deg * Math::PI / 180
end
distance(p1_lat, p1_lon, p2_lat, p2_lon) click to toggle source

This method uses the ellipsoidal earth projected to a plane formula prescribed by the FCC in 47 CFR 73.208 for distances not exceeding 475 km /295 miles. @param p1_lat Latitude of the first point in polar degrees @param p1_lon Longitude of the first point in polar degrees @param p2_lat Latitude of the second point in polar degrees @param p2_lon Longitude of the second point in polar degrees @return Distance in meters

# File lib/fit4ruby/GeoMath.rb, line 25
def GeoMath.distance(p1_lat, p1_lon, p2_lat, p2_lon)
  # Difference in latitude and longitude
  delta_lat = p2_lat - p1_lat
  delta_lon = p2_lon - p1_lon

  # Mean latitude
  mean_lat = (p1_lat + p2_lat) / 2

  # kilometers per degree of latitude difference
  k1 = 111.13209 - 0.56606 * cos(2 * mean_lat) +
       0.00120 * cos(4 * mean_lat)
  # kilometers per degree of longitude difference
  k2 = 111.41513 * cos(mean_lat) -
       0.09455 * cos(3 * mean_lat) +
       0.00012 * cos(5 * mean_lat)

  Math.sqrt(((k1 * delta_lat)) ** 2 + (k2 * delta_lon) ** 2) * 1000.0
end