Когда я запускаю эту команду в рельсах:
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 выше передается во втором параметре, который является «неизвестным». Возможно, я мог бы «отлить» это и заставить это работать...?
Я думаю, проблема может заключаться в том, что в postgresql существует несколько определений функций st_intersects
из-за его функции «перегрузки функций». Я не первый разработчик, установивший postgresql/postgis в эту систему, это сделал мой подрядчик, поэтому я обеспокоен тем, что мы могли дублировать наши усилия.
Я запускаю сервер rails, используя postgresql и postgis на Ubuntu «12.04 LTS» VPS.
Я почти уверен, что мог бы просто переустановить postgis, но это уничтожило бы код моего подрядчика, который делает довольно сложные вещи с pg_routing, которые я не хочу трогать. Если мне нужно, я просто загружу свежий линод и запущу на нем код, но это кажется расточительным и, возможно, даже более значительным, чем своего рода поражение.
Если я не могу правильно решить проблему, удалив двусмысленность (это обычно работает для меня на Mac и Linux-дистрибутивах), я думаю, что другим решением было бы пометить postgresql, чтобы он игнорировал двусмысленность, и просто выбрать первую функцию st_intersects, с которой она сталкивается. .
Другие примечания:
- Фабрика геометрии, которую я использую в rgeo, называется «Geos».
- геометрия декартова, а не географическая
Подобные вопросы (которые до сих пор заставляют меня ломать голову как разработчика рельсов, искалеченного ORM):