我有大约1000套地理坐标(纬度,长度)。 给定一个坐标,我想找到该集合中最接近的坐标。我的方法是测量距离,但是对于服务器进行所有数学计算,每秒数百个请求可能有点粗糙。
对此最好的解决方案是什么?
谢谢
答案 0 :(得分:4)
答案 1 :(得分:2)
您可以使用此库sphere-knn
,或查看类似PostGIS
的内容。
答案 2 :(得分:1)
为什么不从集合中选择潜在的最近点(例如,设置一个阈值,比如0.1并过滤该集合,以便在目标点的两个轴上都有+ -0.1的任何点)。然后在这个集合上进行实际计算。
如果没有一个在第一个范围内,只需将它放大(0,2)并重复(0.3,0.4 ......)直到你得到一个匹配。显然你会调整阈值,以便最符合你可能的结果。
(我假设时间调查位是实际距离计算,所以我们的想法是限制计算次数。)
答案 3 :(得分:1)
您的方法已经及时O(n)
。它在算法上非常快,而且实现起来相当简单。
如果这还不够,你应该考虑看看R-trees。 R树背后的想法大致转述如下:
您可以立即看到好处:
O(n)
时间。下限平均可以是O(log n)
。主要的改进主要在于预处理步骤(“免费”,因为它是一次性成本)以及所需的比较数量减少。
只需购买另一台服务器,并使用负载均衡器(如Haproxy)分发请求和元素。
服务器相当便宜,特别是如果它们对您的业务至关重要,并且如果您想要快速,那么这是一种简单的扩展方式。