当我在 rails 中运行这个命令时:
CensusBlockGroup.where{st_interects(:the_geom, buffer)}
在 SQL 中运行此命令:
SELECT "census_block_groups".* FROM "census_block_groups" WHERE (st_intersects("census_block_groups"."proj_shape_3361", '002000000300000d2...'))
我收到此错误:
ActiveRecord::StatementInvalid: PG::AmbiguousFunction:
ERROR: function st_intersects(geometry, unknown) is not unique
LINE 1: ...lock_groups".* FROM "census_block_groups" WHERE (st_interse...
HINT: Could not choose a best candidate function. You might need to add explicit type casts.
我不知道如何添加显式类型转换,老实说,我也不清楚这甚至意味着什么。我看到上面的 st_intersects 函数传入了第二个参数“未知”。也许我可以“投射”它并让它工作......?
我认为问题可能是st_intersects
由于其“函数重载”特性,postgresql 中有多个函数定义。我不是第一个在这个系统上安装 postgresql/postgis 的开发人员,我的一个承包商做到了,所以我担心我们可能会重复我们的努力。
我在 Ubuntu“12.04 LTS”VPS 上使用 postgresql 和 postgis 运行 rails 服务器。
我很确定我可以重新安装 postgis 但这会清除我的承包商的代码,这些代码使用 pg_routing 做了一些我不想接触的非常复杂的事情。如果必须,我将启动一个新的 linode 并在其上运行代码,但这似乎有点浪费,甚至可能更像是一种失败。
如果我无法通过消除歧义来正确解决问题(这通常适用于 Mac 和 linux 发行版),我认为另一种解决方案是标记 postgresql 以忽略歧义并选择它遇到的第一个 st_intersects 函数.
其他注意事项:
- 我在 rgeo 中使用的几何工厂是“Geos”
- 几何是笛卡尔的,不是地理的
类似的问题(作为一个被 ORM 瘫痪的 Rails 开发人员,这仍然让我摸不着头脑):