Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / есть долгота и широта 2х точек. как получить расстояние между ними в км? / 3 сообщений из 3, страница 1 из 1
13.05.2017, 21:23
    #39452618
sql_dev543
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть долгота и широта 2х точек. как получить расстояние между ними в км?
есть долгота и широта 2х точек. как получить расстояние между ними в км?
...
Рейтинг: 0 / 0
13.05.2017, 22:54
    #39452636
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть долгота и широта 2х точек. как получить расстояние между ними в км?
...
Рейтинг: 0 / 0
14.05.2017, 09:21
    #39452673
Andrej_f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
есть долгота и широта 2х точек. как получить расстояние между ними в км?
Вот так :)
Код: 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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / есть долгота и широта 2х точек. как получить расстояние между ними в км? / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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