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