diff --git a/lib/geocoder/orms/active_record.rb b/lib/geocoder/orms/active_record.rb index 44098b8faf4374f74600569e9907a480f86c02a8..b4079daec23250bf16b666b9c1f5614725194fa8 100644 --- a/lib/geocoder/orms/active_record.rb +++ b/lib/geocoder/orms/active_record.rb @@ -157,8 +157,11 @@ module Geocoder::Orm dx = Geocoder::Calculations.longitude_degree_distance(30, options[:units] || :mi) dy = Geocoder::Calculations.latitude_degree_distance(options[:units] || :mi) - distance = "(#{dy} * ABS(#{lat_attr} - #{latitude}) / 2) + " + - "(#{dx} * ABS(#{lon_attr} - #{longitude}) / 2)" + # sin of 45 degrees = average x or y component of vector + factor = Math.sin(Math::PI / 4) + + distance = "(#{dy} * ABS(#{lat_attr} - #{latitude}) * #{factor}) + " + + "(#{dx} * ABS(#{lon_attr} - #{longitude}) * #{factor})" default_near_scope_options(latitude, longitude, radius, options).merge( :select => "#{options[:select] || '*'}, " + "#{distance} AS distance" +