2013-11-14 88 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}