redis - 如何使用 Redis 和地理邻近搜索在同一位置找到两个用户?

标签 redis geospatial geo geohashing

我想实现一项服务,根据用户的地理坐标,可以实时检测两个用户是否在同一位置。

为了实时执行此操作并进行扩展,我似乎应该使用像 Redis 这样的分布式内存数据存储。我研究过使用地理哈希,但问题是彼此靠近的点可能并不总是共享相同的哈希前缀。 geohashing 可能有点矫枉过正,因为我想知道两个用户是否足够近,他们站在一起。

当然,简单的解决方案只是测试地理坐标对是否落在彼此的小距离内。但是 AFAIK、Redis 和其他内存数据存储没有地理空间索引来支持这种查找。

实现它的最佳方法是什么?

最佳答案

此功能包含在 Redis 3.2+ 中.

但对于旧版本,问题仍然存在。我已经采纳了尹启文的回答并为 Node 创建了一个模块,您可以通过检查代码来了解它是如何使用 Redis 的。他的指示是完美的,我能够按照他们的指示获得很好的结果。 https://github.com/arjunmehta/node-georedis

相同的算法本质上是用于 native 命令的算法。

它非常快,并且避免了任何类型的交叉/半正弦类型的操作。尹启文的方法最酷的地方(我认为)是算法中计算最密集的部分可以分发给客户端(而不是全部发生在数据库或服务器上)。

它不是 100% 精确并且使用预配置的距离步长,但对于大多数应用程序,您不需要我想象的精确度。

我在GIS stack exchange也转述了尹启文的文章.

抱歉所有链接。 :P

关于redis - 如何使用 Redis 和地理邻近搜索在同一位置找到两个用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107614/

相关文章:

redis - 在 RediSearch 中搜索多个索引

javascript - 如何通过函数更新全局变量

mysql 在 linestring mbrcontains 中使用 lat long 列

javascript - Google Maps Circle Overlay 和 Vincenty Formula

geolocation - GeoJSON 坐标?

r - 计算 R 中具有纬度、经度和高程的两点之间的距离

javascript - 看不见的向量?组合 d3.tile()、d3.zoom() 和 TopoJSON 向量

nosql - 为具有多个值的键建议一个数据库,高度可扩展

php - Symfony 使用 Redis 作为默认缓存编译容器

python - PyMongo/MongoDB - 起点和终点 LatLon 的地理空间查询