Подтвердить что ты не робот

Получите результаты mysql на основе долготы широты

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

4b9b3361

Ответ 1

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

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
DEGREES (X) - радианы до градусов

60 - минут в градусе
1.1515 миль в морская миля
1.609344 - километров в миле