GEORADIUS key longitude latitude radius m|km|ft|mi [WITHCOORD] [WITHDIST] [WITHHASH] [ASC|DESC] [COUNT count]
key longitude latitude
: 是前置条件,给定的经纬度信息,以及我要搜索的keyradius
:距离半径,指的搜索的范围m|km|ft|mi
: 为给定的距离单位,有 米、千米、英尺、英里4种[WITHCOORD] [WITHDIST] [WITHHASH]
: 为返回的信息类型- WITHDIST: 在返回位置元素的同时,将位置元素与中心之间的距离也一并返回 。距离的单位和用户给定的范围单位保持一致 。
- WITHCOORD: 将位置元素的经度和维度也一并返回 。
- WITHHASH: 以 52 位有符号整数的形式 , 返回位置元素经过原始 geohash 编码的有序集合分值 。这个选项主要用于底层应用或者调试,实际中的作用并不大 。
ASC|DESC
:可选参数 , 按照距离升序或者降序排列,即 由近到远(asc) 还是 由远到近(desc)COUNT count
:取数数量 , 避免获取到太多的信息,返回太多信息
redis> GEORADIUS food:location 115.791331 39.512000310 km WITHDISTASC COUNT 100"东北饺子馆"3.3421"兰州拉面"9.4571
下图的绿色区域在固定半径(红圈)中搜索到了特定的几个目标位置:1、2、5、9、10 。文章插图
3.5GEORADIUSBYMEMBER 按照位置名称获取与
GEORADIUS
的区别是 GEORADIUSBYMEMBER
的中心点是由给定的位置元素决定的,而不是像 GEORADIUS 那样 , 通过传入经度和纬度来决定中心点 。所以如下,已知兰州拉面和东北饺子馆的距离是6.1公里,根据兰州拉面获取10公里范围内的距离的美食店 , 可以获取到东北饺子馆和自己的位置:redis> GEORADIUSBYMEMBER food:location "兰州拉面" 100 km WITHDIST"东北饺子馆"6.09127"兰州拉面"0
3.6 ZREM 删除关闭的店铺redis>ZREM food:location "兰州拉面"(integer) 1
4 总结- GEO 使用了 Sorted Set 集合类型,并通过 GeoHash 编码方法实现了经纬度到 Sorted Set 中元素权重分数的转换 , 涵盖两个关键能力就是就是对二维地图做区间划分,以及对区间进行编码 。
- 具体可应用的场景如下:
- 计算用户的精准的地理坐标位置
- 统计用户定点坐标一定范围内的其他地理位置,并计算出距离
- 对一定范围内的地理位置进行排序,并由近到远筛选
- 真实的地图数据存储,场景比这复杂的多,数据量会达到惊人的巨量,所以还是会使用分治原理进行拆分,细化到一个市甚至一个区,来提高存储和检索的效率 。
推荐阅读
- Ubuntu 下安装 redis 并且设置远程登陆和密码
- RTX40系列价格_RTX40系列显卡价格
- [Android开发学iOS系列] Auto Layout
- CH58X服务修改
- 0 二 C# 语法分析器LR 语法分析
- iphone13系列价格_iphone13全系列价格
- 百雀羚帧颜霜孕妇可以用吗_百雀羚帧颜系列孕妇可以用吗
- vivoT1值得买吗_vivoT1值不值得买
- 六 Selenium4+Python3系列 - Selenium的三种等待,强制等待、隐式等待、显式等待
- flutter 系列之:flutter 中的幽灵offstage