Sequelize:地理空间查询以查找到某个位置的最近点

时间:2017-09-13 02:30:33

标签: node.js postgresql sequelize.js postgis

我正在尝试实现一个功能,该功能可以在特定点附近获取作业,但是面临与Sequelize形成查询的问题。如果我可以获得任何指导,那就太好了。

使用Sequelize版本:3.30.4

作业控制器使用

获取附近的作业
getNearByJobs(req, res) {

  // Radius in metres
  const radius = 25000;

  const dummyPreferredLocation = "0101000000F6DA221FAAE842C09895ED439E1E6240";

  return Job
    .findAll({
      attributes: [
        [db.sequelize.fn("ST_Distance_Sphere", dummyPreferredLocation, db.sequelize.col('"Job"."locationLatLng"')), 'distance']
      ],
      where: {
        active: true,
        distance: {
          $lte: radius
        }
      },
      include: [{
        model: Company,
        attributes: {
          exclude: ['active', 'createdAt', 'updatedAt']
        }
      }],
      distinct: true,
      offset: req.query.offset,
      limit: req.query.limit
    })
    .then(jobs => res.status(200).json(jobs))
    .catch(error => {
      console.log(error);
      return res.status(400).send({
        message: 'Job Not Found',
      });

    });
}

工作模式有' locationLatLng'声明为,

locationLatLng: {
      type: DataTypes.GEOMETRY('POINT')
}

问题1:

  

错误:列Job.distance不存在

'距离' where子句中的属性被视为" Job"。" distance"在生成的查询中。

问题2:

由于我在前端使用分页,我使用了findAndCountAll而不是findAll,它删除/忽略了'属性'部分。由于这个距离'列永远不会计算。这个问题有什么解决方案吗?我已经阅读了他们的GitHub上的问题,并且知道它是一个有问题的问题。

任何帮助将不胜感激。

感谢。

0 个答案:

没有答案