在 PL\pgSQL 函数中使用几何?
Using geometry in PL\pgSQL functions?
我正在尝试用 PL\pgSQL 两种几何数据类型(例如多点和多行字符串)的过程语言创建一个函数。我想 select 所有点 30 米距离内的所有线。这是我尝试过的:
Create OR Replace Function get_streets(bar.geom geometry foo.geom geometry)
Returns geometry AS $$
BEGIN
IF ST_DWithin(bar.geom, foo.geom, 30.0) Then
Return foo.geom;
ELSE
Return null;
END IF
Return foo.geom;
END;
$$ Language plpgsql;
函数 returns 几何数据类型错误。对 plpgsql 函数中的 using/handling 几何数据有什么建议吗?
你的函数中有不少小的语法错误。有关工作功能,请参阅以下版本:
CREATE FUNCTION get_streets(g1 geometry, g2 geometry) RETURNS geometry AS $$
BEGIN
IF ST_DWithin(g1, g2, 30.0) THEN
RETURN g2;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
最重要的是:不要对参数使用 table.field
符号。相反,使用简单的名称并在调用函数时使用适当的字段:
SELECT get_streets(bar.geom, foo.geom)
FROM bar
JOIN foo on ...
顺便说一下,您完全可以在不使用函数的情况下获得相同的功能:
SELECT foo.geom
FROM foo
JOIN bar ON ST_DWithin(bar.geom, foo.geom, 30)
WHERE <other conditions>;
我正在尝试用 PL\pgSQL 两种几何数据类型(例如多点和多行字符串)的过程语言创建一个函数。我想 select 所有点 30 米距离内的所有线。这是我尝试过的:
Create OR Replace Function get_streets(bar.geom geometry foo.geom geometry)
Returns geometry AS $$
BEGIN
IF ST_DWithin(bar.geom, foo.geom, 30.0) Then
Return foo.geom;
ELSE
Return null;
END IF
Return foo.geom;
END;
$$ Language plpgsql;
函数 returns 几何数据类型错误。对 plpgsql 函数中的 using/handling 几何数据有什么建议吗?
你的函数中有不少小的语法错误。有关工作功能,请参阅以下版本:
CREATE FUNCTION get_streets(g1 geometry, g2 geometry) RETURNS geometry AS $$
BEGIN
IF ST_DWithin(g1, g2, 30.0) THEN
RETURN g2;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
最重要的是:不要对参数使用 table.field
符号。相反,使用简单的名称并在调用函数时使用适当的字段:
SELECT get_streets(bar.geom, foo.geom)
FROM bar
JOIN foo on ...
顺便说一下,您完全可以在不使用函数的情况下获得相同的功能:
SELECT foo.geom
FROM foo
JOIN bar ON ST_DWithin(bar.geom, foo.geom, 30)
WHERE <other conditions>;