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'
不确定 rgeo 和 rgeo-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
我正尝试从 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'
不确定 rgeo 和 rgeo-activerecord gem 是否需要 运行 以上查询
在我的database.yml中明确指定了适配器
default: &default
adapter: postgis
encoding: unicode
pool: 10
此外,通过阅读 Whosebug 上的一些答案,我还在 config/initializers/rgeo.rb
中添加了 rgeo.rbRGeo::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