据我了解您的问题,您想找到接近某个坐标的所有值吗?一种方法是使用 Lua 脚本,另一种方法是为每个近似的纬度/经度存储一个排序集(如果您事先知道所需的粒度)。例子:
zadd la.41 41.000333 pk-value
zadd lo.121 121.999999 pk-value
然后,当您需要找到接近某些坐标的东西(比如说(42.01, 122.03)
)时,您会执行以下操作:
lat = 42.01
lon = 122.03
lat_min, lat_mid, lat_max = round(lat - 1), round(lat), round(lat + 1)
lon_min, lon_mid, lon_max = round(lon - 1), round(lon), round(lon + 1)
因此,您将查看已排序的集合la.41
, la.42
, la.43
, lo.121
, lo.122
, lo.123
:
zinterstore close.${lat},${lon} 6 la.${lat_min}, la.${lat_mid}, la.${lat_max}, lo.${lon_min}, lo.${lon_mid}, lo.${lon_max}
现在,close.${lat},${lon}
应该包含靠近所提供坐标的每个终端的 ID。
显然,您可以以更大的粒度存储每个坐标,例如la.41.0
,lo.121.0
并仅查找关闭的终端。或者,您可以在客户端代码中进一步过滤结果。