Sequelize – 在范围内寻找点

Sequelize – finding point in range

我有一个 Address 模型,它定义了 geometry 类型的 point 属性。 我想在传递 latitudelongituderange 时创建一个函数,它 returns 该范围内的所有地址(以米为单位)。我试图按照所写的内容 但我得到:

DatabaseError [SequelizeDatabaseError]: LWGEOM_dwithin: Operation on mixed SRID geometries (Point, 4326) != (Point, 0)

这是我在 Address 模型中由 point 定义的方式:

point: {
   type: DataTypes.GEOMETRY('Point'),
   allowNull: true,
},

这是我要编写的函数:

const findInRangeFrom = (latitude, longitude, range) => {
  return Address.findAll({
    attributes: {
      include: [[
        Sequelize.fn(
          'ST_Distance',
          Sequelize.col('point'),
          Sequelize.fn('ST_MakePoint', longitude, latitude),
        ),
        'distance',
      ]],
    },
    where: Sequelize.where(
      Sequelize.fn(
        'ST_DWithin',
        Sequelize.col('point'),
        Sequelize.fn('ST_MakePoint', longitude, latitude),
        range,
      ),
      true,
    ),
    order: Sequelize.literal('distance ASC'),
  });
};

我怎样才能使这个工作?

如果数据库中的几何图形存储在 SRID 4326 中,那么您需要为您的测试点设置相同的 SRID,如下所示:

Sequelize.fn('ST_SetSRID', Sequelize.fn('ST_MakePoint', longitude, latitude), 4326)

如果反之亦然,那么您需要为 point 列指明 SRID 4326:

Sequelize.fn('ST_SetSRID', Sequelize.col('point'), 4326)