我正在使用带有 rails 3 的 geokit gem 和插件。似乎它们存在一个已知问题,可以在此处查看http://github.com/andre/geokit-rails/issues#issue/15
现在,我尝试遵循底部提供的解决方案。我将该函数定义粘贴到文件末尾,就在acts_as_mapable 上方,就在第一次调用它之后,但每次都没有发生任何事情。
知道还能做什么吗?
谢谢
我正在使用带有 rails 3 的 geokit gem 和插件。似乎它们存在一个已知问题,可以在此处查看http://github.com/andre/geokit-rails/issues#issue/15
现在,我尝试遵循底部提供的解决方案。我将该函数定义粘贴到文件末尾,就在acts_as_mapable 上方,就在第一次调用它之后,但每次都没有发生任何事情。
知道还能做什么吗?
谢谢
我在将我的应用程序升级到 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/
jlecour 的 port to rails 3应该可以解决您去年遇到的任何问题。
如果您正在计算距离,请确保您使用的是 mysql 或 postgres。
After trouble installing the geokit-rails3 gem on Rails 3.1 I moved to the geocoder gem. It has distance calculation as well (be sure to not forget the s in @your_model.nearby*s*(5)). There is also a Railscast.
这是 geokit 到 rails 3 的端口,不完整:
对于那些仍然遇到geokit问题的人,我继续使用mongodb ...它具有内置的距离搜索n all ...
嘿,阿米特,不确定你是否解决了这个问题,但我会告诉你我做了什么以防万一。
我分叉了 andre的geokit -rails 源代码,然后在本地克隆了它,并在.34
lib/geokit-rails/acts-as-mappable.rb
module ClassMethods # :nodoc:
然后我将这些更改提交回我在 github 上的分叉存储库,并使用我的 fork 将源代码作为插件安装到我的 rails 3 应用程序中。这似乎可以立即工作,但请确保您已将该acts_as_mappable
行添加到您想要进行距离计算的任何模型中,并确保您在名为and的数据库上有两个浮点列。:lat
:lng