GEOSEARCH

语法
GEOSEARCH key <FROMMEMBER member | FROMLONLAT longitude latitude>
  <BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM |
  FT | MI>> [ASC | DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST]
  [WITHHASH]
可用版本
Redis 开源版 6.2.0
时间复杂度
O(N+log(M)),其中 N 是过滤器提供的形状周围网格对齐边界框区域中的元素数量,M 是形状内部的项目数量
ACL 类别
@read, @geo, @slow,

返回使用 GEOADD 填充地理空间信息的有序集合成员,这些成员位于给定形状指定的区域边界内。此命令扩展了 GEORADIUS 命令,因此除了在圆形区域内搜索外,它还支持在矩形区域内搜索。

此命令应替代已弃用的 GEORADIUSGEORADIUSBYMEMBER 命令。

查询中心点由以下强制选项之一提供

  • FROMMEMBER: 使用有序集合中给定现有 <member> 的位置。
  • FROMLONLAT: 使用给定的 <longitude><latitude> 位置。

查询形状由以下强制选项之一提供

  • BYRADIUS: 类似于 GEORADIUS,根据给定的 <radius> 在圆形区域内搜索。
  • BYBOX: 在由 <height><width> 确定的轴对齐矩形内搜索。

命令可以使用以下选项选择性地返回额外信息

  • WITHDIST: 还返回匹配项与指定中心点的距离。距离以与半径或高度和宽度参数相同的单位返回。
  • WITHCOORD: 还返回匹配项的经度和纬度。
  • WITHHASH: 还返回以 52 位无符号整数形式表示的原始 geohash 编码的有序集合分数。这仅对低级技巧或调试有用,对普通用户意义不大。

匹配项默认按未排序的方式返回。要对它们进行排序,请使用以下两个选项之一

  • ASC: 按从近到远的顺序对返回项进行排序,相对于中心点。
  • DESC: 按从远到近的顺序对返回项进行排序,相对于中心点。

默认返回所有匹配项。要将结果限制为前 N 个匹配项,请使用 COUNT <count> 选项。使用 ANY 选项时,命令会在找到足够多的匹配项后立即返回。这意味着返回的结果可能不是离指定点最近的结果,但服务器生成它们所需的开销会显著减少。未提供 ANY 时,命令将执行与指定区域内匹配项数量成比例的操作并对其进行排序,因此即使只返回少量结果,使用非常小的 COUNT 选项查询非常大的区域也可能很慢。

示例

GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania" GEOADD Sicily 12.758489 38.788135 "edge1" 17.241510 38.788135 "edge2" GEOSEARCH Sicily FROMLONLAT 15 37 BYRADIUS 200 km ASC GEOSEARCH Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC WITHCOORD WITHDIST

RESP2/RESP3 回复

以下之一

  • 如果未指定 WITH* 选项,则返回匹配成员名称的数组回复
  • 如果指定了 WITHCOORDWITHDISTWITHHASH 选项,命令将返回数组的数组回复,其中每个子数组代表一个单独的项
    • 匹配项与中心点的距离,以浮点数表示,单位与半径中指定的单位相同。
    • Geohash 整数。
    • 坐标以包含两个项目 x,y 的数组(经度、纬度)形式返回。

历史

  • 从 Redis 7.0.0 版本开始:添加了对大写单位名称的支持。
评价本页
回到顶部 ↑