[GRASS5] collecting into a vector polygons statistics of raster
hamish_nospam at yahoo.com
Sun Apr 2 21:48:58 EDT 2006
> How to collect raster pixels statistics (mean, min, max, stdev,
> etc...) into polygons of a vector? I have been asked if this is
> possible within GRASS GIS, but was unable to find a tool for that. In
> Erdas, it is called "Zonal Attributes".
> Anybody could please suggest a way,
[cc grasslist as this is probably more suited for that list]
[I'm assuming GRASS 6.1-cvs]
v.what.rast will do values at vector points.
r.what will query at given x,y.
v.to.db will upload vector feature info (area,etc).
for full vector area stats from a raster, you would need to do it
using a series of grass commands to calculate the values then upload
them to the vector's tables. The following is untested, but you should
be able to adapt it to make it work...
#add new coulumns
then use values from `r.describe -q1` to give to r.mapcalc in a loop,
for VALUE in `r.describe -q1 v_to_rast_map` ; do
echo "Processing $VALUE ..."
# set mask to just the polygon of interest
r.mapcalc "MASK=if(v_to_rast_map == $VALUE)"
# calc stats on that
eval `r.univar -g query_map`
if [ $? -ne 0 ] ; echo "error on val $VALUE" ; exit 1 ; fi
# upload values to vector map
echo "UPDATE vect_map SET min=$min WHERE cat=$VALUE" | db.execute
echo "UPDATE vect_map SET max=$max WHERE cat=$VALUE" | db.execute
# faster: save UPDATES to a file then run db.execute on that file when done
This could be added to v.what.rast I guess. I am more interested in
stats from a raster around a given buffer from each vector point..
More information about the grass-dev