如何在Mysql中有效利用经度/纬度值?

前端之家收集整理的这篇文章主要介绍了如何在Mysql中有效利用经度/纬度值? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

多亏了Wikileaks,在英国的英国我们现在可以访问每个邮政编码wikileaks postcodes uk重要信息的经度和纬度坐标.请勿在公共应用程序中使用此数据-担心数据已被故意破坏,您可能会被视为违反版权法.尝试使用来自Postcode UK site这样的开源网站的数据

现在,可以使用以下计算来计算每个点之间的距离(最初来自精美的Pro MysqL书):

The distance d between two points (x1,y1) and (x2,y2) can be calculated from the following equation (so long as x values are latitude and y values are longitude in radians,r is the radius of the sphere which is 3956 in miles):

d= acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y2-y1)) * r

现在这已经足够好了,还是应该使用新的GIS数据类型和功能,如果可以,如何将经度和纬度引用转换为Point数据类型?我意识到,由于地球不是一个完美的球体,因此我在上面引用的距离计算并不完美.但是对于我的目的来说已经足够了.使用新的GIS功能是否会a)使距离的计算更快b)使距离的计算更精确?

最佳答案
专注于(a):

过去,我已经预先计算了部分,存储了lat,long,xaxis,yaxis和zxais,其中x,y& z定义为:

xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))

然后可以使用sql宽松地计算距离(例如,acos(xaxis * $xaxis yaxis * $yaxis zaxis * $zaxis)* 6367.0 / 1.852)(其中以$开头的那些对象以相同的方式针对相关起点进行了预先计算如上)

以这种方式进行的预计算将相对昂贵的触发推向一次事件,并简化了查询.

原文链接:https://www.f2er.com/mysql/532002.html

猜你在找的MySQL相关文章