st_distance 中的问题和 posgis 适配器的几何问题

Facing issue in st_distance and geometry with posgis adapter

我正尝试从 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)”的未定义方法'geometry':String

如果我尝试从 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

gem“activerecord-postgis-adapter”

但后来我找到了一些答案,我也安装了这个gem

gem“rgeo”
gem'rgeo-activerecord'

不确定 rgeorgeo-activerecord gem 是否需要 运行 以上查询

在我的database.yml中明确指定了适配器

default: &default
  adapter: postgis
  encoding: unicode
  pool: 10 

此外,通过阅读 Whosebug 上的一些答案,我还在 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
帖子版本:10.17

我通过向 st_distance 函数添加引号来修复查询。此外,不需要“rgeo”& 'rgeo-activerecord' 宝石

Location.order( "ST_Distance(
    'SRID=4326;POINT(-72.1235 42.3521)',
    'SRID=4326;LINESTRING(-72.1260 42.45, -72.123 42.1546)'
  )").first