ruby 中的 Haversine 公式
Haversine formula in ruby
我需要使用经纬度内部距离法计算从 json 获得的纬度和经度之间的距离
我遇到错误
distance': undefined method
-' for "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"},
]
}
错误不言自明 - 您的 json 将 latitude/longitude 保留为字符串。在调用距离方法之前将它们解析为浮动
latitude=user["latitude"].to_f
longitude=user["longitude"].to_f
distance(latitude,longitude)
我需要使用经纬度内部距离法计算从 json 获得的纬度和经度之间的距离
我遇到错误
distance': undefined method
-' for "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"},
]
}
错误不言自明 - 您的 json 将 latitude/longitude 保留为字符串。在调用距离方法之前将它们解析为浮动
latitude=user["latitude"].to_f
longitude=user["longitude"].to_f
distance(latitude,longitude)