[GRASS-user] [GRASSLIST:1141] Re: Qn. on extracting from multiple rasters, data corresponding to vector polygons

Hamish hamish_nospam at yahoo.com
Wed Jun 28 04:21:23 EDT 2006


Vishal Mehta wrote:
> I have a vector polygon shapefile which contains 8 polygons (each
> watershed is a polygon). I also have some 100 GRASS raster files of
> environmental data (rainfall, temperature etc).
>
> Whats the best way to extract for each watershed, the corresponding
> average data from each raster file and put it in a text file?
>
> I've looked at v.what.rast but it seems to be quite cumbersome for
> this application. I'm using Grass 6.0.1 on Ubuntu linux.


I think this can be easily done.

why not just

g.region rast=biggest_map
v.to.rast in=vectmap out=watersheds use=cat # or attr if ID column exists
r.mapcalc "MASK=if(watersheds == 1, 1, null() )"
r.univar rainfall




putting that in a loop:

g.region rast=typical_map
v.to.rast in=vectmap out=watersheds use=cat

r.info -r watersheds
min=1
max=8
eval `r.info -r watersheds`

#if IDs are not sequential use
# for WATERSHED in `r.stats -qn watersheds` ; do


# this is untested, but the general method works

echo "watershed|map|average_val" > results.txt

for WATERSHED in `seq $min $max` ; do
  g.remove MASK
  unset MEAN

  echo "Watershed: $WATERSHED   Map: $MAP"
  r.mapcalc "MASK=if(watersheds == $WATERSHED, 1, null() )"

  for MAP in `g.mlist type=rast pat=* fs=space` ; do
     #g.region rast=$MAP  # adjust to match res of each map
     MEAN=`r.univar -g $MAP | grep '^mean=' | cut -f2 -d=`
     echo "$WATERSHED|$MAP|$MEAN" >> results.txt 
  done

done
g.remove MASK



if maps are all different sizes and resolutions do the v.to.rast
step at the finest resolution to avoid aliasing problems.


good luck,
Hamish




More information about the grass-user mailing list