Как рассчитать расстояние между широтой и долготой с помощью SQL-запросов

Чтобы вычислить расстояние между двумя точками, указанными широтой и долготой, с помощью SQL, вы можете использовать различные методы. Вот несколько примеров:

Метод 1: формула хаверсинуса (MySQL)
Формула хаверсинуса обычно используется для расчета расстояний между двумя точками на сфере (например, Земле) с использованием их координат широты и долготы.

SELECT
    *,
    2 * 6371 * ASIN(SQRT(
        POWER(SIN((RADIANS(end_latitude) - RADIANS(start_latitude)) / 2), 2) +
        COS(RADIANS(start_latitude)) * COS(RADIANS(end_latitude)) *
        POWER(SIN((RADIANS(end_longitude) - RADIANS(start_longitude)) / 2), 2)
    )) AS distance
FROM
    your_table;

Метод 2: Формула Винсенти (PostgreSQL)
Формула Винсенти обеспечивает более точный расчет расстояний на поверхности Земли. Он учитывает форму Земли, которая представляет собой сплюснутый сфероид.

SELECT
    *,
    6371 * ATAN2(
        SQRT(
            POW(COS(RADIANS(end_latitude)) * SIN(RADIANS(end_longitude - start_longitude)), 2) +
            POW(COS(RADIANS(start_latitude)) * SIN(RADIANS(end_latitude)) - SIN(RADIANS(start_latitude)) * COS(RADIANS(end_latitude)) * COS(RADIANS(end_longitude - start_longitude)), 2)
        ),
        SIN(RADIANS(start_latitude)) * SIN(RADIANS(end_latitude)) + COS(RADIANS(start_latitude)) * COS(RADIANS(end_latitude)) * COS(RADIANS(end_longitude - start_longitude))
    ) AS distance
FROM
    your_table;

Метод 3: Расстояние по большому кругу (SQL Server)
Формула «Расстояние по большому кругу» — это еще один метод расчета расстояний на сфере.

SELECT
    *,
    6371 * ACOS(
        COS(RADIANS(start_latitude)) * COS(RADIANS(end_latitude)) *
        COS(RADIANS(start_longitude) - RADIANS(end_longitude)) +
        SIN(RADIANS(start_latitude)) * SIN(RADIANS(end_latitude))
    ) AS distance
FROM
    your_table;