Sha256: a62a8d0150a74e0cc756a3d6703052ef36d9e882337a6338ef5a67e69657372a

Contents?: true

Size: 995 Bytes

Versions: 1

Compression:

Stored size: 995 Bytes

Contents

module GeoDistance::Model
  class Location
    attr_reader :latitude, :longitude

    def initialize(latitude, longitude)
      @latitude = Float(latitude)
      @longitude = Float(longitude)
    end

    # Calculates distance to other location in meters
    # using Haversine formula: https://en.wikipedia.org/wiki/Haversine_formula
    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

    def degrees_to_radians(degrees)
      degrees * Math::PI / 180
    end

    def earth_radius_in_meters
      6371 * 1000
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
geo_distance-0.1.1 lib/geo_distance/model/location.rb