powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / есть долгота и широта 2х точек. как получить расстояние между ними в км?
3 сообщений из 3, страница 1 из 1
есть долгота и широта 2х точек. как получить расстояние между ними в км?
    #39452618
sql_dev543
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть долгота и широта 2х точек. как получить расстояние между ними в км?
...
Рейтинг: 0 / 0
есть долгота и широта 2х точек. как получить расстояние между ними в км?
    #39452636
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
есть долгота и широта 2х точек. как получить расстояние между ними в км?
    #39452673
Andrej_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так :)
Код: sql
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
CREATE FUNCTION fdistance(pnlat0 double precision, pnlon0 double precision, pnlat1 double precision, pnlon1 double precision) RETURNS double precision
    LANGUAGE plpgsql
    AS $$
DECLARE
-- расчет расстояния между двумя координатами
Distance double precision; -- расстояние в метрах

BEGIN
/*
Кратчайшее расстояние между двумя точками на земной поверхности (если принять ее за сферу) определяется зависимостью:
cos(d) = sin(fА) * sin(fB) + cos(fА) * cos(fB) * cos(lА - lB)
где
fА и fB — широты (в радианах),
lА, lB — долготы данных пунктов (в радианах),
d — расстояние между пунктами (в радианах)
перевод в метры осуществляется по формуле:
L = d * R
где R = 6371210.0 м — средний радиус земного шара в книгах русских авторов
и 6378137.0 м - в расчетах OpenStreet и OpenLayers для WGS84

ПыСы: расстояние между двумя точками на [земной поверхности] плоскости
вычисляется также по формуле
L = SQRT(POWER(x1 - x0, 2) + POWER(y1 - y0, 2)) (в метрах)
где (x0,y0) и (x1,y1) - координаты точек В МЕТРАХ, ибо плоскость
*/

with rad as (
select radians(pnLat0) as Lat0R, radians(pnLat1) as Lat1R
)
select
round((acos(sin(rad.Lat0R) * sin(rad.Lat1R) + cos(rad.Lat0R) * cos(rad.Lat1R) * cos(radians(pnLon0) - radians(pnLon1))) * na)::numeric, 0)
into Distance
from gps.tellips, rad
where nid = 0; -- WGS84

/*
gps.tellips.na = 6378137
*/

RETURN Distance;
END;
$$;
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / есть долгота и широта 2х точек. как получить расстояние между ними в км?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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