Есть несколько вещей:
- Вы пытались объединить переменную в строку без
||
- Правильный порядок: долгая широта , а не lat lon
- Для этого вам не нужна функция. Достаточно простого запроса с функцией
ST_Distance
Но в случае, если он вам нужен для других целей:
CREATE OR REPLACE FUNCTION distances(lat1 float, lon1 float, lat2 float, lon2 float)
RETURNS float AS $$
BEGIN
RETURN (
SELECT
ST_Distance(
ST_SetSRID(ST_MakePoint(lon1,lat1),4326),
ST_SetSRID(ST_MakePoint(lon2,lat2),4326), false));
END;
$$ LANGUAGE plpgsql;
В противном случае это SQL запрос будет делать:
SELECT ST_Distance(
ST_SetSRID(ST_MakePoint(51.23,8.83),4326),
ST_SetSRID(ST_MakePoint(51.24,8.55),4326), false);
Ура
Дальнейшее чтение: