我的Rails已PostGIS
,activerecord-postgis-adapter
和rgeo-geojson
正在运行。
目前我可以使用默认的“object.json”网址来获取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编码器设置为GeoJSON的唯一方法是使用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)">>
答案 0 :(得分: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...
}
}