Rails比较纬度/经度

时间:2015-03-21 14:58:46

标签: ruby-on-rails

假设我有1000个具有纬度/经度值的对象。

我想要做的是发送用户的纬度/经度并返回最近的50个对象。我知道如何用一个值来做到这一点 - 如果我只有一个纬度,但位置似乎与两个值不同所以我不确定我是怎么做的。

实现这一目标的最佳方法是什么?随意指点教程或任何东西 - 我在轨道中使用位置非常新:)。

2 个答案:

答案 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和纬度。