【问题标题】:Query database with conditions on negative longitude查询带有负经度条件的数据库
【发布时间】:2011-11-03 15:14:25
【问题描述】:

关于谷歌地图和存储/检索坐标的小问题。我在 MySql 上运行一个数据库,将点的经度/纬度存储在 2 个单独的浮点字段中。我想执行查询以找到适合给定谷歌地图对象边界的点。

我从当前的谷歌地图获取最小/最大 lng/lat 并通过 PHP 执行查询。一切正常,除非我对经度有负值。当存在适合最小/最大 lng 的值时,它不会返回任何结果...我的查询如下所示:

SELECT * FROM points WHERE ((lng BETWEEN :lng_min AND :lng_max) AND (lat BETWEEN :lat_min AND :lat_max))

我检查了发送到查询/存储在数据库中的每个变量,每个变量都是有效的浮点数。这似乎没有任何意义。我错过了什么吗?

【问题讨论】:

  • 冒号是干什么用的?你不能跳过它们吗?
  • 使用 PDO?您的数据库记录查询?我会检查并确保正在运行的查询是您所期望的。尝试运行您认为作为查询发送到数据库的内容,看看结果是否是您想要的。

标签: php sql google-maps geolocation latitude-longitude


【解决方案1】:

这里的一个问题是您的查询中的负值会导致问题。例如,如果 lng_min 0,那么您应该像往常一样检索数据。但是,如果 lng_max0(这可能会发生,因为地球是圆的,并且从 -180 度到 +180 度经度的过渡只有几步之遥),那么数据库不检索任何数据是有意义的值。如果是后者,那么您应该事先检查 lng_max 0 并为查询中的所有经度进行原点偏移(例如 (a+180) % 360)。在任何情况下,查询失败的 lng_min/lng_max 对的一些示例都会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-16
    • 2018-01-27
    • 2014-03-01
    • 1970-01-01
    • 2016-11-22
    • 2014-11-21
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多