Tengo un modelo de Address que tiene definido un atributo de point de tipo geometry . Quiero crear una función cuando paso latitude , longitude y range y devuelve todas las direcciones dentro de ese rango (en metros). Traté de seguir lo que se ha escrito aquí , pero me sale:
DatabaseError [SequelizeDatabaseError]: LWGEOM_dwithin: Operation on mixed SRID geometries (Point, 4326) != (Point, 0) Así es como definí por point en el modelo de Address :
point: { type: DataTypes.GEOMETRY('Point'), allowNull: true, },Y esta es la función que estoy tratando de escribir:
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'), }); };¿Cómo puedo hacer que esto funcione?
Si las geometrías en la base de datos se almacenan en el SRID 4326, entonces debe configurar el mismo SRID para su punto de prueba de esta manera:
Sequelize.fn('ST_SetSRID', Sequelize.fn('ST_MakePoint', longitude, latitude), 4326) Si es al revés, debe indicar SRID 4326 para la columna de point :
Sequelize.fn('ST_SetSRID', Sequelize.col('point'), 4326)