首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将RGeo列反序列化为SphericalPointImpl

将RGeo列反序列化为SphericalPointImpl
EN

Stack Overflow用户
提问于 2016-02-08 19:16:14
回答 1查看 350关注 0票数 16

在Rails 4.2.4和activerecord-postgis- RGeo 3.1.2中有一个包含适配器列的表

代码语言:javascript
复制
class CreateAddresses < ActiveRecord::Migration
  def change
    create_table :addresses do |t|
      t.st_point :coordinates,   geographic: true, srid: 4326
    end

    add_index :addresses, :coordinates, using: :gist
  end
end

以及根据对象的位置对对象进行分组的方法

代码语言:javascript
复制
def self.group_by_coords
    includes(:address).
    joins(:address).
    group('addresses.coordinates::geometry').
    pluck(
      'array_agg(realties.id) as ids, addresses.coordinates::geometry'
    )
  end

使用相应的测试:

代码语言:javascript
复制
describe 'group_by_coords' do
  it 'correctly group realties' do
    # create samples
    expect(Realty.group_by_coords).to eq(
      [[[r1.id, r2.id], r1.address.coordinates], [[r3.id], r3.address.coordinates]]
    )
  end
end

问题是pluck返回RGeo::Geos::CAPIPointImpl而不是RGeo::Geographic::SphericalPointImpl

代码语言:javascript
复制
expected: [[[1670, 1671], #<RGeo::Geographic::SphericalPointImpl:0x3fd37e9b8a20 "POINT (106.0 10.0)">], [[1672], #<RGeo::Geographic::SphericalPointImpl:0x3fd37ab2dddc "POINT (106.5 10.5)">]]
got: [[[1671, 1670], #<RGeo::Geos::CAPIPointImpl:0x3fd37a335a44 "POINT (106.0 10.0)">], [[1672], #<RGeo::Geos::CAPIPointImpl:0x3fd37a33560c "POINT (106.5 10.5)">]]

我相信为了解决这个问题,必须指定一个正确的工厂。我试着这样指定它

代码语言:javascript
复制
RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
  config.default = RGeo::Geos.factory_generator
  config.register(RGeo::Geographic.spherical_factory(srid: 4326), geo_type: "point", sql_type: "geography")
end

但是它将所有的点反序列化为RGeo::Geos::CAPIPointImpl,这更加通用,并且与现有的代码库不兼容。

所以问题是如何将所有的点反序列化为RGeo::Geographic::SphericalPointImpl

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 03:24:39

这里可能发生的事情可能比你预想的要简单,让我们只看前几个字符。

代码语言:javascript
复制
expected: [[[1670, 1671],...
got: [[[1671, 1670],...

为什么这两种方式都不同呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35268326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档