ruby-on-rails - 使用 posgis 适配器在 st_distance 和几何中面临问题
问题描述
我正在尝试从 rails 控制台运行查询,但出现错误
第一次查询
Location.order( ST_Distance(
'SRID=4326;POINT(-72.1235 42.3521)',
'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'
)).first
main:Object 的未定义方法“ST_Distance”
第二次查询
longitude_latitude = '0101000020E61000002DB29DEFA7C651C0B81E85EB51284540'
Location.order('acc_rank desc', ST_Distance(
'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
longitude_latitude
)).first
“SRID=4326;POINT(-72.1235 42.3521)”的未定义方法“几何”:字符串
如果我尝试从 Postgres 控制台运行,我可以同时运行这两个查询
select ST_Distance(
aniket_t(# 'SRID=4326;POINT(-72.1235 42.3521)'::geometry,
aniket_t(# '0101000020E61000002DB29DEFA7C651C0B81E85EB51284540'
aniket_t(# );
st_distance
------------------
1.02017481835224
(1 row)
select ST_Distance(
aniket_t(# 'SRID=4326;POINT(-72.1235 42.3521)',
aniket_t(# 'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'
aniket_t(# );
st_distance
---------------------
0.00150567726382822
(1 row)
对于 PostGIS 的设置,我最初安装了 gem
宝石“activerecord-postgis 适配器”
但后来我找到了几个答案,我也安装了这个 gem
宝石“rgeo”
宝石“rgeo-activerecord”
不确定运行上述查询是否需要rgeo和rgeo-activerecord gem
在我的 database.yml 中,我已经明确指定了适配器
default: &default
adapter: postgis
encoding: unicode
pool: 10
此外,通过阅读 StackOverflow 上的一些答案,我还在 config/initializers/rgeo.rb 中添加了 rgeo.rb
RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
# By default, use the GEOS implementation for spatial columns.
config.default = RGeo::Geos.factory_generator
# But use a geographic implementation for point columns.
config.register(RGeo::Geographic.spherical_factory(srid: 4326), geo_type: "point")
end
但没有什么对我有用。在从 rails 控制台运行这些查询时,我们将不胜感激
Rails:6.0.3.7
pg gem:1.2.3
postges 版本:10.17
解决方案
我通过向 st_distance 函数添加引号来修复查询。此外,不需要“rgeo”和“rgeo-activerecord” gem
Location.order( "ST_Distance(
'SRID=4326;POINT(-72.1235 42.3521)',
'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'
)").first
推荐阅读
- android - 将序列化对象传递给片段
- r - R - 事后卡方 - 不再支持“fifer”包?
- javascript - 为什么浏览器会区分带有 www 或不带 www 的 URL?
- c# - 如何在文本C#中用超链接/锚标记替换带有括号的url
- image - TensorFlow、Keras:测试图像大于训练图像
- laravel - 无法在项目根目录中运行 composer 命令
- python-3.x - 我可以在不调用蜘蛛的情况下使用 Scrapy 吗?
- javascript - 使用 flatMap 订阅 onComplete 永远不会完成
- eclipse - 如何在 Eclipse 4.2 中安装 Perforce 插件
- ruby-on-rails - Rails 操作视图表单助手“f.email_field”未显示与同一页面上的其他助手相同的格式