我使用的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