我想实现一个服务,在给定用户的地理坐标的情况下,可以实时检测两个用户是否处于非常相同的位置。
为了实现实时和可伸缩性,我似乎应该使用分布式内存中的数据存储,比如Redis。我使用geohashing进行了研究,但问题是彼此接近的点可能并不总是共享相同的散列前缀。而地理散列可能是过度杀伤力,因为我感兴趣的是找出两个用户是否足够接近他们站在一起的地方。
当然,简单的解决方案就是测试成对的地理坐标是否落在彼此之间的小距离内。但是AFAIK,Redis和其他内存中的数据存储没有支持这种查找的地理空间索引。
实现这一点的最佳方式是什么?
发布于 2014-04-10 09:57:00
此功能已嵌入到Redis 3.2+中。
但对于较旧的版本,这个问题仍然存在。我采纳了尹启文的回答,为Node创建了一个模块,您可以通过检查代码来了解它是如何使用Redis的。他的指导非常完美,我能够按照他的指示去做,取得了很好的效果。https://github.com/arjunmehta/node-georedis
本机命令基本上使用相同的算法。
它非常快,并且避免了任何类型的交集/半正弦类型的操作。关于尹启文的方法,最酷的事情(我认为)是,算法中计算最密集的部分可以分发给客户端(而不是全部发生在数据库或服务器上)。
它不是100%精确的,并且使用预先配置的距离步长,但对于大多数应用程序,我想你不需要精确的精度。
我还解释了尹启文在GIS stack exchange上的文章。
很抱歉有这么多的联系。:P
发布于 2014-02-27 21:51:39
通常,这可以通过GeoHash和Redis的排序集来完成。在讨论如何在redis上实现空间索引服务之前,我写了一个设计。
发布于 2014-07-22 08:03:04
https://stackoverflow.com/questions/19107614
复制相似问题