node.js - 如何使用 sequelize 搜索经纬度的数据库表

标签 node.js geolocation sequelize.js

我有一个商店表,它有一列 lat_long ,它将每个商店纬度/经度存储为 sequelize 中的几何点。我想根据来自前端的请求正文的纬度/经度的接近度来搜索商店。已尝试在 Stackoverflow 中利用与此相关的许多相关主题(答案),但了解到的是查询可以这样编写。

const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`);

    User.findAll({
      attributes: [[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location),'distance']],
      order: 'distance',
      limit: 10,
      logging: console.log
    })
    .then(function(instance){
      console.log(instance);
    })

已经尝试过,它工作正常,但我面临的挑战是;在这个例子和我看到的几乎所有样本中,他们使用了只返回距离的属性,但我想返回表中的所有字段。然后我尝试删除该属性,然后我得到的响应没有根据几何(距离)进行搜索,我也尝试使用 where 但出现错误。

下面显示的是我的最新查询,该查询返回错误,请问我该如何处理?谢谢你。
export const getNearestStoreWithCategory = async (lat, long) => {
  try {
    const location = sequelize.literal(`ST_GeomFromText('POINT(${lat} ${long})')`);
    const distance = sequelize.fn('ST_Distance_Sphere', sequelize.literal('lat_long'), location)
    const storeArr = await Store.findAll({
      order: distance,
      where: sequelize.where(distance),
      limit: 20
    })
    return storeArr
  } catch (error) {
    return error
  }
}

最佳答案

https://sequelize.org/v4/manual/tutorial/querying.html 的文档中,我猜测您在示例代码中缺少的是包括到要作为数据库响应返回的字段的距离,而不是仅计算距离并返回;

const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`);

User.findAll({
    attributes: {
        include: [[sequelize.fn('ST_Distance_Sphere', sequelize.literal('geolocation'), location),'distance']]
    },
    order: 'distance',
    limit: 10,
    logging: console.log
})
    .then(function(instance){
        console.log(instance);
    })

这应该给出一个查询;SELECT id, OTHER_FIELDS_OF_THIS_TABLE, ST_Distance_Sphere(geolocation) AS distance ...
现在,这是未经测试的代码,但是您可以尝试一下并评论它是否有帮助。

关于node.js - 如何使用 sequelize 搜索经纬度的数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642706/

相关文章:

angularjs - 如何在我的项目中使用 Bower 包组件

node.js - 如何在 Mongoose 查询中设置限制、偏移、跳过

geolocation - 如何获取 Roku 的设备地理位置?

mysql - Sequelize 上的热切加载关联

node.js - 类型错误 : Cannot read property 'create' of undefined error in express, postgres, sequelize

javascript - 如何使用 nodejs/js 框架开发移动应用程序?

node.js - 破坏 promise 链 - 停止执行下一个 'then'

javascript - 使用 Algolia 进行地理搜索

Javascript Canvas Lat Lng 绘图

sql - 在 LIKE 语句中对多个值进行序列化