PHP纬度和经度半径

时间:2016-08-08 16:37:59

标签: php mysql google-maps maps latitude-longitude

我提供服务,将附近的驾驶员位置给乘客。

这个查询有效吗?它实际上搜索附近的乘客位置半径吗?

我只是将纬度和经度设为一个数字。

你们可以向我核实或解释一下吗?

user
user.username

1 个答案:

答案 0 :(得分:2)

你的SQL查询看起来像这样:

$stmt = $dbi->prepare("SELECT id, name, latitude, longitude,
                (ACOS(COS(RADIANS(?)) * COS(RADIANS(b.latitude)) * COS(RADIANS(b.longitude) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(b.latitude)))) as distance 
                FROM driver
                WHERE   distance <= 10/6371.0");
$stmt->bind_param('sss', $latitude1,$longitude1,$latitude1); 

<强>解释
在上面的查询中,我将驾驶员与乘客的距离计算为distance,然后选择那些位于10公里范围内的驾驶员。
distance <= 10/6371语句中,使用6371,因为它是以kms为单位的地球半径值。如果您想以英里计算距离,可以使用3956代替6371,因为3956是地球半径(英里)。 有关这方面的更多信息可以在here找到 如果您还想检索乘客的详细信息,请使用不同的查询而不是加入,因为您必须拥有乘客的主键,因为他是请求驾驶员列表的人。

更新

$stmt = $dbi->prepare("SELECT id, name, latitude, longitude,
            6371 * (ACOS(COS(RADIANS(?)) * COS(RADIANS(b.latitude)) * COS(RADIANS(b.longitude) - RADIANS(?)) + SIN(RADIANS(?)) * SIN(RADIANS(b.latitude)))) AS distance
            FROM     driver
            HAVING distance <= 10
            ORDER BY distance ASC");
    $stmt->bind_param('sss', $latitude1,$longitude1,$latitude1);