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

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

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

2017-04-23 10:46 | Комментарии

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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.
Вот такой короткий пост в этом году, надеюсь рецепт этот поможет многим!
Спасибо за внимание! Спишемся.

Комментарии