我想創建一個基本的應用程序使用activerecord-postgis適配器寶石,並按照自述文件中的說明。使用activerecord-postgis適配器和點不被投爲球形
根據自述,一個點應該使用球形工廠,但我得到一個CAPIPointImpl類型,而不是SphericalPointImpl的一個點。這意味着距離計算不起作用。
這裏就是我想:
record = MySpatialTable.create
record.lonlat = 'POINT(-122 47)'
record.lonlat
returns #<RGeo::Geos::CAPIPointImpl:0x3ff57d7645c8 "POINT (-122.0 47.0)">
我使用的紅寶石2.3.1,軌5,9.6 Postgres的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 } %