Блог Василия Мазепина

Пишу о том, что кажется интересным

23.04.2017

Расстояние между двумя координатами

Доброго времени суток, коллеги и гости. Как то понадобилось мне узнать расстояние между двумя географическими координатами, причем наиболее легким и незамысловатым путем, еще и запросом в MySQL.

Долго бродил я по сети натыкаясь на разные рецепты. И наткнулся на официальный мануал от Google(сейчас уже ссылку не найду), который дал мне вот такую формулу:

SQL
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
SELECT 
    id,
    (6371 *
        acos(
            cos(radians(37)) *
            cos(radians(lat)) *
            cos(radians(lng) - radians(-122)) +
            sin(radians(37)) *
            sin(radians(lat))
        )
    ) AS distance
FROM markers
HAVING distance < 25
ORDER BY distance
LIMIT 0,20;

В этом SQL-запросе находится 20 ближайших локаций в радиусе 25 километров для координаты (37, -122). Если необходимо искать в милях, замените в запросе 6371 на 3959. Такой запрос дает относительно неплохую точность, позволяя при этом не углубляться более сложными методами, такими как например Point в MySQL. Вот такой короткий пост в этом году, надеюсь рецепт этот поможет многим! Спасибо за внимание! Спишемся.