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