ruby-on-rails - 使用 PostGIS 的 Rails

标签 ruby-on-rails ruby ruby-on-rails-3 postgresql postgis

首先,我使用 Rails3 和 Ruby 1.9.2。

我在将 PostgreSQL 与 PostGIS 结合使用时遇到问题。我试过两个 gem :

问题是,来自 nofxx 的第一个运行良好,但它不提供 rake 任务,因此 postgis.sql 和 spatial_ref_sys.sql 被插入到数据库中。我需要这个,因为它使用测试很舒服而且很重要(自动创建数据库,插入 postgis sql 并在运行“rake test”时执行迁移)。奇怪的是,在 github 上的 README 中,作者写了一些关于 PostGIS helpers 和 rake tasks 的东西。但它们没有实现(或者我是瞎子)。

上面列出的第二个 gem 完美地为 rake 提供了这个功能!但是我遇到了一个我无法解决的问题。我按照自述文件中的说明进行操作,但每次尝试在空间列上设置位置时,都会得到以下输出:

ruby-1.9.2-p136 :010 > v = Venue.new :location => "POINT(102.0, 47.2)"
=> #<Venue id: nil, last_updated: nil, created_at: nil, updated_at: nil, location: nil>
ruby-1.9.2-p136 :011 > v.location
=> nil 

如您所见,我使用 WKT(众所周知的文本)设置了一个位置,但它始终为零。我也试图将它保存到数据库中,但它也是零。 我发现,当我尝试使用 RGeo 提供的对象时

RGeo::Geos.factory.point(-122, 47)

它说,工厂是零。所以,创建RGeo提供的工厂肯定有问题。正如 activerecord-postgis-adapter 的自述文件中所述,我在我的 Venue 模型中使用了以下行来提供此支持:

self.rgeo_factory_generator = RGeo::Geos.factory_generator

但它不起作用。

所以要找到解决办法,有两种方法:想办法把rake任务放到nofxx的georuby gem中,或者用activerecord-postgis-adapter的工厂解决问题。

希望有人能帮助我, 谢谢!

最佳答案

我花了大约 4 个小时用“activerecord-postgis-adapter”解决同样的问题。答案很简单:“永远不要在 WKT 中使用 COMAS”。在您的情况下,它必须是 v = Venue.new :location => "POINT(102.0 47.2)" 然后一切正常!

关于ruby-on-rails - 使用 PostGIS 的 Rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5298797/

相关文章:

ruby-on-rails - 您建议使用什么 gem\plugin 来发出 HTTP 请求?

ruby - 编写代码美化器

windows - 通过 Ruby 持久化环境变量

ruby-on-rails - 解析ruby中的字符串日期,例如 "28-May-10"

ruby-on-rails-3 - 如何从 Mongoid 直接访问 MongoDB API?

javascript - 两个 javascript 文件冲突

ruby-on-rails - 将 Rails has_one 关系修改为 UPDATE 而不是 DELETE 然后 INSERT

ruby-on-rails - 使用 Arel 对 AND 和 OR 子句进行分组

ruby-on-rails - Rails 4 assets.precompile

ruby-on-rails - 从 hash 打印值在 ruby​​ 中返回 nil