module Haversine

Constants

EARTH_RADIUS_KM
EARTH_RADIUS_MI
VERSION

Public Class Methods

distance(lat_a, lng_a, lat_b, lng_b) click to toggle source

Calculate the great-circle distance between two points in kilometers (km.)

Example: >> Haversine.distance(51.885, 0.235, 49.008, 2.549)

> 359.3823602146921

Arguments:

lat_a: (Float)
lng_a: (Float)
lat_b: (Float)
lng_b: (Float)
# File lib/haversine.rb, line 39
def self.distance(lat_a, lng_a, lat_b, lng_b)
  return self.distance_in_radius(lat_a, lng_a, lat_b, lng_b) * EARTH_RADIUS_KM
end
distance_in_mile(lat_a, lng_a, lat_b, lng_b) click to toggle source

Calculate the great-circle distance between two points in miles (mi.)

Example: >> Haversine.distance_in_mile(51.885, 0.235, 49.008, 2.549)

> 223.5599711472713

Arguments:

lat_a: (Float)
lng_a: (Float)
lat_b: (Float)
lng_b: (Float)
# File lib/haversine.rb, line 54
def self.distance_in_mile(lat_a, lng_a, lat_b, lng_b)
  return self.distance_in_radius(lat_a, lng_a, lat_b, lng_b) * EARTH_RADIUS_MI
end

Private Class Methods

distance_in_radius(lat_a, lng_a, lat_b, lng_b) click to toggle source
# File lib/haversine.rb, line 60
def self.distance_in_radius(lat_a, lng_a, lat_b, lng_b)
  d_lat = (lat_a - lat_b).toRad;
  d_lng = (lng_a - lng_b).toRad;

  a = Math.sin(d_lat/2)**2 + Math.cos(lat_a.toRad) * Math.cos(lat_b.toRad) * Math.sin(d_lng/2) ** 2
  c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a))

  return c
end