From cf9400e2893af851bfd6a85ee982c670c5a25f22 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Thu, 24 Mar 2011 13:01:22 -0400
Subject: [PATCH] Extend to_radians to convert an entire array.

---
 lib/geocoder/calculations.rb | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb
index e85e6677..ac1952a9 100644
--- a/lib/geocoder/calculations.rb
+++ b/lib/geocoder/calculations.rb
@@ -22,10 +22,7 @@ module Geocoder
       options[:units] ||= :mi
 
       # convert degrees to radians
-      lat1 = to_radians(lat1)
-      lon1 = to_radians(lon1)
-      lat2 = to_radians(lat2)
-      lon2 = to_radians(lon2)
+      lat1, lon1, lat2, lon2 = to_radians(lat1, lon1, lat2, lon2)
 
       # compute distances
       dlat = (lat1 - lat2).abs
@@ -72,7 +69,7 @@ module Geocoder
       points.map!{ |p| p.is_a?(Array) ? p : p.to_coordinates }.compact
 
       # convert degrees to radians
-      points.map!{ |p| [to_radians(p[0]), to_radians(p[1])] }
+      points.map!{ |p| to_radians(p) }
 
       # convert to Cartesian coordinates
       x = []; y = []; z = []
@@ -98,9 +95,15 @@ module Geocoder
 
     ##
     # Convert degrees to radians.
+    # If an array is passed, converts each value and returns array.
     #
-    def to_radians(degrees)
-      degrees * (Math::PI / 180)
+    def to_radians(*args)
+      args = args.first if args.first.is_a?(Array)
+      if args.size == 1
+        args.first * (Math::PI / 180)
+      else
+        args.map{ |i| to_radians(i) }
+      end
     end
 
     ##
-- 
GitLab