0

我目前正在將一個PHP應用程序移植到Rails。我需要從給定的經度和緯度計算最近的場地。Rails和ActiveRecord - 經緯度最近點

在我的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實現這一目標?

+0

最簡單的是Activerecord的find_by_sql方法,但是相關模型上的任何遷移都不會與原始sql作爲參數保持同步。你能承擔這個模型嗎? –

回答

1

一種可能做到這一點是使用Geokit寶石:

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

他們提供了一個範圍,從座標找到最接近的紀錄:

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

你可以找到另一個例子和選項。