Select to view content in your preferred language

Modis Mod08_M3 Data HDF file

1624
3
02-10-2012 04:22 AM
LaurenSmith
Emerging Contributor
Hi,

I'm not sure if anyone can help. I am using Modis MOD08_M3 data to look at aerosol data across Brazil. I've managed to load the file/subfile into Arc but I am unsure on the values of the data... I was under the impression the aerosol data had values between 1 and 0, however mine are much different to this.

If anyone has experience with this data and know how to get the actual values and/or literature on how to, it would be great to hear from you.

Thanks!
3 Replies
Luke_Pinner
MVP Regular Contributor
I'm not familiar with the MODIS atmosphere products, but a quick scan of the Algorithm Theoretical Basis Document shows that you need to apply a scale factor and offset to convert the values to floating point.

5.1. Descaling the SDS data
The local attributes �??scale_factor�?� and �??add_offset,�?� attached to each and every SDS, are used for the conversion of stored (packed) SDS integer data to geophysical floating point numbers. The formula to descale the data follows conventional HDF usage (see HDF User�??s Guide):

Geophysical Float Value = scale_factor * (Stored Integer - add_offset).


The units of the unpacked geophysical floating point value are indicated by the �??units�?� local attribute that is also provided with each SDS.
The �??valid_range�?� local attribute applies to the packed data (before de-scaling). The two valid range values given are the expected low and high values of valid (non-fill) packed data.
0 Kudos
LaurenSmith
Emerging Contributor
Thanks Luke. I've found the scale factor and the add offset value. What exactly is an add offset value? For my data is 0.0d, does this mean I don't have to do anything?
0 Kudos
Luke_Pinner
MVP Regular Contributor
It's just a value used to make sure the output integers are in the appropriate range. For example, NDVI (a vegetation index) ranges from -1.0 to 1.0. If I wanted to store it as an integer between 0 and 1000 I could use a scale factor of 500 and an offset of 500. e.g. -1 * 500 + 500 = 0 and 1 * 500 + 500 = 1000.

As your offset is 0, to convert your values to float just use value * scale factor.

As an aside, the ATBD notes that:
It is probably confusing to most users that the HDF convention calls the offset
�??add_offset�?� even though it�??s subtracted from the stored integer when unpacking the da-
ta. It seems likely that this terminology originated from the programmer�??s, and not the
end user�??s, perspective, since to pack the data the offset is added.
0 Kudos