Geokit和rails 3

Ami*_*mit 4 ruby-on-rails geokit

我正在使用带有rails 3的geokit gem和插件.看起来有一个已知的问题,可以在这里看到http://github.com/andre/geokit-rails/issues#issue/15

现在,我尝试按照底部提供的解决方案.我将该函数定义粘贴在文件末尾,就在acts_as_mapable之上,并且在第一次调用它之后,但每次都没有发生任何事情.

知道还能做些什么吗?

谢谢

stc*_*ett 7

我遇到类似的问题将我的应用程序升级到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
                    )
                  }
                }
Run Code Online (Sandbox Code Playgroud)

这是一篇关于这个主题的更多细节的博客文章:http: //stcorbett.com/code/distance-queries-with-rails-3-without-geokit/