【问题标题】:Find locations within a lat/lng bounding box在 lat/lng 边界框中查找位置
【发布时间】:2011-07-23 04:30:39
【问题描述】:

我有 4 个变量:

$southwest_lat、$southwest_lng、$northeast_lat、$northeast_lng

我还有一个数据库表,其中包含以下字段:名称、纬度和经度。

// First attempt, likely terribly wrong
$sql = "SELECT * FROM items WHERE
(Latitude >= '$southwest_lat' AND Latitude <= '$northeast_lat') AND
(Longitude >= '$southwest_lng' AND Longitude <= '$northeast_lng')";

如何在坐标形成的边界框中找到 DB 项?

编辑:谢谢大家,更正了查询的经度部分。

【问题讨论】:

  • 看起来你已经搞定了,你遇到了什么问题?也许从 SQL 中删除引号?
  • @Matt 您正在检查纬度和经度与您提供的纬度
  • 糟糕,我的错。我会相应地测试和更新问题。
  • @Patrick - 剪切和粘贴的危险,我认为 :-) 很好发现
  • 这部分内容可能会有所帮助stackoverflow.com/questions/4953105/… - 关于多边形相交的部分?

标签: php mapping latitude-longitude


【解决方案1】:

您正在将数据库中的纬度和经度与提交值的纬度进行比较。

此外,您不需要在查询中使用任何括号,这只会使查询变得混乱和复杂。

你想要这样的东西:

SELECT 
    *
FROM 
    items
WHERE
    Latitude >= $southwest_lat AND
    Latitude <= $northeast_lat AND
    Longitude >= $southwest_long AND
    Longitude <= $northeast_long;

【讨论】:

    【解决方案2】:

    如果您的应用程序可以有 $southwest_lng > $northeast_lng(180 度环绕,例如使用 Google 地图时),您可能需要检查并在这种情况下使用 NOT BETWEEN $northeast_lng AND $southwest_lng

    【讨论】:

    • 啊,是的。这正是问题所在。谢谢!
    • 不明白。我应该将哪个字段与NOT BETWEEN 进行比较?
    • 当然,代表经度的任何字段。查看问题。
    【解决方案3】:

    SELECT * FROM items 
    WHERE Latitude BETWEEN $southwest_lat AND $northeast_lat 
    AND Longitude BETWEEN $southwest_lng AND $northeast_lng
    

    工作得更好?

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2016-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多