2012-10-07 4 views
2

J'essaye de construire un objet GeoJSON à partir d'une requête SQL à quelques données de point GIS dans une base de données postgresql postgis. Un extrait de mon app.js node.js est ci-dessous. En l'état, je comprends construire le type et les caractéristiques, mais je ne sais pas comment attacher un tableau de propriétés à chaque enregistrement GeoJSON (dans le paragraphe ci-dessous, tout rend à la fin, séparé de (pas collé avec) le fonctionnalités).format geojson de postgis

LA QUESTION: Que dois-je faire pour que les propriétés attachent (assemblent) pour chaque enregistrement dans la boucle qui construit le GeoJSON De sorte qu'il ressemble plus à ceci http://www.geojson.org/geojson-spec.html#examples?

`function GrabData(bounds, res){ 

    pg.connect(conn, function(err, client){ 

    var moisql = 'SELECT ttl, (ST_AsGeoJSON(the_geom)) as locale from cpag;' 


    client.query(moisql, function(err, result){ 
    var featureCollection = new FeatureCollection(); 

    for(i=0; i<result.rows.length; i++){ 
     featureCollection.features[i] = JSON.parse(result.rows[i].locale); 
     featureCollection.properties[i] = JSON.parse(result.rows[i].ttl); //this is wrong 
    } 

    res.send(featureCollection); 
    }); 

}); 
} 

function FeatureCollection(){ 
    this.type = 'FeatureCollection'; 
    this.features = new Array(); 
    this.properties = new Object; //this is wrong 
} 

`

+1

Il semble que vous avez besoin d'utiliser une œuvre autour; voir http://www.postgresonline.com/journal/archives/253-PostgreSQL-9.2-native-json-type-support.html –

+0

oui vous pourriez avoir raison, même si on dirait que je vais devoir mettre à jour mon postgres :( – roy

Répondre

3

Cela devrait faire le travail:

... 
for(i=0; i<result.rows.length; i++){ 
    var feature = new Feature(); 
    feature.geometry = JSON.parse(result.rows[i].locale); 
    feature.properties = {"TTL", result.rows[i].ttl}; 
    featureCollection.features.push(feature); 
} 
... 

utilisant:

function FeatureCollection(){ 
    this.type = 'FeatureCollection'; 
    this.features = new Array(); 
} 

function Feature(){ 
    this.type = 'Feature'; 
    this.geometry = new Object; 
    this.properties = new Object; 
} 
1

j'ai écrit récemment un petit module d'aide à cet effet. Il est très simple à utiliser -

var postgeo = require("postgeo"); 

postgeo.connect("postgres://[email protected]:port/database"); 

postgeo.query("SELECT id, name ST_AsGeoJSON(geom) AS geometry FROM table", "geojson", function(data) { 
    console.log(data); 
}); 

Vous pouvez trouver ici le repo - https://github.com/jczaplew/postgeo