使用Sequelize

时间:2018-04-12 15:14:27

标签: postgresql sequelize.js postgis

我的应用程序使用Node.js(v9.3.0),PostgreSQL(v9.5.1.0)作为数据库,PostGIS(v2.2.1)作为扩展安装,Sequelize(v4.37.6)作为ORM。我试图在LineStringZM列中插入4D数据 - 经度,纬度,高度和unix时间戳 - 但我收到以下错误:

DatabaseError: Column has M dimension but geometry does not

经过一些研究,我发现Sequelize使用函数ST_GeomFromGeoJSON来插入空间数据。但是,此函数似乎忽略了我的GeoJSON数据中的第4维,这会导致上述错误。

我认为使用ST_MakeLine(使用适当的输入)而不是ST_GeomFromGeoJSON的原始查询可以解决我的问题。但是,使用Sequelize插入4D空间数据是否有更简单的方法或更优雅的解决方案?

有条件的信息:

模型样本:

const GEOGRAPHY = require('sequelize').GEOGRAPHY

module.exports = function (sequelize, DataTypes) {
  let Course = sequelize.define('Course', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      allowNull: false,
      autoIncrement: true
    },
    gps: {
      type: GEOGRAPHY('LinestringZM', 4326)
    }
  }, {
    tableName: 'courses',
    timestamps: false,
    paranoid: false
  })

  return Course
}

Sequelize生成的插入代码:

INSERT INTO "courses" ("gps") 
VALUES (St_geomfromgeojson(
  '{"type":"LineString","crs":{"type":"name","properties"{"name":"EPSG:4326"}},"coordinates":[[-44.058367,-19.964709,0,1521552190]]}'
));

上面的SQL返回以下异常:DatabaseError: Column has M dimension but geometry does not

使用ST_MakeLine成功插入:

INSERT INTO "courses" ("gps")
VALUES (ST_MakeLine(ST_MakePoint(1,2, 10, 1), ST_MakePoint(3,4, 10, 1)));

0 个答案:

没有答案