假设我有1000个具有纬度/经度值的对象。
我想要做的是发送用户的纬度/经度并返回最近的50个对象。我知道如何用一个值来做到这一点 - 如果我只有一个纬度,但位置似乎与两个值不同所以我不确定我是怎么做的。
实现这一目标的最佳方法是什么?随意指点教程或任何东西 - 我在轨道中使用位置非常新:)。
答案 0 :(得分:1)
关于数据表示的原始问题中没有任何细节,但我们假设您在表单[lat, long]
中列出了纬度/经度值列表locations
。让我们进一步假设你有一个度量方法来计算它们之间的距离,dist(lat, long)
。
然后,这将收集所有位置对组合及其各自的距离作为三元组的集合,[dist, p1, p2]
:
location.combination(2).collect { |p| [dist(p[0], p[1]), p[0], p[1]] }
然后你可以按距离排序,然后选择前50名:
location.combination(2).collect { |p| [dist(p[0], p[1]), p[0], p[1]] }.sort.first(50)
你必须看看它是否适用于1,000个对象,因为这将最初创建999,000个组合,我不知道Ruby数组的容量是什么。
答案 1 :(得分:1)
这是一个名为nearest neighbor problem的经典计算机科学问题。有关两种常用解决方案,请参阅此wikipedia article。
本文描述了x,y坐标的点。您可以将经度替换为经度x和纬度。