我正在尝试在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+")"
。
我该怎么做?
答案 0 :(得分:26)
扩展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) {
...
});
答案 1 :(得分: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
,续集就可以解决这个问题。