PostgreSQL: расстояние между двумя координатами в метрах
Можно добавить функцию вида:
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 |
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$; |