Визуализация как GeoJSON (или выборочно как WKT/WKB) с использованием MIME-типов
у меня есть рельсы с PostGIS
, activerecord-postgis-adapter
и rgeo-geojson
работает.
на данный момент я могу использовать объект по умолчанию.JSON " URLs, чтобы получить строку JSON с форматом WKT/WKB. Выглядит это так:
{"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 - установить его глобально с помощью 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 )
to mime_types.rb
и он прекрасно работает: я могу использовать этот код в мой контроллер:
respond_to do |format|
format.json { render json: @object }
format.geojson { render text: "test" }
end
я надеюсь, что кто-то может сказать мне, как отобразить какой-то конкретный объект в GeoJSON без установки глобального JSON renderer :geojson
. !?
EDIT:
мои объекты выглядят так в консоли Rails:
#<Anchor id: 1, description: nil, position: #<RGeo::Geos::CAPIPointImpl:0x3fc93970aac0 "POINT (10.0 47.0)">>
1 ответов
вы можете использовать такую фабрику для конкретного @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...
}
}