powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Делюсь хранимкой. Расчет расстояний по координатам
1 сообщений из 1, страница 1 из 1
Делюсь хранимкой. Расчет расстояний по координатам
    #39307191
dmaytry79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Расчет расстояний по координатам. Улучшенная формула гаверсинусов.
http://gis-lab.info/qa/great-circles.html

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
DELIMITER //
CREATE FUNCTION DISTANCE(lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE)
RETURNS DOUBLE
BEGIN
    DECLARE deltaLng, cosLat1, cosLat2, sinLat1, sinLat2, cosDeltaLng, sinDeltaLng, y1, y2, x1, x2, x, y, R DOUBLE;
    SET R=6372795;
    SET lat1 = lat1*0.017453292519943295769;
    SET lng1 = lng1*0.017453292519943295769;
    SET lat2 = lat2*0.017453292519943295769;
    SET lng2 = lng2*0.017453292519943295769;
    SET deltaLng = ABS(lng2-lng1);
    SET cosLat1 = COS(lat1);
    SET cosLat2 = COS(lat2);
    SET sinLat1 = SIN(lat1);
    SET sinLat2 = SIN(lat2);
    SET cosDeltaLng = COS(deltaLng);
    SET sinDeltaLng = SIN(deltaLng);
    SET y1 = cosLat2*sinDeltaLng;
    SET y2 = cosLat1*sinLat2-sinLat1*cosLat2*cosDeltaLng;
    SET y = SQRT(y1*y1+y2*y2);
    SET x1 = sinLat1*sinLat2;
    SET x2 = cosLat1*cosLat2*cosDeltaLng;
    SET x = x1 + x2;
    RETURN ATAN2(y,x)*R;
END //
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Делюсь хранимкой. Расчет расстояний по координатам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]