From cf98f9161e7cab760d7c865f2c21a97ce8ed253d Mon Sep 17 00:00:00 2001 From: Alex Reisner <alex@alexreisner.com> Date: Mon, 21 Mar 2011 21:47:13 -0400 Subject: [PATCH] Move Earth's radius to separate method. --- lib/geocoder/calculations.rb | 12 +++++++++++- lib/geocoder/orms/active_record.rb | 2 +- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb index b617bad2..a3c69ce8 100644 --- a/lib/geocoder/calculations.rb +++ b/lib/geocoder/calculations.rb @@ -22,7 +22,10 @@ module Geocoder options[:units] ||= :mi # define conversion factors - conversions = { :mi => 3956, :km => 6371 } + conversions = { + :mi => earth_radius, + :km => earth_radius / km_in_mi + } # convert degrees to radians lat1 = to_radians(lat1) @@ -113,6 +116,13 @@ module Geocoder (radians * 180.0) / Math::PI end + ## + # Radius of the earth, in miles. + # + def earth_radius + 3956 + end + ## # Conversion factor: km to mi. # diff --git a/lib/geocoder/orms/active_record.rb b/lib/geocoder/orms/active_record.rb index 2633fb27..25d44ef3 100644 --- a/lib/geocoder/orms/active_record.rb +++ b/lib/geocoder/orms/active_record.rb @@ -93,7 +93,7 @@ module Geocoder::Orm "(SIN(RADIANS(#{latitude})) * " + "COS(RADIANS(#{lat_attr})) * " + "COS(RADIANS(#{lon_attr} - #{longitude}))))) + 360) % 360" - distance = "3956 * 2 * ASIN(SQRT(" + + distance = "#{Geocoder::Calculations.earth_radius} * 2 * ASIN(SQRT(" + "POWER(SIN((#{latitude} - #{lat_attr}) * " + "PI() / 180 / 2), 2) + COS(#{latitude} * PI() / 180) * " + "COS(#{lat_attr} * PI() / 180) * " + -- GitLab