在表中使用stu距离

kyks70gy  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(268)

我有一个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;

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

请给我一个解决方案。

1rhkuytd

1rhkuytd1#

有几件事:
您试图在没有 || 正确的顺序是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);

干杯
进一步阅读:
ST_MakePoint ST_SetSRID

相关问题