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