Получить результаты из MySQL на основе широты и долготы - PullRequest
11 голосов
/ 20 августа 2010

У меня есть база данных mysql и 2 таблицы, скажем, клиенты и школы.Теперь у каждой таблицы есть столбцы широты и долготы.И мне нужно сделать SELECT, например, из второй таблицы, где школы находятся в заданном радиусе одной записи из первой таблицы.Расчеты должны быть сделаны на основе широты и долготы.PS: я использую PHP.

1 Ответ

10 голосов
/ 20 августа 2010

Вы можете рассчитать расстояние, используя Сферический закон косинусов :

SELECT DEGREES(ACOS(SIN(RADIANS(clients.latitude)) * SIN(RADIANS(schools.latitude)) + 
                    COS(RADIANS(clients.latitude)) * COS(RADIANS(schools.latitude)) 
                                                   * COS(RADIANS(clients.longitude 
                                                               – schools.longitude)))) 
       * 60 * 1.1515 * 1.609344 AS distance
FROM clients, schools HAVING distance < $radius

RADIANS (X) - градусы в радианы ACOS (X) - арккосинус X, то есть значение, косинус которого равен X ГРАДУСЫ (X) - радианы в градусы

60 - минут в градусе1.1515 - мили за морскую милю 1.609344 - километры в миле

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...