Сохранить строку GeoJSON в объекте Rails / PostGIS - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь сохранить некоторые геопространственные данные, но у меня возникают проблемы.

Как получить параметр POST (массив полигонов), поступающий из внешнего интерфейса:

"bounds"=>[{"type"=>"Feature", "properties"=>{}, "geometry"=>{"type"=>"Polygon", "coordinates"=>[[[-108.379462, 47.037318], [-103.104889, 42.439323], [-109.655197, 41.886168], [-108.379462, 47.037318]]]}}, {"type"=>"Feature", "properties"=>{}, "geometry"=>{"type"=>"Polygon", "coordinates"=>[[[-106.955884, 41.525499], [-101.228794, 41.275293], [-101.225638, 38.73149], [-106.955884, 41.525499]]]}}]

Сохранено в такую ​​модель:

# migration
class CreateMarkets < ActiveRecord::Migration[5.0]
  def change
    create_table :markets do |t|
      t.string :name
      t.attachment :image
      t.text :text
      t.multi_polygon :bounds, geographic: true

      t.timestamps
    end
  end
end

В Rails / PostGIS с использованием RGeo и RGeo-GeoJSON?

В настоящее время я пытаюсь это:

# controller
def create

    @market = Market.new(market_params)
    geo = RGeo::GeoJSON::FeatureCollection.new(params[:market][:bounds])
    @market.bounds = geo

    if @market.save
      render json: @market, notice: 'Market was successfully created.'
    else
      render json: @market.errors, status: :bad_request
    end
  end

И получаю ошибку:

NoMethodError (undefined method `factory' for #<RGeo::GeoJSON::FeatureCollection:0x3fc422bd22b8>)

Несмотря на наличие этого инициализатора:

# initializers/rgeo.rb
RGeo::ActiveRecord::SpatialFactoryStore.instance.tap do |config|
  config.default = RGeo::Geos.factory_generator
end
...