[GRASS-user] help to use r.mapcalc with decimal/binary (modis data)

Glynn Clements glynn at gclements.plus.com
Thu May 24 20:01:43 EDT 2007


andrew.haywood at poyry.com wrote:

> i am having some issues with analysing  MOD09 modis data in grass.  I 
> would like to mask out the cloud pixels using the below quality control 
> band.
> when i import this band the unsigned 16bit integer is converted in decimal 
> and I am unsure how to  use r.mapcalc to create a mask based on the 
> different bits. 
> 
> I am unsure how I should go about this (see *** section below). I would 
> like to try different selections to see which would make the best mask but 
> i am unsure how to do this against a binary field 
> 
> eg. r.mapcalc MASK="if(sur_refl_qc_250 == **** clear state **** , 1, 
> null())"
> 
> how do I select out the different bits to create the mask?
> 
> At this stage i am thinking of trying to convert the decimal back to 
> binary (not sure how to do this ) and then subselect columns (bits) eg 0-1 
> or 2-3 and the placing an if statement (eg. if column01 == "00" or if 
> column23 = "00").

Use 

	r.mapcalc MASK="if(sur_refl_qc_250 & 3 == 0 , 1, null())"

For the 

Given your description of the various bits, the coresponding masks are:

	Bits	Mask
	0-1	0x0003
	2-3	0x000C
	4-7	0x00F0
	8-11	0x0F00
	12	0x1000
	13	0x2000
	14	0x4000
	15	0x8000

The value to compare will need to be shifted into the correct range,
e.g. for "band 1 quality = missing input":

	r.mapcalc MASK="if(sur_refl_qc_250 & 0x00F0 == 0x00B0 , 1, null())"

If you're unfamiliar with binary arithmetic, there's some information
at:

	http://en.wikipedia.org/wiki/Binary_numeral_system

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-user mailing list