方案1

通过 SQL 语句查询,数据库 : mysql

ER 图

er.png

查询语句:

 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 查询范围内的数据

请参考:https://www.runoob.com/redis/redis-geo.html

Last modification:September 27th, 2020 at 01:47 pm
如果觉得我的文章对你有用,请随意赞赏