You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改MySQL经纬度范围查询,将距离单位从千米改为米?

解决MySQL经纬度距离查询的米单位筛选问题

这问题其实很好解决,先给你捋清楚原查询的逻辑:公式里的6371是地球平均半径,单位是千米,所以计算出来的distance结果自然也是千米单位,这就是为啥原来HAVING distance <=50代表50千米。要改成米单位的筛选,我们只需要调整公式让计算结果变成米,就能直接在HAVING里填米数了,有两种简单的实现方式:

方法1:替换地球半径为米单位

把原公式里的6371(千米)换成6371000(米),这样整个计算出的distance就是米单位,直接在HAVING里写你需要的米数即可:

SELECT 
  id, 
  location_name, 
  (6371000 * acos( cos( radians(@myLat) ) * cos( radians(latitude) ) * cos( radians(longitude) - radians(@myLng)) + sin(radians(@myLat)) * sin(radians(latitude)) )) as distance 
FROM sample.locations 
HAVING distance <= 50 -- 这里的50就是50米

方法2:将计算结果乘以1000转成米

如果不想改动地球半径的数值,也可以把原查询得到的千米结果直接乘以1000转换成米,效果完全一致:

SELECT 
  id, 
  location_name, 
  (6371 * acos( cos( radians(@myLat) ) * cos( radians(latitude) ) * cos( radians(longitude) - radians(@myLng)) + sin(radians(@myLat)) * sin(radians(latitude)) )) * 1000 as distance 
FROM sample.locations 
HAVING distance <= 50 -- 同样,这里的50代表50米

小提醒

这两种方法都完美满足你的需求——不需要把米转换成千米代入,直接在HAVING里写米级的数值就行。如果你的筛选范围很小(比如几百米内),还可以考虑用平面近似公式优化查询速度,但球面余弦公式的精度已经足够大部分场景使用啦。

内容的提问来源于stack exchange,提问作者Esco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:52