使用MySQL SELECT AS获取当前的纬度/经度

时间:2011-04-10 05:13:26

标签: php mysql geolocation gps

我正在尝试检索用户当前纬度/经度位置附近的商家信息。

尝试使用MySQL的地理空间POINT无济于事,因此返回使用每条记录的DECIMAL lat / lon值。

以下功能是为了获取10公里内的列表(基于this formula)我发现SELECT不太正确,但我不确定如何定义((ACOS ... 1.1515) )作为距离然后也选择其他列。

// functions.php
function getDeals($type_of_deal) {
    $current_lat = -37.905;
    $current_lon = 175.505
    $result = mysql_query("
    SELECT i, company, 
        TIME_FORMAT(valid_time_start, '%l:%i %p'), 
        TIME_FORMAT(valid_time_end, '%l:%i %p'), 
        DATE_FORMAT(valid_expiry, '%D %b %y'),
        ((ACOS(SIN("$current_lat" * PI() / 180) * SIN(`company_lat` * PI() / 180) + 
        COS("$current_lat" * PI() / 180) * COS(`company_lat` * PI() / 180) * 
        COS(("$current_lon" – `company_lon`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
    AS distance
    FROM listings
    WHERE deal_type = '" .$type_of_deal. "'
    HAVING distance<=’10′ 
    ORDER BY `distance` ASC
    ");
return $result;

// location.php
$type_of_deal = food;
$result = getDeals($type_of_deal);
    if (mysql_num_rows($result)) {
        while($row = mysql_fetch_array($result)) {
            echo $row["deal_title"];
            }
     }

1 个答案:

答案 0 :(得分:1)

您可以尝试查看MySQL great circle distance。你也可以看看@ Google maps SQL api。它显示了如何在另一个位置附近找到位置。

现在专门查看您的代码,您会遇到一些错误。

  1. 声明后没有分号:

    $ current_lon = 175.505 $ result = mysql_query(“

  2. 没有字符串的连接(您对字符串使用双引号,但也在其中使用双引号)。

  3. 功能结束后没有}

  4. 以下是您的代码的快速清理:

    function getDeals($type_of_deal) {
        $current_lat = -37.905;
        $current_lon = 175.505
        $result = mysql_query('SELECT i, company, 
            TIME_FORMAT(valid_time_start, "%l:%i %p"), 
            TIME_FORMAT(valid_time_end, "%l:%i %p"), 
            DATE_FORMAT(valid_expiry, "%D %b %y"),
            ((ACOS(SIN('.$current_lat.' * PI() / 180) * SIN(`company_lat` * PI() / 180) + 
            COS('.$current_lat.' * PI() / 180) * COS(`company_lat` * PI() / 180) * 
            COS(('.$current_lon.' – `company_lon`) * PI() / 180)) * 180 / PI()) * 60 * 1.1515)
        AS distance
        FROM listings
        WHERE deal_type = "'.$type_of_deal.'"
        HAVING distance<=10 
        ORDER BY `distance` ASC');
        return $result;
    }