# GEOADD

在使用排序集表示的地理空间索引中添加一个或多个地理空间项

语法

GEOADD key [NX | XX] [CH] longitude latitude member [longitude
  latitude member ...]
  • 从以下版本可用:

    3.2.0

  • 时间复杂度:

    添加的每个项目的 O(log(N)),其中 N 是排序集中的元素数。

  • ACL 类别:

    @write, @geo, @slow

将指定的地理空间项(经度、纬度、名称)添加到指定键。数据作为排序集存储到键中,以便可以使用 GEOSEARCH 命令查询项目。

该命令采用标准格式 x,y 的参数,因此必须在纬度之前指定经度。可以索引的坐标有限制:非常靠近极点的区域不可索引。

EPSG:900913 / EPSG:3785 / OSGEO:41001 指定的确切限制如下:

  • 有效经度为 -180 到 180 度。
  • 有效纬度为 -85.05112878 到 85.05112878 度。

当用户尝试索引指定范围之外的坐标时,该命令将报告错误。

注意:没有GEODEL命令,因为您可以使用它 ZREM 来删除元素。Geo 索引结构只是一个排序集。

# GEOADD 选项

GEOADD还提供以下选项:

  • XX:只更新已经存在的元素。永远不要添加元素。
  • NX:不要更新已经存在的元素。总是添加新元素。
  • CH:将返回值从添加的新元素数修改为改变的元素总数(CH 是changed的缩写)。更改的元素是添加的新元素和已更新坐标的元素。因此,命令行中指定的与过去得分相同的元素不计算在内。注意:通常情况下, 的返回值GEOADD只计算添加的新元素的数量。

注意:XXNX选项是互斥的。

# 它是如何工作的?

填充排序集的方式是使用一种称为 Geohash 的技术。纬度和经度位交错形成一个唯一的 52 位整数。我们知道,一个有序集合双倍分数可以表示一个 52 位整数而不会丢失精度。

这种格式允许通过检查覆盖整个形状所需的 1+8 区域并丢弃它之外的元素来进行边界框和半径查询。通过计算所覆盖的框的范围来检查区域,从排序集分数的不太重要的部分中删除足够的位,并计算分数范围以在每个区域的排序集中查询。

# 它使用什么地球模型?

该模型假设地球是一个球体,因为它使用Haversine 公式来计算距离。当应用于地球时,这个公式只是一个近似值,它不是一个完美的球体。例如,社交网络和需要此类查询的类似应用程序使用时,引入的错误不是问题。但是,在最坏的情况下,错误可能高达 0.5%,因此您可能需要考虑其他系统用于错误关键应用程序。

# 返回

Integer,具体来说:

  • 当不使用可选参数时,添加到排序集中的元素数量(不包括分数更新)。
  • 如果CH指定了该选项,则为已更改(添加或更新)的元素数。

# 例子

redis> GEOADD Sicily 13.361389 38.115556 "Palermo" 15.087269 37.502669 "Catania"
(integer) 2
redis> GEODIST Sicily Palermo Catania
"166274.1516"
redis> GEORADIUS Sicily 15 37 100 km
1) "Catania"
redis> GEORADIUS Sicily 15 37 200 km
1) "Palermo"
2) "Catania"
redis> 

# 历史

  • 从 Redis 版本 6.2.0 开始:添加了CH,NXXX选项。

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM