2013-11-14 28 views
0

我目前使用的是Postgres 9.1Postgres/Postgis - 查询剪辑光栅中的所有值

我的目标是用多边形剪辑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。否则,我有点难以找出如何做到这一点。子查询也许?尽管为了实现这个目标,我仍然无法做出任何事情。

感谢您的帮助!

回答

0

好吧我想我想出了阵列。如果我想在一个字符串中,我可以将我的数组转换为一个字符串。但是,如果任何人有这个清洗起来的任何建议,我将不胜感激,因为这似乎并不像简单的标记

SELECT p.gid, array_agg((subquery).tempval) as fcstval 
FROM pih_raster AS r, hwy_pih_vertex_buf AS p, 
( 
    SELECT p.gid AS tempgid, (ST_ValueCount(ST_Clip(r.rast, p.geom))).value AS tempval 
    FROM pih_raster AS r, hwy_pih_vertex_buf AS p 
    WHERE (r.start_time <= 1384624800) GROUP BY tempgid, tempval 
) AS subquery 
WHERE (r.start_time <= 1384624800) AND ((subquery).tempgid = gid) GROUP BY p.gid; 

下面是输出:

gid | fcstval 
-----+------------- 
    1 | {0,2} 
    2 | {0,2} 
    3 | {5} 
    4 | {0,1,2,3,5}