0

我目前正在处理的 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 初学者的任何提示将不胜感激

4

3 回答 3

6

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

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

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

于 2011-06-03T00:18:48.637 回答
1

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

ActiveRecord::Base.include_root_in_json = true

我希望这有帮助。

于 2011-05-12T22:07:07.987 回答
0

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

module RGeo
  module Feature
    module Point
      def as_json(params)
        ::RGeo::GeoJSON.encode(self)
      end
    end
  end
end
于 2011-05-13T15:18:39.050 回答