0

我有一个通过 RGeo gem 集成 PostGIS 的项目。导轨 4,红宝石 2.1。

RGeo 具有contains?检查点是否位于多边形中的标准方法。一切都在开发中(在 MacOS X 上)。但是当我将代码推送到生产服务器(Ubuntu 12.04)时,我遇到了这个错误:

ActionView::Template::Error (Method Geometry#contains? not defined.):
app/models/address.rb:28:in `block in define_courier_area'
app/models/address.rb:28:in `define_courier_area'

代码非常简单。我只需要返回一个包含所有 CourierArea 实例的数组,地址坐标在哪里。

地址.rb

class Address < ActiveRecord::Base
  def define_courier_area # HAVE TO BE REFACTORED
    arr = []
    CourierArea.all.each { |ca| arr << ca if ca.poly.contains?(self.coords)}
    arr.first if arr.first
  end
end

我想,生产环境无法访问contains?由 RGeo gem 提供的方法。我怎么解决这个问题?也许我应该插入require 'some_rgeo_file'

4

2 回答 2

1

问题已解决。

RGeo 使用一些外部库。对于几何计算(距离、面积、多边形中的点),这个库是 GEOS。当我试图调用contains?RGeo 时,它正在寻找 GEOS,但它没有安装。

此外,还有一种RGeo::Geos.supported?用于检查 GEOS 可用性的 RGeo 方法。如果它会返回false,您可能没有安装 GEOS,或者 RGeo 与它的连接有问题。如果它会回来true- 博雅!你可以使用几何计算方法!

于 2014-06-06T01:23:03.353 回答
0

看起来 RGeo 可能没有安装在您的生产环境中。运行这个:

gem install rgeo

那应该解决它。

于 2014-05-26T04:31:42.313 回答