# 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
只计算添加的新元素的数量。
注意:XX和NX选项是互斥的。
# 它是如何工作的?
填充排序集的方式是使用一种称为 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
,NX
和XX
选项。
# 反馈
如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。
← EXPIRETIME GEODIST →