使用php选择距离当前位置一定距离内的餐厅表条目

使用php选择距离当前位置一定距离内的餐厅表条目,php,sql,database,distance,latitude-longitude,Php,Sql,Database,Distance,Latitude Longitude,我有一个数据库表,表中列出了餐馆的名称、纬度和经度。我想选择离我当前位置一定距离内的所有餐厅。当前位置是在php文件中确定的,现在我只使用静态lat&lng。我找到了计算距离的代码: function findDist($lat, $lng){ $currLat = 33.777563; $currLng = -84.389959; $currLat = deg2rad ($currLat); $sincurrLat = sin ($currLat);

我有一个数据库表,表中列出了餐馆的名称、纬度和经度。我想选择离我当前位置一定距离内的所有餐厅。当前位置是在php文件中确定的,现在我只使用静态lat&lng。我找到了计算距离的代码:

function findDist($lat, $lng){
    $currLat = 33.777563;
    $currLng = -84.389959;

    $currLat = deg2rad ($currLat);
    $sincurrLat = sin ($currLat);
    $lat = deg2rad ($lat);
    $currLng = deg2rad ($currLng);
    $lng = deg2rad ($lng);

    return round((7926 - 26 * $sincurrLat) * asin (min (1, 0.707106781186548 * sqrt ((1 - (sin ($lat) * $sincurrLat) - cos ($currLat) * cos ($lat) * cos ($lng - $currLng))))),4);
}  
但是如何将其合并到select查询中呢?我试过这个:

$query = "SELECT *
FROM
    eateries E
WHERE
    EXISTS
    (
        SELECT *
        FROM
            eateries_hours EH, eateries_type ET
        WHERE
            EH.eateries_id = E.id AND ET.eateries_id = E.id
            AND findDist(E.lat, E.lng) <= .5
    )";
但是,这当然不起作用,因为它没有识别函数。我可以先单独查询LAT和lngs,计算距离,然后以某种方式将其与上面的查询连接起来吗?有什么想法吗

谢谢。

看看我之前的回答。您可以在MySQL或其他数据库中创建一个存储函数,只要您有纬度和经度

DELIMITER $$

DROP FUNCTION IF EXISTS `FindDist` $$
CREATE FUNCTION `FindDist` (lt1 DOUBLE,lg1 DOUBLE,lt2 DOUBLE,lg2 DOUBLE) RETURNS DOUBLE
DETERMINISTIC
BEGIN
    DECLARE dist,eradius DOUBLE;

    SET eradius=3963.1;
    SET dist=Acos(Cos(lt1) * Cos(lg1) * Cos(lt2) * Cos(lg2) + Cos(lt1) * Sin(lg1) * Cos(lt2) * Sin(lg2) + Sin(lt1) * Sin(lt2)) * eradius;
    RETURN dist;
END $$

DELIMITER ;

除非你喜欢重新发明轮子,否则你真的应该看看MySQL的Spatial组件。这是存储过程和函数的MySQL文档感谢帮助!这看起来会有用的。不幸的是,我得到了一个错误,但我认为这是phpMyAdmin的问题,而不是代码的问题。我会努力弄清楚的。顺便问一下,这个函数输出的单位距离英里、公里等是多少?以英里为单位。要以km为单位输出,请将eradius的值更改为6378.1。