Haversine не дает мне правильный результат

Я пытаюсь рассчитать расстояние между двумя точками в километрах, но получается неправильно.

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"}]

person Aniket Shivam Tiwari    schedule 07.06.2016    source источник
comment
Что вы имеете в виду под неправильным? Сколько скидка? Может быть, удалить sssssss, прежде чем размещать здесь?   -  person Pascal    schedule 07.06.2016
comment
да, я удалил sss, и он должен быть в пределах 50 км или меньше   -  person Aniket Shivam Tiwari    schedule 07.06.2016
comment
Что такое loc? У него действительно есть символы в качестве ключей?   -  person Mladen Jablanović    schedule 07.06.2016
comment
loc в основном для зацикливания из таблицы местоположений. Я также предоставил данные из моей таблицы местоположений, которая была сохранена в моей базе данных.   -  person Aniket Shivam Tiwari    schedule 07.06.2016
comment
Вместо something.to_f используйте Float(something). to_f молча игнорирует исключения.   -  person Mladen Jablanović    schedule 07.06.2016
comment
Я знаю, что такое loc для, но не знаю, для чего.   -  person Mladen Jablanović    schedule 07.06.2016
comment
Loc — локальная переменная для зацикливания всех записей, присутствующих в таблице местоположений.   -  person Aniket Shivam Tiwari    schedule 07.06.2016


Ответы (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

person Pascal    schedule 07.06.2016