gpt4 book ai didi

sql - PostGIS:在多边形中选择点的函数

转载 作者:行者123 更新时间:2023-11-29 13:05:16 25 4
gpt4 key购买 nike

我已经为此苦苦思索了几个小时,但由于我对 PostgreSQL 和 PostGIS 还比较陌生,所以找不到解决方案。我正在尝试创建一个存储过程(函数),它将返回指定点几何图形位于指定多边形内的所有位置。

这是我的 PostgreSQL 函数:

CREATE OR REPLACE FUNCTION public.spGeoPoly(polystring text) RETURNS setof locations
AS $$
BEGIN
RETURN QUERY
SELECT * FROM locations
WHERE ST_Contains(ST_GeomFromText('POLYGON((polystring))', 4326), point_geom);
END;
$$ LANGUAGE plpgsql;

我已经用硬编码的多字符串对此进行了测试,它可以工作,但作为具有输入字符串的函数,例如:

SELECT spGeoPoly('50.4 8.2,50.3 9.3,49.9 9.5,49.7 8.8,49.9 7.8,50.4 8.2');

我得到一个错误:

ERROR:  parse error - invalid geometry
HINT: "polygon((" <-- parse error at position 9 within geometry

我假设我的输入文本没有正确转换为创建多边形所需的格式,因为位置 9 是多边形参数字符串的开头。如何修复文本参数?

我正在使用 PostgreSQL 8.4.13 和 PostGIS 1.5.8。

最佳答案

如您所知,这是一个简单的修复。我写信是为了解释修复。

你的函数是:

CREATE OR REPLACE FUNCTION public.spGeoPoly(polystring text) RETURNS setof locations
AS $$
BEGIN
RETURN QUERY
SELECT * FROM locations
WHERE ST_Contains(ST_GeomFromText('POLYGON((polystring))', 4326), point_geom);
END;
$$ LANGUAGE plpgsql;

麻烦的地方是:

ST_GeomFromText('POLYGON((polystring))', 4326)

这告诉 PostgreSQL 要做的是获取字符串 Polygon((polystring)) 并将其传递给 ST_GeomFromText 函数的第一个参数。这当然不是你的意思。您想要使用 polystring.

的值构造多边形

要更正此问题,只需连接字符串:

ST_GeomFromText('POLYGON((' || polystring || '))', 4326)

那么 PostgreSQL 会很高兴。

关于sql - PostGIS:在多边形中选择点的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15141481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com