在 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);
干杯
进一步阅读:
我有一个 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);
干杯
进一步阅读: