我试图在Sequelize.js ORM中具有几何列的表中插入一行.我有纬度,经度和海拔,需要先将它转换为一个点,这样我就可以将它作为几何体插入.
执行转换的PostGIS存储过程是
ST_MakePoint( longitude, latitude, altitude )
Run Code Online (Sandbox Code Playgroud)
要插入一行我正在使用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
});
Run Code Online (Sandbox Code Playgroud)
现在我想做的是让该字段location具有返回的结果"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"插入行时.
我怎样才能做到这一点?
我已经使用 sequelize-auto 生成了模型,并且需要使用 beforeSave 钩子(请参阅此处)。据我所知,钩子没有开火。sequelize 版本 ^4.20.1,sequelize-auto 版本 ^0.4.29,express 版本 ~4.15.5。任何人都可以帮忙吗?
module.exports = function(sequelize, DataTypes) {
return sequelize.define('trad', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
geom: {
type: DataTypes.GEOMETRY('POINT', 4326),
allowNull: true
},
...
}, {
hooks: {
beforeSave: (instance, options) => {
console.log('Saving geom: ' + instance.geom);
if (instance.geom && !instance.geom.crs) {
instance.geom.crs = {
type: 'name',
properties: {
name: 'EPSG:4326'
}
};
}
}
},
tableName: 'trad',
timestamps: false,
});
}; …Run Code Online (Sandbox Code Playgroud)