Использование ST_Distance в таблице - PullRequest
1 голос
/ 16 июня 2020

У меня есть таблица со значениями id, x, y, мне нужно найти расстояние между двумя точками, используя функцию в posgre sql.

    CREATE OR REPLACE FUNCTION distances(lat1 float, lon1 float, lat2 float, lon2 float)
RETURNS float AS $dist$
    BEGIN
        SELECT ST_Distance(
  ST_GeogFromText('SRID=4326;POINT(lat1 lon1 )')
, ST_GeogFromText('SRID=4326;POINT(lat2 lon2)'), false);
    END;
$dist$ LANGUAGE plpgsql;

Но ошибка выдается, когда я передаю значение: enter image description here

Пожалуйста, дайте мне представление.

1 Ответ

3 голосов
/ 16 июня 2020

Есть несколько вещей:

  • Вы пытались объединить переменную в строку без ||
  • Правильный порядок: долгая широта , а не 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);

Ура

Дальнейшее чтение:

...