0

私が現在取り組んでいる 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

ただし、ルート (例: オブジェクト: {}) が欠落しているため、これは最適ではありません。簡単に入れる機能はありますか?(私たちのモデルの多くには 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

Point の 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 に答える