2015-08-17 19 views
12

Próbuję wstawić wiersz w tabeli, która ma kolumnę geometrii w ORM Sequelize.js. Mam szerokość, długość i wysokość i muszę ją najpierw przekonwertować, aby móc wstawić ją jako geometrię.Jak wstawić punkt GEOMETRIA PostGIS w Sequelize ORM?

PostGIS procedura przechowywana, która wykonuje przekształcenie jest

ST_MakePoint(longitude, latitude, altitude) 

wstawić wiersz używam funkcji 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 
}); 

Teraz to, co chcę zrobić, to pole location mają zwracany wynik "ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")" po wstawieniu wiersza.

Jak mogę to zrobić?

Odpowiedz

17

Rozszerzając odpowiedź l0oky, integration test ma wiele dobrych wskazówek, jak używać json z różnymi typami geometrii. Zasadniczo wygląda na to, że sequelize spowoduje uszeregowanie dostarczonego obiektu geometrii, zakładając, że jest on poprawny GeoJSON i potokuje go do funkcji PostGIS ST_GeomFromGeoJSON. W związku z tym można po prostu podążać za obiektami geometrii pod GeoJSON spec.

Punkty:

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

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

dotycząca linii:

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

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

wielokątów:

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) { 
... 
}); 

Ustawianie niestandardowego identyfikatora SRID:

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

Po kilku badaniach odkryłem, że Sequelize 3.5.1 (wspiera GEOMETRIĘ) miał test, który wstawia Point.

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

Gdzie location jest polem GEOMETRY. W ten sposób nie muszę ręcznie dzwonić pod numer ST_MakePoint, kontynuuje to sequelize.