NoSQL和Redis基础知识day03---geospatial地理位置



参考网站

https://www.redis.net.cn/order/3688.html

参考学习视频

https://www.bilibili.com/video/BV1S54y1R7SB?p=18

geo底层原理

  geo 底层的实现原理是zset,可以使用zset命令操作geo。
  sorted set使用一种称为Geohash的技术进行填充。经度和纬度的位是交错的,以形成一个独特的52位整数. 我们知道,一个sorted set 的double score可以代表一个52位的整数,而不会失去精度。这种格式允许半径查询检查的1 + 8个领域需要覆盖整个半径,并丢弃元素以外的半径。通过计算该区域的范围,通过计算所涵盖的范围,从不太重要的部分的排序集的得分,并计算得分范围为每个区域的sorted set中的查询。

GEOADD 命令

  将指定的地理空间位置(经度、纬度、名称)添加到指定的key中。

规则:

  1. 两级无法直接添加,我们一般会下载城市数据,直接通过程序一次性导入!
  2. 有效的经度从-180度到180度。
  3. 有效的纬度从-85.05112878度到85.05112878度。
  4. 当坐标位置超出上述指定范围时,该命令将会返回一个错误。

示例:

# 参数 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	chongqing 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		

getpos

  获得当前的定位坐标值,从key里返回所有给定位置元素的位置(经度和纬度)

示例

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 chongqing 
1) 1) "116.39999896287918091"
2) "39.90000009167092543"
2) 1) "106.49999767541885376"
2) "29.52999957900659211"

GEODIST

  两地之间的距离,返回两个给定位置之间的距离

单位:

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

georadius

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

GEORADIUS	china:city	110	30	500 km  #以(110,30)为中心,500km为半径查询添加到集合中的城市

一些选项:

<font face ='楷体'> &emsp;WITHDIST: 在返回位置元素的同时, 将位置元素与中心之间的距离也一并返回。 距离的单位和用户给定的范围单位保持一致。

  WITHCOORD: 将位置元素的经度和维度也一并返回。
  WITHHASH: 以 52 位有符号整数的形式, 返回位置元素经过原始 geohash 编码的有序集合分值。 这个选项主要用于底层应用或者调试, 实际中的作用并不大。

 GEORADIUS	china:city	110	30	500 km withdist	# 显示时带上到中间距离的位置
GEORADIUS china:city 110 30 500 km withcoord	# 显示时带上城市的定位信息
 GEORADIUS china:city 110 30 500 km withdist withcoord count 1	#
筛选出指定个数的结果!

GEORADIUSBYMEMBER

 找出位于指定范围内的元素,中心点是由给定的位置元素决定。

 GEORADIUSBYMEMBER  china:city beijing 1000 km  # 以北京为中心,1000km以内的城市

GEOHASH

 返回一个或多个位置元素的 Geohash 表示。

geohash china:city beijing chongqing

注意:
 将二维的经纬度转换为一维的geohash字符串,如果两个字符串越接近,那么则距离越近!

地图集的一些其他操作

ZRANGE china:city 0 -1	# 查看地图集中全部的元素

zrem china:city beijing	# 移除指定元素!

基础总结列表

NoSQL和Redis学习和入门day01
NoSQL和Redis基础总结day02—五大常用数据类型和持久化
NoSQL和Redis基础知识day03—geospatial地理位置
NoSQL和Redis基础总结day04— 事务 和 发布和订阅机制
NoSQL和Redis基础总结day05— 主从复制,哨兵模式,Redis缓存穿透和雪崩





如果感觉有用的话,感谢点赞!👍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值