我正在努力格式化地理编码器返回从一个位置到另一个位置的距离的方式。
这是代码:
Jbuilder 文件:
json.array! results do |result|
json.distance result.distance_from(@geocoded_location, units: :miles)
end
方法:
def geocoded_location
return unless postcode
@geocoded_location ||= geocoder.geocode(postcode, bias: 'uk')
end
def geocoder
Geokit::Geocoders::GoogleGeocoder
end
def postcode
@postcode ||= params[:searchterm]
end
现在我认为这一切都有效,但我得到的结果是结果数组中第一个位置的 3562.6325498137753。
有没有办法格式化响应,因为两个位置相距不到 2 英里,因此绝对不会以英里为单位返回。以为可能是英尺或米,但无论您从哪里进行搜索,它们的距离都大致相同。所以我认为这是地理编码位置的问题。
我们正在使用宝石"geokit">
任何想法或帮助将不胜感激。如果您需要任何进一步的代码,请告诉我。
在地理编码器::计算模块中,您可以使用以下方法计算距离:
distance_between(lat1, lon1, lat2, lon2, options = {}) = ⇒ Object
将纬度和经度作为参数传递,
Geocoder::Calculations.distance_between([47.858205,2.294359],
[40.748433,-73.985655]) => 3619.77359999382 # in configured units (default miles)
要获取纬度和经度的使用,
Geocoder.coordinates("25 Main St, Cooperstown, NY") => [42.700149, -74.922767]
要以公里格式获取结果,请将公里作为单位传递
Geocoder::Calculations.distance_between([47.858205,2.294359],
[40.748433,-73.985655], :units => :km) => 5825.4609245084539
参考: http://www.rubydoc.info/gems/rails-geocoder/0.9.11/Geocoder/Calculations#distance_between-instance_method