2012-10-31 12 views
5

का उपयोग कर जियोजसन (या चुनिंदा रूप से डब्लूकेटी/डब्ल्यूकेबी के रूप में) के रूप में प्रस्तुत करें मेरे पास , activerecord-postgis-adapter और rgeo-geojson चलने वाले रेल हैं।एमआईएमई-प्रकार

फिलहाल मैं डिफ़ॉल्ट "object.json" URL का उपयोग WKT/WKB प्रारूप के साथ JSON स्ट्रिंग प्राप्त करने के लिए कर सकता हूं। यह इस तरह दिखता है:

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

लेकिन अब मैं एक कस्टम माइम-प्रकार करना चाहते हैं, तो मैं इस तरह GeoJSON स्वरूप पाने के लिए "object.geojson" कॉल कर सकते हैं:

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

एक ही रास्ता मैंने जेएसओएस-एन्कोडर को जियोज़सन में सेट करने के लिए पाया है इसे विश्व स्तर पर RGeo::ActiveRecord::GeometryMixin.set_json_generator(:geojson) और RGeo::ActiveRecord::GeometryMixin.set_json_generator(:wkt) का उपयोग करके सेट करना था। लेकिन मैं इसे स्थानीय रूप से सेट करना चाहता हूं, क्या यह संभव है?

मैं पहले से ही mime_types.rb को Mime::Type.register "application/json", :geojson, %w(text/x-json application/jsonrequest) जोड़ा गया है और यह ठीक काम करता है: मैं अपने नियंत्रक में इस कोड का उपयोग कर सकते हैं:

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

मुझे आशा है कि कोई मुझे बता सकता है कि वैश्विक स्तर पर सेट किया GeoJSON करने के लिए कुछ विशिष्ट वस्तु प्रस्तुत करना JSON रेंडरर :geojson पर। !?

संपादित करें:

मेरे वस्तुओं रेल कंसोल में इस तरह दिखेगा:

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

+0

GeoJSON JSON है और इसके समुचित मीडिया प्रकार है " आवेदन/json। " शायद GeoJSON डेटा के लिए एक पूरी तरह से अलग विचार पर विचार करें? – sgillies

+0

आपके उत्तर के लिए धन्यवाद: लेकिन अभी भी सवाल है: मैं जेएसओएन के साथ जेएसओएन जेडब्ल्यूओएन के बजाय जेकेओएस जेनरेट कर सकता हूं (!!) वैश्विक json_generator को सेट किए बिना? –

उत्तर

9

आप एक विशिष्ट @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... 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^