显示从数据库到用户的GeoLocation的最近位置

时间:2014-05-02 13:14:25

标签: javascript php sql google-maps-api-3

我正在使用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>";
            }       

1 个答案:

答案 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;
    });
}