Method: Geocoder::Calculations#distance_between

Defined in:
lib/geocoder/calculations.rb

#distance_between(point1, point2, options = {}) ⇒ Object

Distance between two points on Earth (Haversine formula). Takes two points and an options hash. The points are given in the same way that points are given to all Geocoder methods that accept points as arguments. They can be:

  • an array of coordinates ([lat,lon])

  • a geocodable address (string)

  • a geocoded object (one which implements a to_coordinates method which returns a [lat,lon] array

The options hash supports:

  • :units - :mi or :km Use Geocoder.configure(:units => …) to configure default units.



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/geocoder/calculations.rb', line 84

def distance_between(point1, point2, options = {})
  # convert to coordinate arrays
  point1 = extract_coordinates(point1)
  point2 = extract_coordinates(point2)

  # convert degrees to radians
  point1 = to_radians(point1)
  point2 = to_radians(point2)

  # compute deltas
  dlat = point2[0] - point1[0]
  dlon = point2[1] - point1[1]

  a = (Math.sin(dlat / 2))**2 + Math.cos(point1[0]) *
      (Math.sin(dlon / 2))**2 * Math.cos(point2[0])
  c = 2 * Math.atan2( Math.sqrt(a), Math.sqrt(1-a))
  c * earth_radius(options[:units])
end