выбрать записи ресторана таблицы на определенном расстоянии от текущего местоположения с помощью php - PullRequest
0 голосов
/ 23 июня 2010

У меня есть таблица базы данных со списком ресторанов, включая их названия, широты и долготы.Я хотел бы выбрать все рестораны, которые находятся на определенном расстоянии от моего текущего местоположения.текущее местоположение определяется в php-файле (сейчас я просто использую статический широту и долготу).я нашел код для расчета расстояния:

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

но как мне включить это в мой запрос выбора?я попробовал это:

$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
    )";

но, конечно, это не работает, потому что он не распознает функцию.Могу ли я сначала выполнить отдельный запрос только для лат и lng, вычислить расстояния, а затем как-нибудь объединить их с вышеуказанным запросом?есть идеи?

спасибо.

1 Ответ

2 голосов
/ 23 июня 2010

Взгляните на вопрос , на который я ранее ответил.Вы можете создать сохраненную функцию в 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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...