在项目开发中经常会遇到根据经纬度查找附近的人、附近的店铺等。今天介绍MySQL根据经度和维度查询附近多少米范围内的地点,两种sql写法。
查询附近最近的前100个位置。
SELECT shop_name,lng,lat,
(POWER(MOD(ABS(lng - 经度),360),2) + POWER(ABS(lat - 纬度),2)) AS distance
FROM `user_location`
ORDER BY distance LIMIT 100
其中,lng
,lat
为数据库字段分别代表经度和纬度。
查询附近5000米以内的所有位置。
select ROUND(6378.138*2*ASIN(SQRT(POW(SIN((纬度*PI()/180-lat*PI()/180)/2),2)
+COS(纬度*PI()/180)*COS(lat*PI()/180)*POW(SIN((经度*PI()/180-lng*PI()/180)/2),2)))*1000)
AS distance FROM shop having distance <= 5000 order by distance asc
其中,lng
,lat
为数据库字段分别代表经度和纬度。