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

Posted

技术标签:

【中文标题】使用 MySQL SELECT AS 获取当前纬度/经度【英文标题】:Using MySQL SELECT AS for current Latitude / Longitude 【发布时间】:2011-04-10 05:13:25 【问题描述】:

我正在尝试检索靠近用户当前纬度/经度位置的列表。

已尝试 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】:

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

现在专门查看您的代码,您有几个错误。

    语句后没有分号:

    $current_lon = 175.505 $result = mysql_query("

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

    函数结束后没有

这里是您的代码的快速清理:

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;

【讨论】:

很好的回应 - 我想补充一点,您可以在以下位置找到执行相同操作的 PHP 代码:thetechnote.com/2011/02/3-useful-geolocation-functions-in-php

以上是关于使用 MySQL SELECT AS 获取当前纬度/经度的主要内容,如果未能解决你的问题,请参考以下文章

mysql 如何获取数据库下所有的表

MySQL:多个纬度和经度的附近位置

Mysql单个获取系统时间,年,月,日

Mysql获取系统时间,年,月,日

在MYSQL中获取10km距离的记录

如何使用JAVA获取我当前位置的经纬度