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函数中使用/处理几何数据有什么建议吗?
您的函数中有很多小语法错误。有关工作功能,请参见以下版本:
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)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |