4

我正在使用带有 rails 3 的 geokit gem 和插件。似乎它们存在一个已知问题,可以在此处查看http://github.com/andre/geokit-rails/issues#issue/15

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

知道还能做什么吗?

谢谢

4

6 回答 6

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
                    )
                  }
                }

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

于 2010-10-12T18:28:58.970 回答
4

jlecour 的 port to rails 3应该可以解决您去年遇到的任何问题。

如果您正在计算距离,请确保您使用的是 mysql 或 postgres。

于 2011-04-20T02:46:04.653 回答
3

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.

于 2011-09-06T03:32:26.787 回答
1

这是 geokit 到 rails 3 的端口,不完整:

https://github.com/jlecour/geokit-rails3

于 2010-12-06T21:29:24.140 回答
1

对于那些仍然遇到geokit问题的人,我继续使用mongodb ...它具有内置的距离搜索n all ...

于 2011-09-06T05:23:55.830 回答
0

嘿,阿米特,不确定你是否解决了这个问题,但我会告诉你我做了什么以防万一。

我分叉了 andre的geokit -rails 源代码,然后在本地克隆了它,并在.34lib/geokit-rails/acts-as-mappable.rbmodule ClassMethods # :nodoc:

然后我将这些更改提交回我在 github 上的分叉存储库,并使用我的 fork 将源代码作为插件安装到我的 rails 3 应用程序中。这似乎可以立即工作,但请确保您已将该acts_as_mappable行添加到您想要进行距离计算的任何模型中,并确保您在名为and的数据库上有两个浮点列。:lat:lng

于 2010-10-08T07:31:39.027 回答