2016-05-18 3 views
0

Мне нужно рассчитать расстояние между широт и долгот, полученных от JSON с латах и ​​долгот внутри метода расстоянияHaversine формула рубина

Я получаю ошибку distance': undefined method - за „12,986375“: String (NoMethodError)

require 'json' 
class Numeric 
    def to_rad 
     self * Math::PI/180 
    end 
    end 

    def distance(lat2, lon2) 
    lat1=12.9611159 
    lon1=77.6362214 
    dLat = (lat2-lat1).to_rad; 
    dLon = (lon2-lon1).to_rad; 
    a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(lat1.to_rad) * Math.cos(lat2.to_rad) * 
     Math.sin(dLon/2) * Math.sin(dLon/2); 
    c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    d = 6371 * c; 
    puts d 
    end 

file= File.read('customers.json') 
data_hash= JSON.parse( file) 

data_hash["customers"].each do |user| 
    latitude=user["latitude"] 
    longitude=user["longitude"] 
    distance(latitude,longitude) 
end 

Ниже мой JSON-файл, из которого берутся широчайшие и тоскует.

{"customers" :[ 

      {"latitude": "12.986375", "user_id": "12", "name": "Chris", "longitude": "77.043701"}, 
      {"latitude": "11.92893", "user_id": "1", "name": "Alice", "longitude": "78.27699"}, 
      ] 
} 

ответ

0

ошибка вполне объяснительная - ваш json сохраняет широту/долготу в виде строк. проанализировать их, чтобы плавать до вызова метода расстояния

latitude=user["latitude"].to_f 
longitude=user["longitude"].to_f 
distance(latitude,longitude) 
+0

tq это сработало :) –

Смежные вопросы