From b0c34cf85ebdf408f661d958ff133c1a65623632 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Wed, 4 Nov 2009 00:06:38 -0500
Subject: [PATCH] When calculating geographic center, convert from degrees to
 radians before computation, then back again before returning.

---
 lib/geocoder.rb | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/lib/geocoder.rb b/lib/geocoder.rb
index 917a2ad2..1ac7fd9e 100644
--- a/lib/geocoder.rb
+++ b/lib/geocoder.rb
@@ -220,6 +220,9 @@ module Geocoder
   #
   def self.geographic_center(points)
     
+    # convert lat, lon pairs to radians
+    points.map!{ |p| [to_radians(p[0]), to_radians(p[1])] }
+    
     # convert to Cartesian coordinates
     x = []; y = []; z = []
     points.each do |p|
@@ -235,10 +238,11 @@ module Geocoder
     
     # convert back to latitude/longitude
     lon = Math.atan2(ya, xa)
-    hyp = Math.sqrt(xa * xa + ya * ya)
+    hyp = Math.sqrt(xa**2 + ya**2)
     lat = Math.atan2(za, hyp)
     
-    [lat,lon]
+    # return answer in degrees
+    [to_degrees(lat), to_degrees(lon)]
   end
 
   ##
@@ -248,6 +252,13 @@ module Geocoder
     degrees * (Math::PI / 180)
   end
   
+  ##
+  # Convert radians to degrees.
+  #
+  def self.to_degrees(radians)
+    (radians * 180.0) / Math::PI
+  end
+  
   ##
   # Query Google for geographic information about the given phrase.
   #
-- 
GitLab