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

kha*_*jlk 1 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;
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*ick 5

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

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;
Run Code Online (Sandbox Code Playgroud)

最重要的是:不要table.field对参数使用符号。而是在调用函数时使用简单的名称并使用适当的字段:

SELECT get_streets(bar.geom, foo.geom)
FROM bar
JOIN foo on ...
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您无需使用任何功能就可以获得相同的功能:

SELECT foo.geom
FROM foo
JOIN bar ON ST_DWithin(bar.geom, foo.geom, 30)
WHERE <other conditions>;
Run Code Online (Sandbox Code Playgroud)