MySQL根据经纬度计算距离并排序

参数说明:

Lat:数据库中的纬度字段名
Lon:数据库中的精度字段名
uLat:用户传递的纬度
uLon:用户传递的经度

结果单位:

千米(KM)
注意:如需要“米”只需要把最后的“/1000”删除即可

SQL语句:

方法一:

SELECT ,ROUND(6378.1382ASIN(SQRT(POW(SIN((LatPI()/180-uLatPI()/180)/2),2)+COS(LatPI()/180)COS(uLatPI()/180)POW(SIN((LonPI()/180-uLon*PI()/180)/2),2)))*1000)/1000 AS juli FROM table_name ORDER BY juli ASC

方法二:

SELECT *,(st_distance (point (Lon,Lat),point (uLon,uLat))*111195/1000 )as juli FROM table_name ORDER BY juli ASC LIMIT 0,10

例如:

方法一:

SELECT shop_id,ROUND(6378.1382ASIN(SQRT(POW(SIN((LatPI()/180-31.166349PI()/180)/2),2)+COS(LatPI()/180)COS(31.166349PI()/180)POW(SIN((LonPI()/180-121.458495PI()/180)/2),2)))*1000)/1000 AS juli FROM shop ORDER BY juli ASC

方法二:

SELECT shop_id,(st_distance (point (Lon,Lat),point (121.458495,31.166349))*111195/1000 )as juli FROM shop ORDER BY juli ASC LIMIT 0,10

结果:

方法一:
在这里插入图片描述
方法二:
在这里插入图片描述

总结:

经通过软件对比第一种方法较为准确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值