GEOSEARCH

用法
GEOSEARCH key [ FROMMEMBER member | FROMLONLAT longitude latitude ] 〈 BYRADIUS radius 〈 m | km | ft | mi 〉 | BYBOX width height 〈 m | km | ft | mi 〉 | BYPOLYGON num-vertices longitude latitude [ longitude latitude ... ] 〉 [ ASC | DESC ] [ COUNT count [ ANY ] ] [ WITHCOORD ] [ WITHDIST ] [ WITHHASH ]
复杂度
O(N+log(M)),其中 N 是围绕过滤形状的网格对齐边界框区域中的元素数量,M 是形状内的项目数量
6.2.0
ACL 类别
@geo, @read, @slow

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

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

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

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

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

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

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

  • WITHDIST:同时返回返回项目与指定中心点的距离。距离以与半径或高度和宽度参数指定的相同单位返回。
  • WITHCOORD:同时返回匹配项的经度和纬度。
  • WITHHASH:同时返回项目的原始 Geohash 编码有序集合分数,形式为 52 位无符号整数。这仅适用于底层技巧或调试,对于普通用户而言兴趣不大。

默认情况下,匹配项不按顺序返回。要对其进行排序,请使用以下两个选项之一

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

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

示例

127.0.0.1:6379> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
127.0.0.1:6379> GEOADD Sicily 12.758489 38.788135 "edge1"   17.241510 38.788135 "edge2" 
(integer) 2
127.0.0.1:6379> GEOSEARCH Sicily FROMLONLAT 15 37 BYRADIUS 200 km ASC
1) "Catania"
2) "Palermo"
127.0.0.1:6379> GEOSEARCH Sicily FROMLONLAT 15 37 BYBOX 400 400 km ASC WITHCOORD WITHDIST
1) 1) "Catania"
   2) "56.4413"
   3) 1) "15.08726745843887329"
      2) "37.50266842333162032"
2) 1) "Palermo"
   2) "190.4424"
   3) 1) "13.36138933897018433"
      2) "38.11555639549629859"
3) 1) "edge2"
   2) "279.7403"
   3) 1) "17.24151045083999634"
      2) "38.78813451624225195"
4) 1) "edge1"
   2) "279.7405"
   3) 1) "12.7584877610206604"
      2) "38.78813451624225195"

RESP2/RESP3 回复

以下之一

  • 如果未指定 WITH* 选项,则返回匹配成员名称的 数组回复

  • 如果指定了 WITHCOORDWITHDISTWITHHASH 选项,则命令返回一个 数组的数组回复,其中每个子数组代表一个单独的项目

    • 距中心的距离,以浮点数表示,单位与半径中指定的单位相同。

    • Geohash 整数。

    • 坐标为两项 x,y 数组(经度,纬度)。

历史

版本 变更
7.0.0

增加了对大写单位名称的支持。

9.0.0

增加了对 BYPOLYGON 选项的支持。