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, = {}) # 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([:units]) end |