首页 > 解决方案 > 如何检查多边形是否包含 Point Sequelize 和 postgres

问题描述

我正在使用nodejs,orm是sequelize,数据库是postgresql。我想从另一个表中获取多边形,这里的车辆表是代码:

const geoRegion = await models.GeoRegion.find({
      where: {
        id: id,
      },
    });

    const scooters = await models.Vehicle.findAll({
      where: {
        $and: models.sequelize.where(models.sequelize.fn('ST_Intersects', geoRegion.polygon, models.sequelize.fn('ST_SetSRID', models.sequelize.fn('ST_MakePoint', models.sequelize.col('lastReportedLocation')), '4326')), true),
      },
      plain: true,
    });

geoRegion 有字段多边形,我想检查多边形内的车辆是错误的:

SELECT * FROM \"Vehicles\" AS \"Vehicle\" WHERE ST_Intersects(\"lastReportedLocation\", \"type\" = 'Polygon' AND \"coordinates\" IN (ARRAY[ARRAY[105.293,21.145],...)
 "name": "SequelizeDatabaseError",
"error": "column \"type\" does not exist"

标签: javascriptnode.jspostgresqlsequelize.jspostgis

解决方案


ST_Intersects需要两个几何/地理作为参数。所以,我可能猜到,您的查询应该如下所示:

select v.* 
from Vehicles v
join geoRegion r
on st_intersects(v.lastReportedLocation, r.polygon)

假设 Vehicles 表中的“lastReportedLocation”字段和 geoRegion 表的“polygon”两个字段都包含有效的几何图形,这应该会为您提供感兴趣区域内的车辆。


推荐阅读