Ruby on rails Haversine gem:将计算距离转换为公里

Posted

技术标签:

【中文标题】Ruby on rails Haversine gem:将计算距离转换为公里【英文标题】:Ruby on rails Haversine gem : convert calculated distance to km 【发布时间】:2018-11-14 11:25:17 【问题描述】:

我正在做一项计算两个 gps 点之间距离的任务,我想将距离转换为 KM:

def distances
    site     = Site.find params[ :id ]
    stores   = Store.current
    distances = []

    stores.map do |store|
      distance = Haversine.distance(site.address.latitude, site.address.longitude, store.address.latitude, store.address.longitude)
      distances << 
        name: store.name,
        value: distance
      
    end

    render json: 
      distances: distances.to_json
    

  end

计算项目示例:

商店2:5527.654499076738

在 hasrsine gem 的文档中有一种转换方法:distance.to_kilometers 但它对我不起作用!有什么帮助吗?

【问题讨论】:

你现在距离哪个单位? 它是Haversine::距离单位 它怎么不适合你?它在做什么呢?您能展示一下您是如何尝试调用它的吗? 嗨@SimpleLime:像这样:距离= Haversine.distance(site.address.latitude,site.address.longitude,store.address.latitude,store.address.longitude).to_kilometers 距离变量应该是 Haversine::Distance 作为类类型,但是当检查它时它是在 Float 【参考方案1】:

您可能需要在生成的Haversine::Distance 上调用to_kilometers 方法,否则将使用其to_s 方法:

def distances
  site = Site.find params[ :id ]

  distances = Store.current.map do |store|
    
      name: store.name,
      value: Haversine.distance(
               site.address.latitude,
               site.address.longitude,
               store.address.latitude,
               store.address.longitude
             ).to_kilometers
    
  end

  render json: 
    distances: distances
  
end

您真正想做的是将distance_in_km 添加到您的Address 类...

【讨论】:

在 gem 文档中我发现 .to_kilometers 方法存在但不起作用,它显示未定义的方法错误 你忘记require 'haversine'了吗?

以上是关于Ruby on rails Haversine gem:将计算距离转换为公里的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu搭建Ruby on Rails环境

找不到 Ruby on Rails 符号

Ruby On Rails,制作可排序列表

如何使下拉表单在 Ruby On Rails 中工作

Ruby on Rails 的最佳位置 IP

ruby on rails flash 消息 - :alert :error :notice 和 :success?