我试图找出某个几何图形是否在边界多边形中。我找到了这个答案(使用 Sequelize 和 postgis 查找多边形中的点),但它只描述了如何进行单个位置检查。
我需要创建一个复杂的 where 子句。如何使用 ST_Within 来使用复杂的 where 子句?
链接问题的答案
Device.findAll({
where: sequelize.where(
sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
true
)
});
我尝试将此值添加到 findAll 属性中:
Device.findAll({
attributes: [
[
sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
true
),
'contains'
]
]
where: {
name: "cellphone",
contains: true
}
});
但是我收到有关设备表中不存在的错误。我知道它不存在,我在属性中计算了它..
您可以简单地使用
Op.and
/Op.or
将此几何条件与其他条件结合起来(取决于您需要获得什么):
Device.findAll({
where: {
[Op.and]: [
sequelize.where(
sequelize.fn('ST_Within', sequelize.col('coord'), sequelize.fn('ST_GeomFromText', 'POLYGON((lng2 lat2, lng3 lat3, lng4 lat4, ...))')),
true
),
{
name: "cellphone"
}
]
}
});