我正在使用Google Maps API v3将数据库中存储的所有位置显示为标记。 我想要做的是在地图下面显示一个列表,其中包含最近的位置(比如10公里内)以及它们的名称,描述&到用户当前位置的距离,按距离排序。我无法弄清楚如何构建查询。我目前有这个代码显示数据库中的所有位置:
$q = "SELECT name, image, description, price, lat, lng, rating, owner FROM places";
$res1 = mysqli_query($linkNew, $q);
while($row1 = mysqli_fetch_array($res1)){
echo "<div class='place'>";
echo "<h3 class='placeTitle'>" . $row1[0] . "</h2><br />";
echo "<img src='" . $row1[1] . "' class='placeImage' width='30' height='30' />";
echo "<p class='placeDescription'>" .$row1[2] . "</p><br />";
echo "<p class='placePrice'>€ " .$row1[3] . "/night</p><br />";
echo "<p class='placeRating'>" .$row1[6] . "/5</p><br />";
echo "<p class='placeOwner'>Owner: <a href='#'><b>" .$row1[7] . "</b></a></p><br />";
echo "</div>";
}
答案 0 :(得分:2)
$sql = "SELECT *, ( 3959 * acos( cos( radians(" . $lat . ") ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(" . $lng . ") ) + sin( radians(" . $lat . ") ) * sin( radians( lat ) ) ) ) AS distance FROM your_table HAVING distance < 5";
$lat
和$lng
是中心点的坐标,而lat / lng是您的表格列。以上将列出5 nm范围内的位置。将3959
替换为6371
以更改为公里。
此链接可能很有用:https://developers.google.com/maps/articles/phpsqlsearch_v3
选择用户位置:
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
userLat = position.coords.latitude;
userLng = position.coords.longitude;
});
}