2015-08-17 6 views
12

Sto cercando di inserire una riga in una tabella che ha una colonna geometrica in Sequelize.js ORM. Ho latitudine, longitudine e altitudine e devo prima convertirlo in un punto in modo da poterlo inserire come una geometria.Come inserire un punto GEOMETRIA PostGIS in Sequenza ORM?

La stored procedure PostGIS che fa la conversione è

ST_MakePoint(longitude, latitude, altitude) 

per inserire una riga Sto usando la funzione sequelize model.create

models.Data.create({  
    location: "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")", // PSUEDO code, How can I call this function? 
    speed: request.params.spd, 
    azimuth: request.params.azi, 
    accuracy: request.params.acc 
}); 

Ora quello che voglio fare è rendere il campo location hanno il risultato restituito di "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")" quando inserisco la riga.

Come posso farlo?

risposta

17

Espandendo la risposta di l0oky, lo integration test ha molti buoni indizi su come usare il json con vari tipi di geometria. Fondamentalmente, sembra che il sequelize stringa l'oggetto geometry fornito supponendo che sia valido GeoJSON e lo installi nella funzione PostGIS ST_GeomFromGeoJSON. Pertanto, si può semplicemente seguire lo GeoJSON spec per gli oggetti geometrici.

Punti:

var point = { type: 'Point', coordinates: [39.807222,-76.984722]}; 

User.create({username: 'username', geometry: point }).then(function(newUser) { 
... 
}); 

stringhe lineari:

var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] }; 

User.create({username: 'username', geometry: line }).then(function(newUser) { 
... 
}); 

Poligoni:

var polygon = { type: 'Polygon', coordinates: [ 
      [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], 
       [100.0, 1.0], [100.0, 0.0] ] 
      ]}; 

User.create({username: 'username', geometry: polygon }).then(function(newUser) { 
... 
}); 

Impostazione di un SRID personalizzato:

var point = { 
    type: 'Point', 
    coordinates: [39.807222,-76.984722], 
    crs: { type: 'name', properties: { name: 'EPSG:4326'} } 
}; 

User.create({username: 'username', geometry: point }).then(function(newUser) { 
... 
}); 
1

Dopo un po 'di ricerche ho trovato che Sequelize 3.5.1 (supporta GEOMETRIA) aveva un test che inserisce uno Point.

var point = { type: 'Point', coordinates: [39.807222,-76.984722] }; 
return User.create({ username: 'user', email: ['[email protected]'], location: point}) 

Dove location è un campo GEOMETRIA. In questo modo non ho bisogno di chiamare manualmente ST_MakePoint, sequelize si prende cura di questo.