在 table 中使用 ST_Distance

Using ST_Distance in a table

我有一个 table,带有 id、x、y 值,我需要使用 posgresql 中的函数找到两点之间的距离。

    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;

但是当我传递值时错误抛出:

请多多指教。

有几件事:

  • 您试图在没有 ||
  • 的情况下连接字符串中的变量
  • 正确的顺序是 lon lat,而不是 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);

干杯

进一步阅读: