class GeoDistance::Model::Location

Attributes

latitude[R]
longitude[R]

Public Class Methods

new(latitude, longitude) click to toggle source
# File lib/geo_distance/model/location.rb, line 5
def initialize(latitude, longitude)
  @latitude = Float(latitude)
  @longitude = Float(longitude)
end

Public Instance Methods

distance_to(location) click to toggle source

Calculates distance to other location in meters using Haversine formula: en.wikipedia.org/wiki/Haversine_formula

# File lib/geo_distance/model/location.rb, line 12
def distance_to(location)
  delta_latitude_radians = degrees_to_radians(location.latitude - latitude)
  delta_longitude_radians = degrees_to_radians(location.longitude - longitude)

  a = Math.sin(delta_latitude_radians/2)**2 +
      Math.cos(degrees_to_radians(latitude)) *
      Math.cos(degrees_to_radians(location.latitude)) *
      Math.sin(delta_longitude_radians/2)**2

  c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))
  c * earth_radius_in_meters
end

Private Instance Methods

degrees_to_radians(degrees) click to toggle source
# File lib/geo_distance/model/location.rb, line 27
def degrees_to_radians(degrees)
  degrees * Math::PI / 180
end
earth_radius_in_meters() click to toggle source
# File lib/geo_distance/model/location.rb, line 31
def earth_radius_in_meters
  6371 * 1000
end