【发布时间】:2017-07-10 07:20:45
【问题描述】:
我要找所有靠近我的纬度和经度的诊所。我用以下方法做到了。 dist 的结果是一个长值,我需要将它与整数值进行比较。我不知道为什么在比较距离和距离时会出现这个错误,这是一个整数值。 这是我的错误:
NoMethodError (undefined method `<=' for (-2.693846638591123+0.0i):Complex):
这就是我为此所做的一切:
def get_clinic_list
ulat=params[:lat]
ulang=params[:lang]
distance=params[:distance]
@clinic=[]
Clinic.all.each do |clinic|
if clinic_distance(ulat,ulang,distance,clinic.id)
@doctor=DoctorProfile.find_by(user_id: clinic.user_id)
end
end
end
def clinic_distance(ulat, ulang,distance,clinic)
@clinic=Clinic.find(clinic)
diff_lat= ulat.to_f - @clinic.latitude.to_f
diff_lang= ulang.to_f - @clinic.longitude.to_f
#disc=Math.sqrt(((diff_lat*119.574)**2)+(diff_lang * Math.cos(diff_lat) * 111.320))
a=(diff_lat * 119.574) ** 2
b= diff_lang * Math.cos(diff_lat) * 111.320
c=a+b
logger.info "the c parameter is #{c}"
dist=Math.sqrt(c)
dist = dist ** 2
if dist <= distance
return true
else
return false
end
end
【问题讨论】:
-
这是一个公式,它是地球的球状体
-
我认为红宝石在各种算术上都没有问题
-
您的
clinic_distance方法完全错误。119.574不知从何而来。b应该是平方的。您将dist计算为平方根的平方。你的if语句没有做任何事情,它只是返回dist <= distance -
@Stefan:
Math.cos可以返回一个Complex数字,如果参数有一个虚部并且'mathn'是必需的。Complex值可能来自负数c。不过,它仍然需要“数学”。无论如何,我希望这段代码永远不会投入生产。 -
@EricDuminil 好吧,是的,有点。
mathnreplacesMath和CMath,所以你实际上调用了CMath.cos。这是一个 hack,mathn将从 Ruby 2.5 的 stdlib 中删除。
标签: ruby-on-rails ruby ruby-on-rails-5