【问题标题】:Compare latitude and longitude in a rectangle area (no distance)比较矩形区域的经纬度(无距离)
【发布时间】:2017-09-06 12:24:06
【问题描述】:

我有一个包含用户的数据库,在数据库 (mysql) 中定义了纬度和经度,然后我使用 php 脚本提取信息。

手机上的一个应用程序允许绘制一个矩形,并将左上角的坐标和右下角的坐标发送给我。

如何比较纬度和经度以找到矩形中的用户?我找到了许多带有圆圈和距离的解决方案,但它不符合我的需求......

我当前的查询,错误! :

SELECT * FROM users WHERE latitude BETWEEN ".$latitudeTopLeft." AND ".$latitudeBottomRight." AND longitude BETWEEN ".$longitudeTopLeft." AND ".$longitudeBottomRight.";

有人知道吗?谢谢...

【问题讨论】:

  • 曲面上的矩形是什么样子的?
  • 您的查询很好.. 在 lat 之间更改顺序,因为 latitudeBottonRight latitude BETWEEN ".$latitudeBottomRight." AND ".$latitudeTopLeft."
  • 名称longitudeTopLeft 有点奇怪。这只是一个命名怪癖吗?通常经度或纬度是上/下或左/右坐标。

标签: php mysql


【解决方案1】:

MySQL 有一些基本的空间扩展(参见空间扩展)。这允许您将纬度/经度点存储为点记录。使用它,您可以使用“minimum bounding rectangle”创建选择。

但由于您已经有一个现有的结构,您可能需要在两者之间使用。

$LAT1 = min($latitudeTopLeft, $latitudeBottomRight);
$LAT2 = max($latitudeTopLeft, $latitudeBottomRight);

$LON1 = min($longitudeTopLeft, $longitudeBottomRight);
$LON2 = max($longitudeTopLeft, $longitudeBottomRight);

$sql = 'SELECT * FROM users WHERE latitude BETWEEN '.$LAT1.' AND '.$LAT2.' AND longitude BETWEEN '.$LON1.' AND '.$LON2.';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2015-04-05
    • 2019-01-08
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多