方案1
通过 SQL 语句查询,数据库 : mysql
ER 图
查询语句:
SELECT *
FROM city c2
WHERE (lat > 28.10656 - 1
AND lat < 28.10656 + 1
AND lon > 114.4458 - 1
AND lon < 114.4458 + 1)
ORDER BY ACOS(SIN(28.10656 * 3.1415 / 180) * SIN(lat * 3.1415 / 180) + COS(28.10656 * 3.1415 / 180) * COS(lat * 3.1415 / 180) * COS(114.4458 * 3.1415 / 180 - lon * 3.1415 / 180)) * 6380 ASC
LIMIT 10
其中 lat 为 维度 ,lon 为 经度 , + 1 加一个经度或者维度,1经度大概等于 111 千米。
这句 sql 查询 该经纬度 111 km 范围内的地点
方案2
通过 Redis 的 geo
Redis Geo 在 3.2+ 以上版本才有。
通过 geroadd 添加位置数据,georadius 查询范围内的数据