2017-03-15 7 views
2

activerecord-postgis-adapter gem을 사용하여 기본 앱을 만들려고하는데 readme의 지침을 따르고 있습니다.activerecord-postgis-adapter를 사용하고 점이 구형으로 캐스트되지 않습니다.

readme에 따르면 점은 구형 팩토리를 사용한다고 가정하고 있지만 점에 대해 SphericalPointImpl 대신 CAPIPointImpl 유형이 있습니다. 즉, 거리 계산이 작동하지 않습니다. 여기

내가 노력하고 무엇 :

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 

:

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과 PostGIS와를 POSTGRES 2.3

이 내 스키마입니다 내 초기화 :

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 } % 

답변

1

activerecord-postgis-adapter의 버그처럼 보입니다. 내가 찾은 솔루션 만 - 구형 공장을 이니셜 라이저의 기본 공장으로 설정 :

이 작품은 저에게 적합합니다. 그래서 버그가있는 것은 액티브 - PostGIS와 어댑터 보석 또는 rgeo-에 하나, 보이지 않는

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

-

1

내가 명시 적으로 구형 공장을 만들고 여기에서 포인트를 작성하여 그것을 해결 activerecord gem. 나는 버그를 알아낼 수 없었다. SpatialFactoryStore는 제대로 설정된 것처럼 보였지만 사용되지 않았습니다.