我想创建一个函数,使用pythag定理而不是半正弦大圆公式来计算两对纬度/长度之间的距离.由于这将是相对较短的距离(3公里),我认为这个假定平坦地球的版本应该没问题.我怎样才能做到这一点?我问互联网并没有提出任何有用的东西.:)
谢谢.
编辑:
这是我想出来的(似乎工作):
def get_dist(lat0, lng0, lat1, lng1)
begin
d_ew = (lng1.to_f - lng0.to_f) * Math.cos(lat0.to_f)
d_ns = (lat1.to_f - lat0.to_f)
d_lu = Math.sqrt(d_ew.to_f * d_ew.to_f + d_ns.to_f * d_ns.to_f)
d_mi = ((2*Math::PI*3961.3)/360)*d_lu
return d_mi
rescue Exception => ex
logger.debug "[get_dist] An exception occurred: #{ex.message}"
return -1
end
end
Run Code Online (Sandbox Code Playgroud)
Ewa*_*odd 15
如果您希望所涉及的距离与地球的大小相比较小,则可以使用简单的毕达哥拉斯三角形.
假设您位于(lat0,long0)并且您想知道"纬度单位"中与点(lat1,long1)的距离.
水平(EW)距离大致为
d_ew = (long1 - long0) * cos(lat0)
Run Code Online (Sandbox Code Playgroud)
将其乘以cos(lat0)以说明经度线在高纬度处变得更近.
垂直(NS)距离更容易
d_ns = (lat1 - lat0)
Run Code Online (Sandbox Code Playgroud)
所以两点之间的距离是
d = sqrt(d_ew * d_ew + d_ns * d_ns)
Run Code Online (Sandbox Code Playgroud)
您可以针对更严格的任务优化此方法,但这应该足以比较距离.
事实上,为了比较距离,比较d平方就可以了,这意味着你可以省略sqrt操作.