使用rails3中的as_json自动将点编码为geojson

时间:2011-04-14 15:43:50

标签: json ruby-on-rails-3 geojson

我目前正在处理的rails服务要求在json响应中将点作为GeoJSON对象返回。我们正在使用rgeo和mysql2spatial适配器在我们的应用程序中表示这些点,我想使用rgeo-geojson gem来处理编码(如果可能的话)(我们已经用它来解码post上的geojson)。

我目前正在使用以下代码覆盖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 个答案:

答案 0 :(得分:5)

对于后人,我在收到几份报告之后,在“rgeo-activerecord”gem 0.3.4中修复了这个问题。默认情况下,它会在WKT中呈现空间列。要将其切换到GeoJSON,请设置:

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

NielsV的回答有时会 但不是每次都有效。具体来说,它适用于地理工厂(即PostGIS中的几何列),但不适用于GEOS支持的工厂

答案 1 :(得分:1)

您可以通过在这行代码中包含root来指定它:

ActiveRecord::Base.include_root_in_json = true

我希望这会有所帮助。

答案 2 :(得分:0)

我通过使用as_json方法为Point扩展RGEO库来解决这个问题,这样做不再需要在我自己的模型中覆盖as_json。谢谢你的回复。

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