我试图查看一个点是否在一个圆圈内。我正在使用毕达哥拉斯定理进行检查,但是当我使用它时,我得到undefined method
- ' for" 37.33259551999998":String`。如何减去这些变量?
def getalerts
alerts = Alert.all
school = School.find_by_school_name(params[:school])
latitude = params[:latitude]
longitude = params[:longitude]
radius = school.radius
alertArray = Array.new()
alerts.each do |alert|
d = Math.sqrt(((alert.latitude - school.latitude)**2) + (alert.longitude - school.longitude)**2)
if d < radius
alertArray["latlng"] = alert.latitude, alert.longitude
end
end
respond_to do |format|
format.json { render json: alertArray}
end
end
答案 0 :(得分:0)
从错误消息中可以清楚地看到,对字符串执行减法选项,因此它无效。您可以使用to_i
方法将字符串转换为整数。所以试试这个:
d = Math.sqrt(((alert.latitude.to_i - school.latitude.to_i)**2) + (alert.longitude.to_i - school.longitude.to_i)**2)
此外,如果您希望将它们转换为浮动值,则必须使用to_f
方法。
答案 1 :(得分:0)
在警报和学校纬度和经度上使用to_f
。
转换为float将保留小数点数(与to_i
不同)
d = Math.sqrt(
((alert.latitude.to_f - school.latitude.to_f)**2)
+ (alert.longitude.to_f - school.longitude.to_f)**2)
答案 2 :(得分:0)
卡里提出了正确的观点。即使最初的问题是关于要求减去浮点数的字符串表示的技术问题,真正的问题是你需要计算地球上两点之间的距离。这是一个关于hasrsine公式的红宝石实现
https://github.com/kristianmandrup/haversine/blob/master/lib/haversine.rb