根据空间坐标获取最近的位置

时间:2013-10-08 20:46:27

标签: php mysql geolocation

我有一张充满纬度/经度的MySQL桌子。另一方面,我有一个客户端javascript / html5页面,它将坐标发送到服务器。

使用客户的坐标,我希望能够找到最近的位置。实现这一目标的最简单方法是什么?

SELECT * FROM places AS p WHERE p.latitude NEAR '49.8330001' AND p.longitude NEAR '-119.45600';这样的东西真的很棒。

我在这里遇到了一些问题,但他们没有给我一个正确的答案。我读到了关于MySQL的空间扩展以及其他一些可能做到这一点的SQL查询,但似乎没有什么真正“直截了当”,所以我认为可以通过一些我可以查看的例子来实现这一目标。

有人有这些经验吗?

4 个答案:

答案 0 :(得分:2)

以下PHP代码使用MySQL和PDO来查找最近的位置坐标。

它会创建一个JSON坐标数组。

// Prepare statements
$stmt = $dbh->prepare("SELECT  name, lat, lng,
           ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) )
           * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) 
           * sin( radians( lat ) ) ) ) AS distance FROM table 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);
$stmt->execute();
$rows = array();
while($row = $stmt->fetch()) {
 $rows[] = $row;
}
echo json_encode($rows);
exit;

使用此查询生成此Maps标记

答案 1 :(得分:0)

您可以使用四核。它是基于空间填充曲线的空间索引。你可以下载我的php类hilbert curve @ phpclasses.org。

答案 2 :(得分:-1)

为什么不在数组中计算数据库中数据点与数据库中每个坐标之间的距离。然后,您在此数组中选择min。

答案 3 :(得分:-1)

为什么不简单地创建一个5%坐标的公差,然后再做

$latplus5percent = $lat + .5*$lat; 
$latminus5percent = $lat - .5*$lat;
WHERE p.latitude BETWEEN $latplus5percent AND $latminus5percent 

[edit:format]

相关问题