Я пытаюсь сохранить некоторые геопространственные данные, но у меня возникают проблемы.
Как получить параметр 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