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)
from math import cos, asin, sqrt, pi def distance(lat1, lon1, lat2, lon2): p = pi/180 a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p) * cos(lat2*p) * (1-cos((lon2-lon1)*p))/2 return 12742 * asin(sqrt(a)) #2*R*asin...
Distance between two points is the length of the line segment that connects the two points in a plane. The formula to find the distance between the two points is usually given by d=√((x2 – x1)² + (y2 – y1)²). This formula is used to find the distance between any two points on a coordinate plane or x-y plane.
Label one as Point 1, with the coordinates x1 and y1, and label the other Point 2, with the coordinates x2 and y2. Plug these values into the distance formula, which is the square of X2 minus X1 plus the square of Y2 minus Y1, then the square root of that result.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With