From 9f879b8dc14393c8ac03882c2d8a1a5f9e2684a4 Mon Sep 17 00:00:00 2001
From: Alex Reisner <alex@alexreisner.com>
Date: Thu, 24 Mar 2011 13:03:49 -0400
Subject: [PATCH] Fix bug in dlon calculation.

This was yielding incorrect bearing calculations (east and west were
treated as the same direction).
---
 lib/geocoder/calculations.rb | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb
index ac1952a9..5a994406 100644
--- a/lib/geocoder/calculations.rb
+++ b/lib/geocoder/calculations.rb
@@ -24,9 +24,9 @@ module Geocoder
       # convert degrees to radians
       lat1, lon1, lat2, lon2 = to_radians(lat1, lon1, lat2, lon2)
 
-      # compute distances
-      dlat = (lat1 - lat2).abs
-      dlon = (lon1 - lon2).abs
+      # compute deltas
+      dlat = lat2 - lat1
+      dlon = lon2 - lon1
 
       a = (Math.sin(dlat / 2))**2 + Math.cos(lat1) *
           (Math.sin(dlon / 2))**2 * Math.cos(lat2)
@@ -41,7 +41,13 @@ module Geocoder
     # Based on: http://www.movable-type.co.uk/scripts/latlong.html
     #
     def bearing_between(lat1, lon1, lat2, lon2)
-      dlon = to_radians((lon1 - lon2).abs)
+
+      # convert degrees to radians
+      lat1, lon1, lat2, lon2 = to_radians(lat1, lon1, lat2, lon2)
+
+      # compute deltas
+      dlon = lon2 - lon1
+
       y = Math.sin(dlon) * Math.cos(lat2)
       x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) *
         Math.cos(lat2) * Math.cos(dlon)
-- 
GitLab