I'm trying to figure out a way to show calculated distance between two point on a map using Geocoder. I have start_address and destination_address in my table which I ask for in my view, my model looks like this:
class Ride < ActiveRecord::Base
geocoded_by :start_address
geocoded_by :destination_address
reverse_geocoded_by :latitude, :longitude
after_validation :geocode
end
How can I get calculated distance between the two points and show in view. No need for longitude and latitude.
Edit: The default unit is 'miles'. To change default unit set it in your ActiveRecord model:
Venue.near([40.71, -100.23], 20, :units => :km)
or change it in:
# config/initializers/geocoder.rb
# set default units to kilometers:
:units => :km,
Edit: I've managed to resolve this like so:
ride = Ride.new(params)
start_address_coordinates = Geocoder.coordinates(params[:start_address])
destination_coordinates = Geocoder.coordinates(params[:destination])
ride.distance = Geocoder::Calculations.distance_between(start_address_coordinates, destination_coordinates)
In Geocoder::Calculations
module, there is a method called distance_between(lat1, lon1, lat2, lon2, options = {})
you pass the longitude and latitude of two points and it gives you back the distance between these two points.
For further info please check this link out
quoted from theGem's docs
:
Geocoder.coordinates("25 Main St, Cooperstown, NY")
=> [42.700149, -74.922767]
So you can use this above method to get the coordinates of a specific location entered by the user, then you can calculate the difference in distance between two points by the below method.
Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-73.985655])
=> 3619.77359999382 # in configured units (default miles)