gpt4 book ai didi

sequelize.js - 使用 Sequelize ORM 插入/更新 PostGis 几何图形

转载 作者:行者123 更新时间:2023-12-01 16:05:51 30 4
gpt4 key购买 nike

我使用sequelize-auto提取了一些PostGis图层的模型,给出:

module.exports = function(sequelize, DataTypes) {
return sequelize.define('table', {
id: {
type: DataTypes.INTEGER,
allowNull: false,
primaryKey: true,
autoIncrement: true
},
geom: {
type: DataTypes.GEOMETRY('POINT', 4326),
allowNull: true,
},
...

在 GET Sequelize 上,将 geom 作为 GeoJSON 发送到客户端:

{
"type":"Point",
"coordinates":[11.92164103734465,57.67219297300486]
}

当我尝试用以下方法保存此回 PosGis 错误时:

ERROR:  Geometry SRID (0) does not match column SRID (4326)

这个答案给出了如何添加 SRID ( How to insert a PostGIS GEOMETRY Point in Sequelize ORM? ) 的神指示,

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 曾经是从sequelize 中删除的一项功能 ( https://github.com/sequelize/sequelize/issues/4054 )。

有人知道一种方法来连接 Sequelize 以便将 srid 添加到发送到 PostGis 的 GeoJson 中吗?放在哪里?在模型的 setter 中?

最佳答案

在保存 GEOMETRY 字段时,Sequelize 似乎不会保存 SRID(请注意,它正确地将 SRID 保存在 GEOGRAPHY 字段上)。然后,当您将来更新该模型时,更新将会失败,因为它没有按照模型定义中的预期在 GEOMETRY 字段上设置 SRID。

这不是一个理想的解决方案,但您可以使用 Sequelize 的 beforeSave Hook 来始终指定要使用的坐标系统。

myDatabase.define('user', {
name: {
type: Sequelize.STRING
},
geometry: {
type: Sequelize.GEOMETRY('POINT', 4326)
}
}, {
hooks: {
beforeSave: function(instance) {
if (instance.geometry && !instance.geometry.crs) {
instance.geometry.crs = {
type: 'name',
properties: {
name: 'EPSG:4326'
}
};
}
}
}
});

关于sequelize.js - 使用 Sequelize ORM 插入/更新 PostGis 几何图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47795113/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com