我想实现一项服务,根据用户的地理坐标,可以实时检测两个用户是否在同一位置。
为了实时执行此操作并进行扩展,我似乎应该使用像 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/