[postgis-users] raster query

Stephen Crawford src176 at psu.edu
Fri Nov 4 07:45:18 PDT 2016


I had to make just a few minor adjustments, only about casting types 
which you couldn't have know about anyway.  Worked well.  Many Thanks.

On 11/3/2016 8:20 AM, Birgit Laggner wrote:
> Hi Stephen,
>
> here my proposed solution (untested!!)
>
> DO $$
> DECLARE r record; doy date;
> BEGIN
>
> FOR r IN (SELECT DISTINCT ST_Value(rast,x,y) AS obs_date FROM 
> doy_raster, generate_series(1,(SELECT ST_Width(rast) FROM doy_raster)) 
> AS x, generate_series(1,(SELECT ST_Height(rast) FROM doy_raster)) AS 
> y) LOOP
>
>     doy := r.obs_date;
>
>     EXECUTE
>     'INSERT INTO accum_risk (obs_date, rast)
>      SELECT '||doy||',
>             ST_Union(ST_MapAlgebra(a.rast, b.rast,
>                      ''CASE WHEN [rast2]='||quote_literal(doy)||' THEN 
> [rast1] ELSE 0 END'',
>                      ''64BF'',''INTERSECTION''),''SUM'')
>      FROM daily_risk AS a, doy_raster AS b
>      WHERE a.obs_date BETWEEN '||quote_literal(doy)||'::date - ''60 
> days''::interval AND
>                               '||quote_literal(doy);
>
> END LOOP;
>
> END $$;
>
> The idea is to loop over the all existing observation dates from 
> doy_raster and use ST_MapAlgebra to limit the raster cells from 
> daily_risk raster to those intersecting with raster cells from 
> doy_raster with the corresponding observation date for the current loop.
> As already mentioned, the code is not tested (because I don't have 
> similar datasets available)...
>
> Regards,
>
> Birgit
>
>
> Am 02.11.2016 um 21:51 schrieb Stephen Crawford:
>> Hi All,
>>
>> I am hoping somebody can help me with a query.  I have a table of 
>> rasters where each record is date ("obs_date") and raster containing 
>> a risk value of 0  or 1.  My easy, successful query to accumulate the 
>> risk values over the previous 60 days is:
>>
>> INSERT INTO accum_risk (obs_date, rast)
>> SELECT '1979-07-15', ST_Union(rast,'SUM')
>> FROM daily_risk
>> WHERE obs_date BETWEEN '1979-05-16' AND '1979-07-15';
>>
>> My final goal--for which I am asking help--is similar to the above 
>> query, but it will reference another raster table.  This table has 
>> for each grid cell a value for the day of year (DOY) from which the 
>> 60 day accumulation should be made. Conceptually:
>>
>> FOR EACH doy_cell IN doy_raster
>> SELECT ST_Union(rast,'SUM')
>> FROM daily_risk
>> WHERE obs_date BETWEEN doy-60 AND doy;
>>
>> Any help is greatly appreciated.
>>
>> Thanks,
>> Steve
>> -- 
>> Stephen Crawford
>> Center for Environmental Informatics
>> The Pennsylvania State University
>> src176 at psu.edu
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/postgis-users
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/postgis-users

-- 
Stephen Crawford
Center for Environmental Informatics
The Pennsylvania State University
src176 at psu.edu
814.865.9905

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20161104/cd5a7ae1/attachment.html>


More information about the postgis-users mailing list