Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用sequelize搜索具有纬度和经度的数据库表_Node.js_Geolocation_Sequelize.js - Fatal编程技术网

Node.js 如何使用sequelize搜索具有纬度和经度的数据库表

Node.js 如何使用sequelize搜索具有纬度和经度的数据库表,node.js,geolocation,sequelize.js,Node.js,Geolocation,Sequelize.js,我有一个存储表,它有一个列lat_long,将每个存储纬度/经度存储为sequelize中的几何点。我想根据从前端到请求正文的纬度/经度的接近度来搜索商店。我曾尝试在Stackoverflow中利用许多与此相关的主题(答案),但我学到的是,查询可以这样编写 const location = sequelize.literal(`ST_GeomFromText('POINT(${lng} ${lat})', 4326)`); User.findAll({ attributes

我有一个存储表,它有一个列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
  }
}
从上的文档中,我猜您在示例代码中缺少的是作为db响应返回的字段的距离,而不是仅计算距离并返回

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);
    })
这应该给出一个类似的查询;
选择id、此表的其他字段、ST\u Distance\u Sphere(地理位置)作为距离…


现在,这是一个未经测试的代码,但如果它有用或不有用,您可以尝试一下并发表评论。

请告诉我,我仍然需要一个答案或一种替代方法,谢谢@Orelongz它真的有用。它返回的正是我想要的。谢谢你,我非常高兴,感谢并尊重你的知识。