class GeoDistanceArel::Formulas::Haversine

Public Class Methods

new(model_class, lat_from_field = :lat, lng_from_field = :lng) click to toggle source
# File lib/geodistance_arel/formulas/haversine.rb, line 6
def initialize(model_class, lat_from_field = :lat, lng_from_field = :lng)
  @model_class = model_class
  @lat_from_field = lat_from_field
  @lng_from_field = lng_from_field
end

Public Instance Methods

distance_field_in(lat_to, lng_to, multiplier = 6371) click to toggle source
# File lib/geodistance_arel/formulas/haversine.rb, line 12
def distance_field_in(lat_to, lng_to, multiplier = 6371)
  multiply(
    distance_formula(
      lat_to,
      lng_to,
      @model_class.arel_table[@lat_from_field],
      @model_class.arel_table[@lng_from_field]
    ),
    multiplier
  )
end
distance_formula(lat_to, lng_to, lat_from, lng_from) click to toggle source
# File lib/geodistance_arel/formulas/haversine.rb, line 24
def distance_formula(lat_to, lng_to, lat_from, lng_from)
  acos_of(
    least_of(
      distance_tetha_formula(
        radians_of(literal_of(lat_to)),
        radians_of(literal_of(lng_to)),
        radians_of(lat_from),
        radians_of(lng_from)
      )
    )
  )
end
distance_tetha_formula(lat_to, lng_to, lat_from, lng_from) click to toggle source
# File lib/geodistance_arel/formulas/haversine.rb, line 37
def distance_tetha_formula(lat_to, lng_to, lat_from, lng_from)
  addition(
    multiply(
      cos_of(lng_to), cos_of(lat_to), cos_of(lng_from), cos_of(lat_from)
    ),
    multiply(
      cos_of(lat_to), sin_of(lng_to), cos_of(lat_from), sin_of(lng_from)
    ),
    multiply(sin_of(lat_to), sin_of(lat_from))
  )
end