PostgreSQL: расстояние между двумя координатами в метрах

Можно добавить функцию вида:

CREATE OR REPLACE FUNCTION public.distance(
	lat1 double precision,
	lon1 double precision,
	lat2 double precision,
	lon2 double precision)
    RETURNS double precision
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
DECLARE
    R integer = 6371e3; -- Метры
    rad double precision = 0.01745329252;

    f1 double precision = lat1 * rad;
    f2 double precision = lat2 * rad;
    df double precision = (lat2-lat1) * rad;
    dl double precision = (lon2-lon1) * rad;

    a double precision = sin(df/2) * sin(df/2) + cos(f1) * cos(f2) * sin(dl/2) * sin(dl/2);
    c double precision = 2 * atan2(sqrt(a), sqrt(1-a));    
BEGIN                                                     
    RETURN R * c;        
END
$BODY$;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.