Rails和ActiveRecord - 纬度和经度的最近点

时间:2014-01-26 14:25:04

标签: postgresql ruby-on-rails-4 geolocation rails-activerecord

我目前正在将一个PHP应用程序移植到Rails。我需要从给定的纬度和经度计算最近的场地。

在我的PHP应用程序中,我有这个MySQL查询(俱乐部是我正在谈论的场地):

SELECT cl.*, c.id, c.slug AS city_slug, 
(3959 * acos(cos(radians(:lat)) * cos(radians(cl.lat)) * cos(radians(cl.lng) - radians(:lng)) + sin(radians(:lat)) * sin(radians(cl.lat)))) 
AS distance 
FROM club cl, city c
WHERE cl.published = 1
AND c.id = cl.city_id
AND cl.id <> :club_id
AND cl.deleted = 0
ORDER BY distance 
LIMIT 0,10  

正如您所看到的,计算是在数据库层进行的,我希望它保持这样。

如何使用Rails,ActiveRecord和PostgreSQL实现这一目标?

1 个答案:

答案 0 :(得分:1)

这样做的一种可能性是使用Geokit gem:

https://github.com/geokit/geokit-rails

它们提供了一个范围,可以从坐标中找到最接近的记录:

  Club.closest(origin: [@lat,@long])

在文档中,您可以找到其他示例和选项。