如何使用Geocoder计算两点之间的距离

jed*_*edi 11 ruby-on-rails geocode

我正试图找出一种方法,使用Geocoder显示地图上两点之间的计算距离.我在我的表中有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
Run Code Online (Sandbox Code Playgroud)

如何计算两点之间的距离并显示在视图中.不需要经度和纬度.

编辑:默认单位为"里程".要更改默认单位,请在ActiveRecord模型中设置它:

Venue.near([40.71, -100.23], 20, :units => :km)
Run Code Online (Sandbox Code Playgroud)

或者改变它:

# config/initializers/geocoder.rb
# set default units to kilometers:
:units => :km,
Run Code Online (Sandbox Code Playgroud)

编辑:我设法解决这个问题:

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)
Run Code Online (Sandbox Code Playgroud)

Mou*_*lam 23

Geocoder::Calculations模块中,有一个名为的方法distance_between(lat1, lon1, lat2, lon2, options = {})

你传递两点的经度和纬度,它会让你回到这两点之间的距离.

如需进一步信息,请检查此链接

引用自Gem's docs:

查找某个位置的坐标(如搜索Google地图)

Geocoder.coordinates("25 Main St, Cooperstown, NY")
=> [42.700149, -74.922767]
Run Code Online (Sandbox Code Playgroud)

因此,您可以使用上述方法获取用户输入的特定位置的坐标,然后您可以通过以下方法计算两点之间的距离差异.

埃菲尔铁塔和帝国大厦之间的距离

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

  • 此解决方案完美运行!谢谢 (2认同)