Skip to content
Snippets Groups Projects
Commit 78517db6 authored by Alex Reisner's avatar Alex Reisner
Browse files

Merge branch 'master' into abravalheri-master

parents a1db1b8d cfdca9d0
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,9 @@ module Geocoder ...@@ -21,6 +21,9 @@ module Geocoder
# #
KM_IN_MI = 0.621371192 KM_IN_MI = 0.621371192
# Not a number constant
NAN = defined?(::Float::NAN) ? ::Float::NAN : 0 / 0.0
## ##
# Distance spanned by one degree of latitude in the given units. # Distance spanned by one degree of latitude in the given units.
# #
...@@ -279,10 +282,25 @@ module Geocoder ...@@ -279,10 +282,25 @@ module Geocoder
# #
def extract_coordinates(point) def extract_coordinates(point)
case point case point
when Array; point when Array
when String; Geocoder.coordinates(point) if point.size == 2
else point.to_coordinates lat, lon = point
if !lat.nil? && lat.respond_to?(:to_f) and
!lon.nil? && lon.respond_to?(:to_f)
then
return [ lat.to_f, lon.to_f ]
end
end
when String
point = Geocoder.coordinates(point) and return point
else
if point.respond_to?(:to_coordinates)
if Array === array = point.to_coordinates
return extract_coordinates(array)
end
end
end end
[ NAN, NAN ]
end end
end end
end end
......
...@@ -149,5 +149,34 @@ class CalculationsTest < Test::Unit::TestCase ...@@ -149,5 +149,34 @@ class CalculationsTest < Test::Unit::TestCase
l = Landmark.new(*landmark_params(:msg)) l = Landmark.new(*landmark_params(:msg))
assert_equal l.bearing_from([50,-86.1]), l.bearing_to([50,-86.1]) - 180 assert_equal l.bearing_from([50,-86.1]), l.bearing_to([50,-86.1]) - 180
end end
def test_extract_coordinates
result = Geocoder::Calculations.extract_coordinates([ nil, nil ])
assert_equal [ Geocoder::Calculations::NAN ] * 2, result
result = Geocoder::Calculations.extract_coordinates([ 1.0 / 3, 2.0 / 3 ])
assert_in_delta 1.0 / 3, result.first, 1E-5
assert_in_delta 2.0 / 3, result.last, 1E-5
result = Geocoder::Calculations.extract_coordinates(nil)
assert_equal [ Geocoder::Calculations::NAN ] * 2, result
result = Geocoder::Calculations.extract_coordinates('')
assert_equal [ Geocoder::Calculations::NAN ] * 2, result
result = Geocoder::Calculations.extract_coordinates([ 'nix' ])
assert_equal [ Geocoder::Calculations::NAN ] * 2, result
o = Object.new
result = Geocoder::Calculations.extract_coordinates(o)
assert_equal [ Geocoder::Calculations::NAN ] * 2, result
def o.to_coordinates
[ 1.0 / 3, 2.0 / 3 ]
end
result = Geocoder::Calculations.extract_coordinates(o)
assert_in_delta 1.0 / 3, result.first, 1E-5
assert_in_delta 2.0 / 3, result.last, 1E-5
end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment