gpt4 book ai didi

postgresql - 使用 activerecord-postgis-adapter 并且点不是球形的

转载 作者:行者123 更新时间:2023-11-29 12:09:44 26 4
gpt4 key购买 nike

我正在尝试使用 activerecord-postgis-adapter gem 创建一个基本应用程序,并按照自述文件中的说明进行操作。

根据自述文件,一个点应该使用球形工厂,但我得到一个 CAPIPointImpl 类型而不是一个点的 SphericalPointImpl 类型。这意味着距离计算不起作用。

这是我正在尝试的:

record = MySpatialTable.create
record.lonlat = 'POINT(-122 47)'
record.lonlat
returns #<RGeo::Geos::CAPIPointImpl:0x3ff57d7645c8 "POINT (-122.0 47.0)">

我正在使用 ruby​​ 2.3.1、rails 5、postgres 9.6 和 postgis 2.3

这是我的模式:

 create_table "my_spatial_tables", force: :cascade do |t|
t.geography "lonlat", limit: {:srid=>4326, :type=>"point", :geographic=>true}

t.index ["lonlat"], name: "index_my_spatial_tables_on_lonlat", using: :gist
end

我的初始化:

RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
config.default = RGeo::Geos.factory_generator
config.register(RGeo::Geographic.spherical_factory(srid: 4326), geo_type: "point")
end

还有我的数据库配置:

default: &default
adapter: postgis
encoding: unicode
schema_search_path: public, postgis
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %

最佳答案

我通过显式创建一个球形工厂并从中创建点来解决它 - 所以

 geofactory = RGeo::Geographic.spherical_factory(srid: 4326)
MySpatialTable.lonlat = geofactory.point(user.longitude, user.latitude)

在 activerecord-postgis-adapter gem 或 rgeo-activerecord gem 中似乎确实存在错误。我无法弄清楚这个错误。 SpatialFactoryStore 看起来设置正确,但实际上并没有被使用。

关于postgresql - 使用 activerecord-postgis-adapter 并且点不是球形的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com