module Geocoder::Calculations

def distance_between(lat1, lon1, lat2, lon2, options = {})


:units :: :mi (default) or :km

Takes two sets of coordinates and an options hash:
Calculate the distance between two points on Earth (Haversine formula).
#
def distance_between(lat1, lon1, lat2, lon2, options = {})
  # set default options
  options[:units] ||= :mi
  # define conversion factors
  conversions = { :mi => 3956, :km => 6371 }
  # convert degrees to radians
  lat1 = to_radians(lat1)
  lon1 = to_radians(lon1)
  lat2 = to_radians(lat2)
  lon2 = to_radians(lon2)
  # compute distances
  dlat = (lat1 - lat2).abs
  dlon = (lon1 - lon2).abs
  a = (Math.sin(dlat / 2))**2 + Math.cos(lat1) *
      (Math.sin(dlon / 2))**2 * Math.cos(lat2)
  c = 2 * Math.atan2( Math.sqrt(a), Math.sqrt(1-a))
  c * conversions[options[:units]]
end