From 36d2b2ef43cece405b568c1600229bf3f9b919b2 Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Mon, 21 Mar 2011 22:03:49 -0400 Subject: [PATCH] Add units argument to earth_radius. --- lib/geocoder/calculations.rb | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb index 8375a0f7..e85e6677 100644 --- a/lib/geocoder/calculations.rb +++ b/lib/geocoder/calculations.rb @@ -21,12 +21,6 @@ module Geocoder # set default options options[:units] ||= :mi - # define conversion factors - conversions = { - :mi => earth_radius, - :km => earth_radius / km_in_mi - } - # convert degrees to radians lat1 = to_radians(lat1) lon1 = to_radians(lon1) @@ -40,7 +34,7 @@ module Geocoder 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]] + c * earth_radius(options[:units]) end ## @@ -117,11 +111,12 @@ module Geocoder end ## - # Radius of the earth, in miles. - # Taken from: http://en.wikipedia.org/wiki/Earth_radius + # Radius of the earth in the given units (:mi or :km). Default is :mi. + # Values taken from: http://en.wikipedia.org/wiki/Earth_radius # - def earth_radius - 3959.0 + def earth_radius(units = :mi) + in_km = 6371.0 + units == :km ? in_km : in_km * km_in_mi end ## -- GitLab