Node.js 如何在Sequelize ORM中插入PostGIS几何点?

Node.js 如何在Sequelize ORM中插入PostGIS几何点?,node.js,postgresql,postgis,sequelize.js,Node.js,Postgresql,Postgis,Sequelize.js,我试图在Sequelize.js ORM中有一个几何列的表中插入一行。 我有纬度、经度和海拔,需要先将其转换为一个点,以便将其作为几何体插入 执行转换的PostGIS存储过程是 ST_MakePoint( longitude, latitude, altitude ) 要插入行,我正在使用sequelize model.create函数 models.Data.create({ location: "ST_MakePoint("+request.params.lon+", "+r

我试图在Sequelize.js ORM中有一个几何列的表中插入一行。 我有纬度、经度和海拔,需要先将其转换为一个点,以便将其作为几何体插入

执行转换的PostGIS存储过程是

ST_MakePoint( longitude, latitude, altitude ) 
要插入行,我正在使用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
});
现在我要做的是,在插入行时,使字段
位置
具有
ST_MakePoint(“+request.params.lon+”、“+request.params.lat+”、“+request.params.alt+”)的返回结果


我该怎么做呢?

经过一番研究后,我发现Sequelize 3.5.1(支持几何体)有一个插入点

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

其中
location
是一个几何字段。这样我就不需要手动调用ST_MakePoint了,sequelize会解决这个问题。

在l0oky的答案上展开,在如何将json用于不同类型的几何体方面有很多很好的线索。基本上,sequelize似乎会将提供的几何体对象字符串化,假设它是有效的GeoJSON,并将其导入PostGIS函数ST_GeoFromGeoJSON。因此,只需遵循对象的几何图形即可

要点:

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

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});
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) {
...
});
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) {
...
});
行字符串:

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

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});
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) {
...
});
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) {
...
});
多边形:

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

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});
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) {
...
});
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) {
...
});
设置自定义SRID:

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

User.create({username: 'username', geometry: point }).then(function(newUser) {
...
});
var line = { type: 'LineString', 'coordinates': [ [100.0, 0.0], [101.0, 1.0] ] };

User.create({username: 'username', geometry: line }).then(function(newUser) {
...
});
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) {
...
});
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) {
...
});