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



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

我目前用以下代码覆盖as_json来实现这一点:

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

然而,这不是最优的,因为根(例如object:{})缺失。是否有一个函数可以很容易地包含它?(我们的很多模型都有一个关联的lat_lng,所以我宁愿不硬编码它)。

对于ruby/rails初学者的任何提示都将非常感激

为了后代,我在" geo-activerecord" gem, 0.3.4版中修复了这个问题,在得到几个关于它的报告之后。默认情况下,它在WKT中呈现空间列。要将其切换为GeoJSON,请设置如下:

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

nielsen的答案有时会起作用但不是每次都起作用。具体来说,它将适用于地理工厂(即PostGIS中的几何列),但不适用于geos支持的工厂。

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

ActiveRecord::Base.include_root_in_json = true

我希望这有帮助。

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

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

相关内容

  • 没有找到相关文章

最新更新