我目前正在使用 Postgres 9.1
我的目标是用多边形剪辑 PostGIS 栅格。然后我想要一个 postgres 数组或包含在该多边形中的每个光栅像素的分隔值集。这是我到目前为止得到的查询:
SELECT p.gid, (ST_ValueCount(ST_Clip(r.rast, p.geom))).value AS fval
FROM temp_raster AS r, temp_shapefile AS p
WHERE (r.start_time = 1384516800)
GROUP BY gid, fval;
这将输出:
gid | fcstval
-----+---------
1 | 0
1 | 2
2 | 0
2 | 2
3 | 5
4 | 0
4 | 1
4 | 2
4 | 3
4 | 5
这个数据很好,但我想为每个 gid 设置一组值,如下所示:
gid | fcstval
-----+----------
1 | 0,2
2 | 0,2
3 | 5
4 | 0,1,2,3,5
我遇到的麻烦是尝试将这些值聚合到数组或分隔字符串中。这是我对数组的尝试:
SELECT p.gid, array_agg((ST_ValueCount(ST_Clip(r.rast, p.geom))).value) AS fval
FROM temp_raster AS r, temp_shapefile AS p
WHERE (r.start_time = 1384516800)
GROUP BY gid;
这不起作用,并提供错误:
ERROR: set-valued function called in context that cannot accept a set
我的猜测是这是因为我不能以这种方式调用 array_agg。我很难弄清楚如何做到这一点。也许是一个子查询?我还没有想出任何东西来让它工作。
谢谢你的帮助!