如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?
Posted
技术标签:
【中文标题】如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?【英文标题】:How to insert a PostGIS GEOMETRY Point in Sequelize ORM? 【发布时间】:2015-11-10 15:26:14 【问题描述】:我正在尝试在 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
);
现在我要做的是让字段location
在插入行时返回"ST_MakePoint("+request.params.lon+", "+request.params.lat+", "+request.params.alt+")"
的结果。
我该怎么做?
【问题讨论】:
【参考方案1】:扩展 l0oky 的答案,integration test 有很多关于如何将 json 与不同类型的几何图形一起使用的好线索。基本上,sequelize 似乎会将提供的几何对象字符串化,假设它是有效的 GeoJSON 并将其传递到 PostGIS 函数 ST_GeomFromGeoJSON。因此,几何对象只需按照GeoJSON spec 即可。
积分:
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)
...
);
设置自定义 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)
...
);
【讨论】:
【参考方案2】:经过一番研究,我发现 Sequelize 3.5.1(支持 GEOMETRY)有一个 test 插入了一个 Point
。
var point = type: 'Point', coordinates: [39.807222,-76.984722] ;
return User.create( username: 'user', email: ['foo@bar.com'], location: point)
location
是一个 GEOMETRY 字段。这样我就不需要手动调用ST_MakePoint
,sequelize 会处理这个问题。
【讨论】:
以上是关于如何在 Sequelize ORM 中插入 PostGIS GEOMETRY 点?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 sequelize ORM Query 中更改日期格式?
Node.js:如何在 Sequelize 中使用 Postgres 存储过程?
如何在 Sequelize ORM 中获取不带前缀表名的连接数据结果
如何在sequelize ORM中使用从时间戳中选择并提取日期到月份和年份?