Sha256: d1220a4ebef3fe1b36a1575be12bbb2043561d579f8ac8e8b69ea8f5fe4eb2a9

Contents?: true

Size: 1.26 KB

Versions: 15

Compression:

Stored size: 1.26 KB

Contents

module Graticule
  module Distance
    #
    # The Haversine Formula works better at small distances than the Spherical Law of Cosines
    #
    # Thanks to Chris Veness (http://www.movable-type.co.uk/scripts/LatLong.html)
    # for distance formulas.
    #
    class Haversine < DistanceFormula
      
      # Calculate the distance between two Locations using the Haversine formula
      #
      #   Graticule::Distance::Haversine.distance(
      #     Graticule::Location.new(:latitude => 42.7654, :longitude => -86.1085),
      #     Graticule::Location.new(:latitude => 41.849838, :longitude => -87.648193)
      #   )
      #   #=> 101.061720831836
      #
      def self.distance(from, to, units = :miles)
        from_longitude  = from.longitude.to_radians
        from_latitude   = from.latitude.to_radians
        to_longitude    = to.longitude.to_radians
        to_latitude     = to.latitude.to_radians

        latitude_delta  = to_latitude - from_latitude
        longitude_delta = to_longitude - from_longitude

        a = sin(latitude_delta/2)**2 + 
            cos(from_latitude) * 
            cos(to_latitude) * 
            sin(longitude_delta/2)**2

        c = 2 * atan2(sqrt(a), sqrt(1-a))

        d = EARTH_RADIUS[units.to_sym] * c
      end

    end
  end
end

Version data entries

15 entries across 15 versions & 5 rubygems

Version Path
CodeMonkeySteve-graticule-0.2.11 lib/graticule/distance/haversine.rb
CodeMonkeySteve-graticule-0.2.12 lib/graticule/distance/haversine.rb
aub-graticule-0.2.11 lib/graticule/distance/haversine.rb
collectiveidea-graticule-0.2.12 lib/graticule/distance/haversine.rb
pepe-graticule-0.2.11 lib/graticule/distance/haversine.rb
aub-graticule-0.3.2 lib/graticule/distance/haversine.rb
graticule-2.0.1 lib/graticule/distance/haversine.rb
graticule-2.0.0 lib/graticule/distance/haversine.rb
aub-graticule-0.3.1 lib/graticule/distance/haversine.rb
aub-graticule-0.3.0 lib/graticule/distance/haversine.rb
graticule-1.0.0.pre2 lib/graticule/distance/haversine.rb
graticule-1.0.0.pre lib/graticule/distance/haversine.rb
graticule-0.2.12 lib/graticule/distance/haversine.rb
graticule-0.2.10 lib/graticule/distance/haversine.rb
graticule-0.2.9 lib/graticule/distance/haversine.rb