Sequelize – 在范围内寻找点
Sequelize – finding point in range
我有一个 Address
模型,它定义了 geometry
类型的 point
属性。
我想在传递 latitude
、longitude
和 range
时创建一个函数,它 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)
我有一个 Address
模型,它定义了 geometry
类型的 point
属性。
我想在传递 latitude
、longitude
和 range
时创建一个函数,它 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)