序列化:如何找到位置不同距离的点

时间:2019-01-13 20:24:19

标签: node.js sequelize.js geospatial

使用MySQL的Sequelize,我有一个Car表,该表与Localization表关联。 本地化包含纬度和经度,以显示汽车的本地化位置。

当前,Car包含maxRange属性,该属性对应于Car可以交付的以km为单位的最大距离。

我需要退回给定位置(经度和纬度)附近的所有汽车交付物

我尝试了一个原始查询,并且该查询正常运行,但是在获取包含模型时遇到了一些问题。

var query = "SELECT c.*, m.*, (6371 *acos(cos( radians( ? ) ) * cos(radians( l.lat ) ) * cos(radians( l.long ) - radians( ? )) + sin(radians( ? )) * sin(radians(l.lat)))) `distance` FROM Car c " +
"JOIN Localization l ON c.localizationId = l.id " +
"JOIN Model m ON c.modelId = m.id " +  
"HAVING `distance` < c.maxRangeDelivery ORDER BY `distance`;"

db.sequelize.query(query, {
    replacements: [lat, lng, lat],
    model: Car,
    mapToModel: true,
    type: db.sequelize.QueryTypes.SELECT
})

我放弃了此解决方案,并重新进行了序列查询,以使其更加正确并轻松获取我的关联。

这是我的新代码(简体)

var includeModelAndMaker = {
    model: db.Model,
    as: 'model',
    include: [{
        model: db.Maker,
        as: 'maker'
    }]
}

Car.findAll({
   include: [includeModelAndMaker],
   where: {
       modelId: modelId, 
       year: {
           $between: [minYear, maxYear]
       } 
   }
 }).then(function (cars) {
     response.json(JSON.stringify(cars))
 })

我不知道如何处理地理空间和Sequelize,我找到了一个示例,但是仅使用固定距离,并且我还没有设法将其适应多个距离(这里的距离是我在Car表中的maxRange)< / p>

0 个答案:

没有答案