Как рассчитать расстояние в км между двумя точками с помощью геокодера

Я пытаюсь выяснить, как показать расчетное расстояние между двумя точками на карте с помощью геокодера. У меня есть start_address и destination_address в моей таблице, которую я прошу, на мой взгляд, моя модель выглядит так:

class Ride < ActiveRecord::Base
    geocoded_by :start_address
    geocoded_by :destination_address
    reverse_geocoded_by :latitude, :longitude
    after_validation :geocode

end

как я могу получить расчетное расстояние между двумя точками и показать в поле зрения. Нет необходимости в долготе и широте.

изменить: Единица измерения по умолчанию - "мили". Чтобы изменить единицу по умолчанию, установите ее в ActiveRecord модель:

Venue.near([40.71, -100.23], 20, :units => :km)

или изменить его на:

# config/initializers/geocoder.rb
# set default units to kilometers:
:units => :km,

изменить: Мне удалось решить это так:

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)

1 ответов


на Geocoder::Calculations модуль, есть метод, называемый distance_between(lat1, lon1, lat2, lon2, options = {})

вы проходите долготу и широту двух точек, и это дает вам обратно расстояние между этими двумя точками.

для получения дополнительной информации, пожалуйста, проверьте этот ссылке из

цитата изGem's docs:

посмотрите координаты некоторого местоположения (например, поиск Google Maps)

Geocoder.coordinates("25 Main St, Cooperstown, NY")
=> [42.700149, -74.922767]

так что вы можете использовать этот метод, чтобы получить координаты определенное местоположение, введенное пользователем, затем вы можете рассчитать разницу в расстоянии между двумя точками с помощью метода ниже.

расстояние между Эйфелевой башней и Эмпайр-Стейт-Билдинг

Geocoder::Calculations.distance_between([47.858205,2.294359], [40.748433,-73.985655])
=> 3619.77359999382 # in configured units (default miles)