Php 检索与特定GPS坐标匹配的项目+;距离

Php 检索与特定GPS坐标匹配的项目+;距离,php,mysql,gps,latitude-longitude,Php,Mysql,Gps,Latitude Longitude,我目前的MySQL数据库结构如下(简化): 条目 头衔 入门元 纬度 经度 我希望我的用户获取所有在坐标+距离(如果更容易的话,也可以是正方形)定义的圆内具有lat/lng的记录。我只是不知道从哪里开始。有人告诉我有一个数学方程式,但我不知道从哪里可以找到 我正在使用PHP/MySQL组合,希望查询数据库。该数据库包含大约10万行(到本月底将翻一番)我目前有一个查询,用于这个案例(WordPress数据库)。祝你好运;) 以下SQL查询用于计算坐标和表中坐标之间的距离 d=acos(sin(φ1

我目前的MySQL数据库结构如下(简化):

条目 头衔

入门元 纬度 经度

我希望我的用户获取所有在坐标+距离(如果更容易的话,也可以是正方形)定义的圆内具有lat/lng的记录。我只是不知道从哪里开始。有人告诉我有一个数学方程式,但我不知道从哪里可以找到


我正在使用PHP/MySQL组合,希望查询数据库。该数据库包含大约10万行(到本月底将翻一番)

我目前有一个查询,用于这个案例(WordPress数据库)。祝你好运;)


以下SQL查询用于计算坐标和表中坐标之间的距离

d=acos(sin(φ1).sin(φ2)+cos(φ1).cos(φ2).cos(Δλ)).R

查询使用

看看
"SELECT Id,Lat,Long,(6367 * acos( cos( radians(center_lat) )
  * cos( radians( Lat ) ) * cos( radians( Long ) - radians(center_lng) )
  + sin( radians(center_lat) ) * sin( radians( Lat ) ) ) ) AS distance FROM table 
  HAVING distance < radius ORDER BY distance ASC LIMIT 0 , 20"
// Prepare statement
    $stmt = $dbh->prepare("SELECT  name, lat, lng, (6367 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM gbarea HAVING distance < ? ORDER BY distance ASC LIMIT 0 , 20");
    // Assign parameters
    $stmt->bindParam(1,$center_lat);
    $stmt->bindParam(2,$center_lng);
    $stmt->bindParam(3,$center_lat);
    $stmt->bindParam(4,$radius);
    //Execute query
    $stmt->setFetchMode(PDO::FETCH_ASSOC);
    while($row = $stmt->fetch()) {
        echo "Name : ".$row['name'].", ";
            echo "Lat : ".$row['lat'].", " ;
            echo "Lng : ".$row['lng'].", ";
            echo "Distance : ".$row['distance'];
        echo "<br>";
        }