使用 postgresql 和 postgis 我有 2 个 openstreetmap 表,包含:
- 点:具有单一坐标的位置
- 多边形:具有坐标集的区域
现在,我尝试遍历 Point 表,并尝试使用 postgis 函数对每条记录进行一些计算,例如ST_Intersects()
。然后尝试将结果插入到另一个表中。
到目前为止,我只用 postgis 函数完成了简单的 SELECT
查询,它们基本上是这样工作的:
SELECT a.name, b.name
FROM table_point AS a, table_polygon AS b
WHERE a.name = 'Berlin' AND ST_Intersects(a.way, b.way);
注意:way
是两个表中包含几何数据的列。
回到我要操作的循环,我发现自己缺乏plpgsql基础。我创建了以下循环结构,但不知道如何为 postgis 函数选择第二组记录(table_point AS a, table_polygon AS b
)。
简而言之:如何选择 table_polygon
的记录以及 FOR 循环?
或者,是否有更好的方法来解决这个问题?
DO
$do$
DECLARE
r RECORD;
BEGIN
FOR r IN SELECT * FROM table_point
LOOP
RAISE NOTICE '%', r;
...
END LOOP;
END;
$do$ LANGUAGE plpgsql
在 Ubuntu 14.04 64 位上使用 PGSQL 9.3.5。
最佳答案
您正在按程序思考,而在大多数情况下,基于集合的方法在关系数据库中更胜一筹。喜欢:
INSERT INTO table_other (point, polygon, result)
SELECT a.name, b.name, calculate(a.?, b.?) AS result -- undefined what to do
FROM table_point a
JOIN table_polygon b ON ST_Intersects(a.way, b.way)
WHERE a.name = 'Berlin';
关于postgresql - 如何在 FOR 循环内进行选择以进行进一步计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27450490/