7

私は Rails をPostGISactiverecord-postgis-adapter実行しrgeo-geojsonています。

現時点では、デフォルトの「object.json」URL を使用して、WKT/WKB 形式の JSON 文字列を取得できます。次のようになります。

{"description":null,"id":1,"position":"POINT (10.0 47.0)"}

しかし、今はカスタム MIME タイプが必要なので、「object.geojson」を呼び出して、次のような GeoJSON 形式を取得できます。

{"description":null,"id":1,"position":{"type":"Point","coordinates": [10.0, 47.0]}}

JSON-encoder を GeoJSON に設定する唯一の方法は、 and を使用してグローバルに設定することでしRGeo::ActiveRecord::GeometryMixin.set_json_generator(:geojson)RGeo::ActiveRecord::GeometryMixin.set_json_generator(:wkt)しかし、私はそれをローカルに設定したいのですが、これは可能ですか?

私はすでにに追加Mime::Type.register "application/json", :geojson, %w( text/x-json application/jsonrequest )しましたがmime_types.rb、正常に動作します:コントローラーでこのコードを使用できます:

respond_to do |format|
  format.json { render json: @object }
  format.geojson { render text: "test" }
end

グローバル JSON レンダラーを に設定せずに、特定のオブジェクトを GeoJSON にレンダリングする方法を教えてください:geojson。!?

編集:

私のオブジェクトは Rails コンソールで次のように表示されます。

#<Anchor id: 1, description: nil, position: #<RGeo::Geos::CAPIPointImpl:0x3fc93970aac0 "POINT (10.0 47.0)">>

4

1 に答える 1

11

このようなファクトリを特定の用途に使用できます@object

factory = RGeo::GeoJSON::EntityFactory.instance

feature = factory.feature(@object.position, nil, { desc: @object.description})

そしてそれをエンコードします:

RGeo::GeoJSON.encode feature

次のような出力が必要です。

{
  "type" => "Feature",
  "geometry" => {
    "type" => "Point",
    "coordinates"=>[1.0, 1.0]
  },
  "properties" => {
    "description" => "something"
  }
}

または機能のコレクション:

RGeo::GeoJSON.encode factory.feature_collection(features)

与える:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      # the rest of the feature...
    },
    {
      "type": "Feature",
      # another feature...
    }
}
于 2013-03-23T02:09:56.607 に答える