[postgis-users] Raster pixel value
Tom van Tilburg
tom.van.tilburg at gmail.com
Thu Nov 24 03:21:12 PST 2011
Yes, I think so.
Current windows build is *r8221
*
Also, I think ST_Union(raster) (which I used in the example) is not
included in this version yet.
You would have to download a prototype from.
http://trac.osgeo.org/postgis/browser/trunk/raster/scripts/plpgsql/st_union.sql
Chrs,
Tom
On 24-11-2011 12:07, Andreas Forø Tollefsen wrote:
> Great, Thank you so much for this.
> However, I do not seem to have the ST_MapAlgebraExpr(rast, rast.....)
> function. Was this implemented in rev 8001?
>
> Andreas
>
> 2011/11/24 Tom van Tilburg <tom.van.tilburg at gmail.com
> <mailto:tom.van.tilburg at gmail.com>>
>
> Andreas,
>
> We did approx. the same thing for non-quadrate polygons. Perhaps
> it might be useful:
>
> Step 1: Make a raster from every polygon, based on the grid
> specifications of the elevation raster. Here is also the solution:
> the raster cells will only be created for cells that have their
> midpoint *inside* your geometry.
> ST_AsRaster(a.geom, b.rast, '<pixtype>')
>
> Step 2: Overlay the elevation raster with the raster you just
> created and keep only the values of the elevation raster
> ST_MapAlgebraExpr(
> <raster from geometry>
> ,b.rast
> ,'rast2' -- <-- keep only raster 2 value
> , '<pixtype>','INTERSECTION','0','0',0
> )
>
> Step 3: get the mean from the statistics on the resulting raster
> (ST_SummaryStats(
> (ST_Union( -- < --- we did a UNION because we occasionaly had
> vectors crossing tiled rasters
> <overlay raster>
> )).rast
> )).mean As avg_height
>
> That did the trick. Complete script is below.
>
> I suspect your method of doing a ST_Intersection for every pix.
> makes it slower because it creates a geometry first that you do
> not really need.
>
> Cheers,
> Tom
>
> ----------
> FULL SCRIPT
>
>
> SELECT
> a.gid As id,
> (ST_SummaryStats(
> (ST_Union(
> ST_MapAlgebraExpr(
> ST_AsRaster(a.geom, b.rast, '32BF')
> ,b.rast
> ,'rast2', '32BF','INTERSECTION','0','0',0
> )
> )).rast
> )).mean As avg_height
>
> FROM
> polygons.grid a LEFT JOIN
> rasters.elev b
> ON ST_Intersects(a.geom, b.rast)
> GROUP BY a.gid
>
>
>
> On 24-11-2011 11:14, Andreas Forø Tollefsen wrote:
>> Hi,
>>
>> I am trying to calculate the average pixel value in a elevation
>> raster inside quadrate polygons.
>> However, I am not getting the correct values from my query:
>>
>> SELECT gid, AVG(((foo.geomval).val)) as avgmnt
>> FROM (SELECT p.gid, ST_Intersection(p.cell, r.rast) AS geomval
>> FROM mountain r, priogrid_land p WHERE ST_Intersects(p.cell,
>> r.rast, ) AND p.gid =186124) AS foo
>> GROUP BY gid ORDER BY gid;
>>
>> The problem here is that the ST_Intersects(geom, rast) takes into
>> consideration the pixels that is outside, but touches the border
>> of the quadrate polygons. Then, the average values for each
>> quadrate polygon is affected by pixels inside other polygons.
>> This will potentially lead to a flawed result.
>> So what I want is to be able to calculate the average value for
>> the pixels INSIDE the polygon excluding those outside.
>>
>> How can i restrict the AVG pixel value to be calculated only for
>> pixels that is inside the polygon, and not the pixels that touch
>> the outside of the border?
>>
>> Thanks!
>>
>> Best,
>> Andreas
>>
>>
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net <mailto:postgis-users at postgis.refractions.net>
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> <mailto:postgis-users at postgis.refractions.net>
> http://postgis.refractions.net/mailman/listinfo/postgis-users
>
>
>
>
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20111124/da73fcbf/attachment.html>
More information about the postgis-users
mailing list