【问题标题】:Getting results by latitude and longitude from SQLite从 SQLite 按经纬度获取结果
【发布时间】:2018-10-23 21:25:34
【问题描述】:

我有一个包含事件的数据库表。每个事件都有一个位置(纬度和经度)。我正在编写一个 API,以便可以使用 Google Maps API 在地图上显示它们。我只想在地图当前指向的范围内显示记录。所以,我得到了地图的边界并将它们传递给 api。

var sql = `
  SELECT * 
  FROM event e 
  WHERE 1=1
`;
if(opts.status){
  sql += `AND e.status = '${opts.status}'`
}
if(opts.north){
  sql += `
          AND e.latitude IS NOT NULL
          AND e.latitude < ${opts.north}
        `
}
if(opts.south){
  sql += `
          AND e.latitude IS NOT NULL
          AND e.latitude > ${opts.south}
        `
}
if(opts.west){
  sql += `
          AND e.longitude IS NOT NULL
          AND e.longitude > ${opts.west}
        `
}
if(opts.east){
  sql += `
          AND e.longitude IS NOT NULL
          AND e.longitude < ${opts.east}
        `
}

这种方法效果很好,除非地图跨越 180° 线。然后我得到 0 个结果。这是在这种情况下生成的 SQL:

   SELECT * 
   FROM event e 
   WHERE 1=1

           AND e.status = 'approved'

           AND e.latitude IS NOT NULL
           AND e.latitude < 66.00592309328745

           AND e.latitude IS NOT NULL
           AND e.latitude > -16.496223071414896

           AND e.longitude IS NOT NULL
           AND e.longitude > 170.34568706699213

           AND e.longitude IS NOT NULL
           AND e.longitude < -46.216812933007816

我的问题是,我该如何处理才能给我准确的结果?

【问题讨论】:

  • 为值添加条件并在需要时将and 切换为or(括号放置正确)?顺便说一句,如果您有纬度/经度的下限和上限,那么您重复了e.latitude/longitude IS NOT NULL
  • 我只是无法理解那些 AND 和 OR 语句应该是什么样子的逻辑。
  • 没那么难,现在你的条件是e.longitude &gt; 170.34568706699213 AND e.longitude &lt; -46.216812933007816,你能找到满足170 &lt; x &lt; -46x吗?

标签: javascript node.js sqlite


【解决方案1】:

我认为您应该尝试以下方法:

AND ((e.longitude > ${opts.west}
     AND e.longitude < ${opts.east}
     AND  ${opts.east} > ${opts.west})
OR ((e.longitude > ${opts.west}
     OR e.longitude < ${opts.east})
     AND  ${opts.east} < ${opts.west}))

也许对纬度做同样的事情?

【讨论】:

    猜你喜欢
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    相关资源
    最近更新 更多