mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(1)

我们经常在一些应用中看到类似这样的功能,即根据用户定位显示距离用户由近及远的商品或商家。如下图所示:

mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(2)

在上图中,我们可以看到平台显示了一些商家,同时标注了它们离我所在位置的距离。这样的设计对于用户或者商家来说体验都是比较好的,一方面有助于用户筛选商家,另一方面也帮助了商家进行精确营销。

那这是如何做到的呢?

在一开始入手这个功能的时候,我曾考虑先从MySQL数据库里拿出数据,然后在页面渲染的时候,再利用第三方地图库(如腾讯地图,高德地图等),计算出位置,渲染到页面。如果你单论是否可以实现这样的功能,那这样的方案是没有问题的;但你若问这样的方案实现起来是否麻烦,那我就不能乱下定论了,因为毕竟距离的计算在前端处理。

那可不可以直接在MySQL数据库里计算距离呢?

最近在重新研究此功能的时候,我发现是可以直接在MySQL数据库里直接计算距离的。

首先,获取计算公式,如下:

mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(3)

然后,根据公式,在MySQL数据库里创建一个函数DISTANCE,如下:

mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(4)

第三,调用DISTANCE函数,并传入两点的经纬度,如下:

mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(5)

以上SQL语句只是计算两点之间的距离,如果你想在计算距离的同时,再作筛选和排序,你可以如下操作:

mysql根据经纬度计算距离(如何根据两点经纬度计算距离)(6)

这样,你也可以实现根据用户定位由远及近的显示商品或商家。

对比,在前端计算距离和在MySQL数据库计算距离,发现在MySQL数据库上操作有很大优势,它不仅可以轻松的计算距离,而且还可以轻松的按照距离进行排序、筛选等。

根据个人经验,推荐大家使用MySQL数据库计算两点距离。


本文由“编码之道”原创,转载请注明出处。

,