Redis 地理信息GEO

Redis GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增。

Redis GEO 操作方法有:

  • geoadd:添加地理位置的坐标。
  • geopos:获取地理位置的坐标。
  • geodist:计算两个位置之间的距离。
  • georadius:根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。
  • georadiusbymember:根据储存在位置集合里面的某个地点获取指定范围内的地理位置集合。
  • geohash:返回一个或多个位置对象的 geohash 值。

GEOADD 添加成员的经纬度信息

127.0.0.1:6379> geoadd citys 125.19 43.54 changchun
(integer) 1
127.0.0.1:6379> geoadd citys 128.13 43.22 dunhua

geodist 计算成员间距离

geodist 用于返回两个给定位置之间的距离。

geodist 语法格式如下:

GEODIST key member1 member2 [m|km|ft|mi]

member1 member2 为两个地理位置。

最后一个距离单位参数说明:

  • m :米,默认单位。
  • km :千米。
  • mi :英里。
  • ft :英尺。

GEORADIUS 基于经纬度坐标范围查询

基于经纬度坐标的范围查询

检索以某个经纬度为圆心,在特定半径的圆形范围内的成员。

查询演示,以经纬度125,42为圆心,100公里范围内的成员:

127.0.0.1:6379> geoadd citys 125.56 41.43 tonghua
(integer) 1
127.0.0.1:6379> geoadd citys 125.40 42.32 meihekou
(integer) 1
127.0.0.1:6379> geoadd citys 125.09 42.54 liaoyuan
(integer) 1
127.0.0.1:6379> GEORADIUS citys 125 42 100 km
1) "tonghua"
2) "meihekou"
3) "liaoyuan"

参考链接:Redis中的GEO类型

GEORADIUSBYMEMBER 基于成员位置范围查询

检索以某个成员为圆心,在特定半径的圆形范围内的成员。功能与 GEORADIUS 类似,只不过圆心为某个成员位置。

查询演示,以经纬度 changchun 为圆心,100公里范围内的成员:


GEOPOS 获取成员经纬度

127.0.0.1:6379> geoadd citys 125.19 43.54 changchun
(integer) 1
127.0.0.1:6379> GEOPOS citys changchun
1) 1) "125.19000023603439331"
   2) "43.53999908614541425"