我使用的geokit寶石和插件與軌道3似乎有一個已知的問題與他們,可以在這裏看到http://github.com/andre/geokit-rails/issues#issue/15Geokit和軌道3
現在,我試圖按照在提供的解決方案底部。我將該函數定義粘貼到文件末尾,位於acts_as_mapable上方,第一次被調用後,但每次都沒有發生。
任何想法還有什麼可以做的?
感謝
我使用的geokit寶石和插件與軌道3似乎有一個已知的問題與他們,可以在這裏看到http://github.com/andre/geokit-rails/issues#issue/15Geokit和軌道3
現在,我試圖按照在提供的解決方案底部。我將該函數定義粘貼到文件末尾,位於acts_as_mapable上方,第一次被調用後,但每次都沒有發生。
任何想法還有什麼可以做的?
感謝
對於那些仍然有geokit麻煩,我轉移到使用mongodb ...其中內置的距離搜索n所有...
嘿艾米特,不知道如果你整理了這一點,但是我會告訴你我以防萬一做。
我分叉安德烈的geokit護欄源,然後克隆它在本地和在lib/geokit-rails/acts-as-mappable.rb
34
線從this gist添加的代碼,只需讀取module ClassMethods # :nodoc:
行之後。
然後我將這些變化提交回github上的分叉回購,並使用我的fork將源代碼安裝爲我的rails 3應用程序的插件。這似乎馬上工作,但請確保您已將acts_as_mappable
行添加到您希望進行距離計算的任何模型中,並確保在該數據庫:lat
和:lng
之間有兩個float列。
我碰到類似的問題,將我的應用程序升級到rails 3.我仍然使用Geokit進行地理編碼,但Active Record範圍用於基於距離的數據庫查詢。這非常方便,你仍然可以獲得Active Record 3的所有優點。下面是我的用戶模型的示例:
scope :near, lambda{ |*args|
origin = *args.first[:origin]
if (origin).is_a?(Array)
origin_lat, origin_lng = origin
else
origin_lat, origin_lng = origin.lat, origin.lng
end
origin_lat, origin_lng = deg2rad(origin_lat), deg2rad(origin_lng)
within = *args.first[:within]
{
:conditions => %(
(ACOS(COS(#{origin_lat})*COS(#{origin_lng})*COS(RADIANS(users.lat))*COS(RADIANS(users.lng))+
COS(#{origin_lat})*SIN(#{origin_lng})*COS(RADIANS(users.lat))*SIN(RADIANS(users.lng))+
SIN(#{origin_lat})*SIN(RADIANS(users.lat)))*3963) <= #{within}
),
:select => %(users.*,
(ACOS(COS(#{origin_lat})*COS(#{origin_lng})*COS(RADIANS(users.lat))*COS(RADIANS(users.lng))+
COS(#{origin_lat})*SIN(#{origin_lng})*COS(RADIANS(users.lat))*SIN(RADIANS(users.lng))+
SIN(#{origin_lat})*SIN(RADIANS(users.lat)))*3963) AS distance
)
}
}
這裏有一個博客帖子關於這個問題的更詳細一點:http://stcorbett.com/code/distance-queries-with-rails-3-without-geokit/
有用的博客帖子stcorbett。從數據庫獲得距離很方便,可鏈式示波器很好。我要提醒的是,新字段將顯示在用戶模型(在這種情況下),您可能想要命名該字段以指示其不是用戶的永久屬性,而是與其他用戶的距離。 – 2010-10-12 21:26:32
Ahh,有趣的一點。我可以看到,根據查詢計算距離的用戶來命名新屬性。例如:「distance_to_user _#{origin.id}」。當你想要使用距離數據時,這會給你一個額外的跳躍。好東西。 – stcorbett 2010-10-12 21:31:08
這裏是geokit的端口軌道3,不完全通過:
jlecour's port to rails 3應該解決你去年遇到的任何問題。
如果您正在進行距離計算,請確保您使用的是mysql或postgres。
在Rails 3.1上安裝geokit-rails3 gem出現問題後,我轉移到geocoder gem。它也有距離計算(請務必不要忘記@ your_model.nearby * s *(5)中的s)。還有一個Railscast。
嘿!是的,這工作,但由於某種原因,該插件沒有與軌道3 nemore ...所以我只是自己做的插件;) – Amit 2010-10-08 07:40:22