在PL \ pgSQL函数中使用几何?

时间:2016-03-20 17:56:42

标签: postgresql postgis plpgsql

我试图在PL \ pgSQL程序语言中创建一个函数,例如两个几何数据类型,多点和多行字符串。我想为所有点选择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;

由于几何数据类型,该函数返回错误。有关在plpgsql函数中使用/处理几何数据的任何建议吗?

1 个答案:

答案 0 :(得分:4)

你的函数中有很多小的语法错误。有关工作功能,请参阅以下版本:

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>;