diff --git a/lib/geocoder/calculations.rb b/lib/geocoder/calculations.rb index 70c8fcb350fd90732aee1c2bea9b9ece85692c62..bb20f92d6b310053f716d3caff8ddf7446ad64c3 100644 --- a/lib/geocoder/calculations.rb +++ b/lib/geocoder/calculations.rb @@ -20,6 +20,7 @@ module Geocoder # Conversion factor: multiply by kilometers to get miles. # KM_IN_MI = 0.621371192 + KM_IN_NM = 0.540 # Not a number constant NAN = defined?(::Float::NAN) ? ::Float::NAN : 0 / 0.0 @@ -263,13 +264,27 @@ module Geocoder km * km_in_mi end + ## + # Convert kilometers to nautical miles. + # + def to_nauticalmiles(km) + km * km_in_nm + end + ## # Radius of the Earth in the given units (:mi or :km). # Use Geocoder.configure(:units => ...) to configure default units. # def earth_radius(units = nil) units ||= Geocoder.config.units - units == :km ? EARTH_RADIUS : to_miles(EARTH_RADIUS) + case units + when :km + EARTH_RADIUS + when :mi + to_miles(EARTH_RADIUS) + when :nm + to_nauticalmiles(EARTH_RADIUS) + end end ## @@ -279,6 +294,15 @@ module Geocoder KM_IN_MI end + ## + # Conversion factor: km to nm. + # + def km_in_nm + KM_IN_NM + end + + + ## # Conversion factor: mi to km. # @@ -286,6 +310,13 @@ module Geocoder 1.0 / KM_IN_MI end + ## + # Conversion factor: nm to km. + # + def nm_in_km + 1.0 / KM_IN_NM + end + ## # Takes an object which is a [lat,lon] array, a geocodable string, # or an object that implements +to_coordinates+ and returns a