Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to calculate distance in km between two points using Geocoder

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)
like image 664
jedi Avatar asked Sep 19 '15 19:09

jedi


People also ask

How do you find the distance between two latitude longitude points in KM?

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...

How do you find a distance between two points?

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.

How do I find the distance between two Geocodes?

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.


1 Answers

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:

look up coordinates of some location (like searching Google Maps)

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.

distance between Eiffel Tower and Empire State Building

Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-73.985655])
=> 3619.77359999382 # in configured units (default miles)
like image 82
Moustafa Sallam Avatar answered Oct 19 '22 02:10

Moustafa Sallam