> I would like to create a raster of an area-weighted average value derived 
> from a
> polygon layer. The raster template is a 2km grid and the polygon layer is 
> also a
> grid but at 10km. If some one could recommend a (high level) strategy for 
> this if
> be grateful.

1) Create a vector grid having a x and a y like this:

CREATE TABLE yourgrid AS
SELECT (gvxy).geom geom, (gvxy).x x,  (gvxy).y y
FROM (SELECT ST_PixelsAsPolygons(rast) gvxy
             FROM (SELECT ST_MakeEmptyRaster(your own parameters here covering 
your polygon extent)) foo1) foo2

2) Make sure your polygon layer is indexed

CREATE INDEX yourpolylayer_geom_idx  ON yourpolylayer USING gist  (geom );

3) Intersect mygrid with your polygon layer and generate summary stats at the 
same time:

CREATE TABLE weightedvectorgrid AS
SELECT g.x, g.y, g.geom, (aws).weightedmean mean
FROM (SELECT ST_AreaWeightedSummaryStats(intgeom, p.value) aws, g.x, g.y, g.geom
      FROM (SELECT ST_Intersection(g.geom, p.geom) intgeom, p.value, g.x, g.y, 
g.geom
            FROM yourgrid g, yourpolylayer p
            WHERE ST_Intersects(g.geom, p.geom)
           ) foo
      GROUP BY g.x, g.y, g.geom
     ) foo2

The ST_AreaWeightedSummaryStats() function is not part of the PostGIS release 
but is available as part of the source tree:

http://trac.osgeo.org/postgis/browser/trunk/raster/scripts/plpgsql/st_areaweightedsummarystats.sql

4) Union all the geometry as a raster (this one might be a bit slow depending 
on the size of your grid)

CREATE TABLE weightedrastergrid AS
SELECT ST_Union(ST_AsRaster(geom, 'MEAN')) rast
FROM weightedvectorgrid

I wrote all these without testing so you might have some adjustment to do.

Let me know about your progress...

Pierre
_______________________________________________
postgis-users mailing list
postgis-users@postgis.refractions.net
http://postgis.refractions.net/mailman/listinfo/postgis-users

Reply via email to