【问题标题】:Haversine is not giving me correct resultHaversine 没有给我正确的结果
【发布时间】:2016-06-07 06:52:39
【问题描述】:

我正在尝试以公里为单位计算两点之间的距离,但它给了我错误。

location.each do |loc|
  distance =  Haversine.distance(28.6139, 77.209, loc[:lat].to_f, loc[:long].to_f).to_km           
puts "  #{distance}"
end


这是我得到的距离,这是错误的

 7385.99072855455
 7383.795725224046
7392.13122601482
 7391.537885880786


该位置的数据在我的数据库中

[{"id":1,"lat":28.6139,"lng":77.209,"location":"","object_id":1,"created_at":"2016-06-07T05:46:53.000Z","updated_at":"2016-06-07T05:46:53.000Z","object_type":"abc"},{"id":2,"lat":28.6692,"lng":77.4538,"location":"","object_id":2,"created_at":"2016-06-07T05:49:23.000Z","updated_at":"2016-06-07T05:49:23.000Z","object_type":"cde"},{"id":3,"lat":28.4595,"lng":77.0266,"location":"","object_id":3,"created_at":"2016-06-07T05:50:22.000Z","updated_at":"2016-06-07T05:50:22.000Z","object_type":"ggg"},{"id":4,"lat":28.4744,"lng":77.504,"location":"","object_id":4,"created_at":"2016-06-07T05:50:24.000Z","updated_at":"2016-06-07T05:50:24.000Z","object_type":"eerr"}]

【问题讨论】:

  • “错误”是什么意思?减了多少?也许在发布之前删除“sssssss”?
  • 是的,我已经删除了 sss,它应该在 50 公里以内
  • 什么是loc?它真的有符号作为键吗?
  • loc 基本上是用于从位置表循环。我还提供了我的位置表中保存在我的数据库中的数据
  • 代替something.to_f,使用Float(something)to_f 默默地忽略异常。

标签: ruby haversine


【解决方案1】:

您有一个错字:loc[:long] 而不是loc[:lng],该行应为:

Haversine.distance(28.6139, 77.209, loc[:lat].to_f, loc[:lng].to_f).to_km

您通过nil.to_f 作为第二点的_longitude。这相当于通过0

【讨论】:

    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多