redis特殊数据类型-Geospatial(地理位置)用法

一 Geospatial(地理位置)介绍

使用经纬度定位地理坐标并用一个有序集合zset保存,所以zset命令也可以使用
有效的经度从-180度到180度。
有效的纬度从-85.05112878度到85.05112878度。

二 Geospatial应用场景

        

通过georadius就可以完成 附近的人功能

withcoord:带上坐标

withdist:带上距离,单位与半径单位相同

COUNT n : 只显示前n个(按距离递增排序)

三,命令

geoadd key longitud(经度) latitude(纬度) member [..]	将具体经纬度的坐标存入一个有序集合
geopos key member [member..]	获取集合中的一个/多个成员坐标
geodist key member1 member2 [unit]	返回两个给定位置之间的距离。默认以米作为单位。
georadius key longitude latitude radius m|km|mi|ft [WITHCOORD][WITHDIST] [WITHHASH] [COUNT count]	以给定的经纬度为中心, 返回集合包含的位置元素当中, 与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER key member radius...	功能与GEORADIUS相同,只是中心位置不是具体的经纬度,而是使用结合中已有的成员作为中心点。
geohash key member1 [member2..]	返回一个或多个位置元素的Geohash表示。使用Geohash位置52点整数编码。

四,案例

1、geoadd 添加地理位置

# 规则:两级无法直接添加,我们一般会下载城市数据,直接通过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

2、geopos 获得当前坐标值

       

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"

3、geodist 返回两地之间的距离

单位:
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"

4、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"

5、geohash 返回元素的 Geohash

Geohash :将位置信息转化为 11个字符的Geohash字符串!
将二维的经纬度转换为一维的字符串,如果两个字符串越接近,那么则距离越近!


127.0.0.1:6379> geohash china:city beijing chongqi              
1) "wx4fbxxfke0" 
2) "wm5xzrybty0"

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

我附近的人? (获得所有附近的人的地址,定位!)通过半径来查询!
获得附近指定数量的人,如:200人
所有数据应该都录入:china:city

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 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"

7、Geospatial 的其他操作 -查看,删除

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

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"

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值