Redis-Geospatial 地理位置

  • 想要实现朋友的定位,附近的人,打车距离计算这类的功能吗?Redis的Geo可以轻松帮你实现这个难题
  • Redis 的 Geo Redis3.2 版本就推出了! 这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
  • 我们可以查询一些测试数据,各地经纬度查询:http://www.jsons.cn/lngcodeinfo/0706D99C19A781A3/
  • Geo只有六个命令:
  1. GEOADD
  2. GEODIST
  3. GEOHASH
  4. GEOPOS
  5. GEORADIUS
  6. GEORADIUSBYMEMBER
  • 官方文档:https://www.redis.net.cn/order/3685.html

getadd

# getadd 添加地理位置 
# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入! 
# 有效的经度从-180度到180度。 
# 有效的纬度从-85.05112878度到85.05112878度。 
# 当坐标位置超出上述指定范围时,该命令将会返回一个错误。 
127.0.0.1:6379> geoadd china:city 39.90 116.40 beijin 
(error) ERR invalid longitude,latitude pair 39.900000,116.400000 
# 参数 key 值() 
127.0.0.1:6379> geoadd china:city 116.40 39.90 beijing 
(integer) 1 
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai 
(integer) 1 
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqi 114.05 22.52 shengzhen 
(integer) 2 
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian 
(integer) 2

getpos

获得当前定位:一定是一个坐标值!

127.0.0.1:6379> GEOPOS china:city beijing # 获取指定的城市的经度和纬度! 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
127.0.0.1:6379> GEOPOS china:city beijing chongqi 
1) 1) "116.39999896287918091" 
   2) "39.90000009167092543" 
2) 1) "106.49999767541885376" 
   2) "29.52999957900659211"

getdist

两人之间的距离!

单位:

  • m 表示单位为米。
  • km 表示单位为千米。
  • mi 表示单位为英里。
  • ft 表示单位为英尺。
127.0.0.1:6379> GEODIST china:city beijing shanghai km # 查看上海到北京的直线距离 
"1067.3788" 
127.0.0.1:6379> GEODIST china:city beijing chongqi km # 查看重庆到北京的直线距离 
"1464.0708"

georadius 以给定的经纬度为中心, 找出某一半径内的元素

 

127.0.0.1:6379> GEORADIUS china:city 110 30 1000 km # 以110,30 这个经纬度为中心,寻 找方圆1000km内的城市 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km 
1) "chongqi" 
2) "xian"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist # 显示到中间距离的位置 
1) 1) "chongqi" 
   2) "341.9374" 
2) 1) "xian" 
   2) "483.8340"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withcoord # 显示他人的定位信息 
1) 1) "chongqi" 
   2) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) 1) "108.96000176668167114" 
      2) "34.25999964418929977"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 1 # 筛选出指定的结果! 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376"
      2) "29.52999957900659211"
127.0.0.1:6379> GEORADIUS china:city 110 30 500 km withdist withcoord count 2 
1) 1) "chongqi" 
   2) "341.9374" 
   3) 1) "106.49999767541885376" 
      2) "29.52999957900659211" 
2) 1) "xian" 
   2) "483.8340" 
   3) 1) "108.96000176668167114" 
      2) "34.25999964418929977"

GEORADIUSBYMEMBER

 

# 找出位于指定元素周围的其他元素! 
127.0.0.1:6379> GEORADIUSBYMEMBER china:city beijing 1000 km 
1) "beijing" 
2) "xian" 
127.0.0.1:6379> GEORADIUSBYMEMBER china:city shanghai 400 km 
1) "hangzhou" 
2) "shanghai"

GEOHASH 命令 - 返回一个或多个位置元素的 Geohash 表示

 

该命令将返回11个字符的Geohash字符串!

# 将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近! 
127.0.0.1:6379> geohash china:city beijing chongqi 
1) "wx4fbxxfke0" 
2) "wm5xzrybty0"

GEO 底层的实现原理其实就是 Zset!我们可以使用Zset命令来操作geo!

 

127.0.0.1:6379> ZRANGE china:city 0 -1 # 查看地图中全部的元素 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
5) "shanghai" 
6) "beijing" 
127.0.0.1:6379> zrem china:city beijing # 移除指定元素! 
(integer) 1 
127.0.0.1:6379> ZRANGE china:city 0 -1 
1) "chongqi" 
2) "xian" 
3) "shengzhen" 
4) "hangzhou" 
5) "shanghai"

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值