Автоматически кодировать точки в геойсон с помощью as_json в rails3 - PullRequest
0 голосов
/ 14 апреля 2011

Служба рельсов, над которой я сейчас работаю, требует, чтобы точки возвращались как объект GeoJSON в нашем ответе json.Мы используем rgeo и адаптер mysql2spatial для представления этих точек в нашем приложении, и я хотел бы использовать гем rgeo-geojson для обработки кодировки, если это возможно (мы уже используем его для декодирования geojson на post).

В настоящее время я перезаписываю as_json следующим кодом для достижения этой цели:

   def as_json(params)
     l = {:lat_lng => ::RGeo::GeoJSON.encode(lat_lng)}
     self.attributes.merge(l).as_json
   end

Однако это не является оптимальным, поскольку корень (например, объект: {}) отсутствует.Есть ли функция, чтобы легко включить его?(у многих наших моделей есть связанный lat_lng, так что я бы не стал жестко его кодировать).

Любые советы для начинающих по ruby ​​/ rails будут высоко оценены

Ответы [ 3 ]

5 голосов
/ 03 июня 2011

Для потомков я исправил это в геме "rgeo-activerecord", версия 0.3.4, после получения нескольких отчетов об этом. По умолчанию он отображает пространственные столбцы в WKT. Чтобы переключить его на GeoJSON, установите это:

RGeo::ActiveRecord::GeometryMixin.set_json_generator(:geojson)

Ответ от NielsV будет работать иногда , но не каждый раз. В частности, он будет работать для географических фабрик (например, столбцы геометрии в PostGIS), но , а не для фабрик, поддерживаемых GEOS.

1 голос
/ 13 мая 2011

Вы можете указать это, включив root с этой строкой кода:

ActiveRecord::Base.include_root_in_json = true

Надеюсь, это поможет.

0 голосов
/ 13 мая 2011

Я решил эту проблему, расширив библиотеку RGEO методом as_json для Point, и теперь мне больше не требуется перезаписывать as_json в моих собственных моделях. Спасибо за ваш ответ, хотя.

module RGeo
  module Feature
    module Point
      def as_json(params)
        ::RGeo::GeoJSON.encode(self)
      end
    end
  end
end
...