redis的Geospatial地理位置类型

朋友的定位,附近的人,打车距离计算?
可以使用redis的geo类型,geo类型在redis3.2版本就推出了!这个功能可以推算地理位置的信息,两地之间的距离,方圆几里的人!
城市经度纬度查询:http://www.jsons.cn/lngcode/
官方文档:https://www.redis.net.cn/order/3685.html

官方文档中,geo只有6个命令

  • GEOADD 将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
  • GEOPOS 从key里返回所有给定位置元素的位置(经度和纬度)
  • GEORADIUS 以给定的经纬度为中心, 找出某一半径内的元素
  • GEODIST 返回两个给定位置之间的距离
  • GEORADIUSBYMEMBER 找出位于指定范围内的元素,中心点是由给定的位置元素决定
  • GEOHASH 返回一个或多个位置元素的geohash字符串

在这里插入图片描述

#################################################################################################
#geoadd 添加地理位置
#规则:两级无法直接添加,我们一般会下载城市数据,直接通过java程序一次性导入!
#有效的经度从-180度到180度。
#有效的纬度从-85.05112878度到85.05112878度。
#当坐标位置超出上述指定范围时,该命令将会返回一个错误。
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 shenzhen
(integer) 2
127.0.0.1:6379> geoadd china:city 120.16 30.24 hangzhou 108.96 34.26 xian
(integer) 2
#################################################################################################
# 获取当前定位:一定是一个坐标值
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 shanghai
1) 1) "116.39999896287918091"
   2) "39.90000009167092543"
2) 1) "121.47000163793563843"
   2) "31.22999903975783553"
#################################################################################################
#两人之间的距离
#单位
#m 表示单位为米。
#km 表示单位为千米。
#mi 表示单位为英里
#ft 表示单位为英尺。
#如果用户没有显式地指定单位参数, 那么 GEODIST 默认使用米作为单位。
127.0.0.1:6379> geodist china:city beijing shanghai km #查看上海到北京的直线距离,单位km
"1067.3788"
#################################################################################################
#查找附近的人(需要获得所有附近的人的地址,定位!)通过半径来查询
#获取指定数量的人
#前提:所有数据应该都录入:china:city
127.0.0.1:6379> georadius china:city 110 30 1000 km #以110,30这个经纬度为中心,寻找方圆1000km内的城市
1) "chongqi"
2) "xian"
3) "shenzhen"
4) "hangzhou"
127.0.0.1:6379> georadius china:city 110 30 500 km  #以110,30这个经纬度为中心,寻找方圆500km内的城市
1) "chongqi"
2) "xian"
127.0.0.1:6379> georadius china:city 110 30 500 km withdist #以110,30这个经纬度为中心,寻找方圆500km内的城市,顺带输出离中心距离(110,30)的位置
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  #以110,30这个经纬度为中心,寻找方圆500km内的城市,顺带输出他人的定位信息(主要是经纬度)
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 withcoord count 1  #以110,30这个经纬度为中心,寻找方圆500km内的城市,筛选出指定数量的数据
1) 1) "chongqi"
   2) 1) "106.49999767541885376"
      2) "29.52999957900659211"
#################################################################################################
#找出位于指定元素周围的其他元素
127.0.0.1:6379> georadiusbymember china:city beijing 1000 km  #查找北京附近1000km的城市
1) "beijing"
2) "xian"
#################################################################################################
#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) "shenzhen"
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) "shenzhen"
4) "hangzhou"
5) "shanghai"

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值