Sequelize – 寻找范围内的点
Posted
技术标签:
【中文标题】Sequelize – 寻找范围内的点【英文标题】:Sequelize – finding point in range 【发布时间】:2022-01-13 17:22:15 【问题描述】:我有一个 Address
模型,它定义了 point
类型的 geometry
属性。
我想在传递latitude
、longitude
和range
时创建一个函数,它会返回该范围内的所有地址(以米为单位)。我试图按照here 写的内容进行操作,但我得到了:
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'),
);
;
我怎样才能做到这一点?
【问题讨论】:
【参考方案1】:如果 DB 中的几何图形存储在 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)
【讨论】:
我绝对需要深入了解几何的工作原理!非常感谢 - 它解决了我的问题 :)!以上是关于Sequelize – 寻找范围内的点的主要内容,如果未能解决你的问题,请参考以下文章
Sequelize包括范围为1的对象:m constraint = false