MySQL计算两坐标之间的距离,查询某个点附近的数据根据距离排序。

07-05 12:09 字数 725 阅读 74 已编辑

产品有个需求是查出当前用户附近的餐厅,记录一下:

SELECT
    id,
    `name`,
    lat,
    lng,
    6378.138 * 2 * ASIN(
        SQRT(
            POW( SIN( ( 40.00412368774414 * PI() / 180 - lat * PI() / 180 ) / 2 ), 2 ) + COS( 40.00412368774414 * PI() / 180 ) * COS( lat * PI() / 180 ) * POW( SIN( ( 116.40998077392578 * PI() / 180 - lng * PI() / 180 ) / 2 ), 2 ) 
        ) 
    ) * 1000 AS distance 
FROM
    `restaurant` 
WHERE
    lat IS NOT NULL 
    AND lng IS NOT NULL 
ORDER BY
    distance ASC,
    id DESC

计算公式

计算公式

对上面的公式解释如下:

Lung1 Lat1表示A点经纬度, Lung2 Lat2表示B点经纬度;
a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
6378.137为地球半径,单位为千米;
计算出来的结果单位为千米,若将半径改为米为单位则计算的结果单位为米。
计算精度与谷歌地图的距离精度差不多,相差范围在0.2米以下。

参考

链接:https://www.jianshu.com/p/ec220111d34b

0人点赞>
关注 收藏 改进 举报
0 条评论
排序方式 时间 投票
快来抢占一楼吧
请登录后发表评论
站长 @ 十七度
文章
345
粉丝
23
喜欢
169
收藏
22
排名 : 1
访问 : 75.51万
私信