源码地址
Geo
Redis 在 3.2 版本中增加了 GEO 类型用于存储和查询地理位置。
GEOADD:添加地理位置
GEOPOS:查询位置信息
GEODIST:距离统计
GEORADIUS:以给定的经纬度为中心, 找出某一半径内的元素
GEORADIUSBYMEMBER 找出位于指定范围内的元素,中心点是由给定的位置元素决定
GEOHASH:返回一个或多个位置元素HASH
关于删除,使用集合函数中的zrem,geo本质存在一个集合中。
演示效果
1 | // 1.杭州市 蒋村商务中心 120.075338,30.294845 |
- 使用redis-cli作为客户端测试工具 geo 集合key = hz
GEOADD
- 添加坐标信息
1 | 127.0.0.1:6379> geoadd hz 120.075338 30.294845 1 |
GEOPOS
- 从键里面返回所有给定位置元素的位置(经度和纬度)
1 | 127.0.0.1:6379> geopos hz 1 2 |
GEODIST
- 返回两个给定位置之间的距离。如果两个位置之间的其中一个不存在, 那么命令返回空值。
- 指定单位的参数
unit
必须是以下单位的其中一个m
表示单位为米。km
表示单位为千米。mi
表示单位为英里。ft
表示单位为英尺。
1 | 127.0.0.1:6379> geodist hz 1 2 m |
- 拿百度地图的尺子测试下。差了6米问题不大。精度不高的业务够用了。
GEORADIUS
- 以给定的经纬度为中心, 返回键包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
- 范围可以使用以下其中一个单位:
m
表示单位为米。km
表示单位为千米。mi
表示单位为英里。ft
表示单位为英尺。
- 在给定以下可选项时, 命令会返回额外的信息:
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。WITHCOORD
: 将位置元素的经度和维度也一并返回。WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
- 默认命令的排序
ASC
: 根据中心的位置, 按照从近到远的方式返回位置元素。DESC
: 根据中心的位置, 按照从远到近的方式返回位置元素。
1 | 127.0.0.1:6379> georadius hz 120.075338 30.294845 500 m |
- 一般用来做附近的人(建筑等等)
GEORADIUSBYMEMBER
找出位于指定范围内的元素,参数是元素而不是坐标。
范围可以使用以下其中一个单位:
m
表示单位为米。km
表示单位为千米。mi
表示单位为英里。ft
表示单位为英尺。
在给定以下可选项时, 命令会返回额外的信息:
WITHDIST
: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。WITHCOORD
: 将位置元素的经度和维度也一并返回。WITHHASH
: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。
默认命令的排序
ASC
: 根据中心的位置, 按照从近到远的方式返回位置元素。DESC
: 根据中心的位置, 按照从远到近的方式返回位置元素。
1 | 127.0.0.1:6379> GEORADIUSBYMEMBER hz 1 500 m |
- 一般用来做附近的人(建筑等等)
GEOHASH
1 | 127.0.0.1:6379> GEOHASH hz 1 2 3 |
删除坐标
- 关于删除,使用集合函数中的zrem,geo本质存在一个集合中。
1 | 127.0.0.1:6379> GEORADIUSBYMEMBER hz 1 500 m |
代码演示
- spring boot 2.4.5
- gson
配置项目
1 |
|
单元测试代码
1 |
|
- GEORADIUSBYMEMBER 方法过期了,这里就不演示了。