0

我有一个带有地理编码器 gem 的 rails 3 应用程序。当用户在我的网站上创建帐户时,他会给我他的地址。使用地理编码器,我将他的 lat 和 lng 存储在我的数据库中,这样我就可以将他放在谷歌地图中。

当用户进行搜索时,他必须找到离他最近的用户。

目前,我使用地理编码器计算半径以在其中找到用户:

bounds_calc = Geocoder::Calculations.bounding_box(center, radius, units: :km)
users = User.where('? < addresses.lat AND addresses.lat < ?', bounds_calc[0], bounds_calc[2]).where('? < addresses.lng AND addresses.lng < ?', bounds_calc[1], bounds_calc[3])

我想做的是users从最近到最远的排序。有简单的方法吗?

4

2 回答 2

0

假设您有一个地理编码的用户实例,您应该能够在地理编码的实例上使用 'nearbys' 方法。所以对于一个用户你应该能够写

user.nearbys(radius_in_miles)

其中 radius_in_miles 是以英里为单位的边界圆的半径。默认排序是从最近到最远。

于 2013-10-15T03:00:14.590 回答
0

我找到了如何使用 Geocoder 对我的用户数组进行排序:

results = results.sort_by { |x| Geocoder::Calculations.distance_between([x.latitude, x.longitude], [loc.first, loc.second]) }

在阅读 Peter Goldstein 的答案之前,我已经编写了代码,所以我不知道他的答案是否有效。我更喜欢我的解决方案,因为它可以在任何数组上调用,而不是在地理编码实例上调用另一个数组。

但是,我不知道哪种解决方案最快。

于 2013-10-15T08:03:33.443 回答