我正在尝试找出一种使用地理编码器显示地图上两点之间的计算距离的方法。我的表中有 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)
In Geocoder::Calculations
模块中有一个方法叫做distance_between(lat1, lon1, lat2, lon2, options = {})
您传递两点的经度和纬度,它会返回这两点之间的距离。
欲了解更多信息,请检查此link http://www.rubydoc.info/gems/rails-geocoder/0.9.11/Geocoder/Calculations out
引用自Gem's docs
:
查找某个位置的坐标(例如搜索 Google 地图)
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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)