I would like to go from a binary raster of forest/non-forest at 30m resolution to a raster at 240m resolution with the value of each cell being the proportion of that cell forested - i.e. the data values for the 240m cells would go from 0 (where all cells in the 30m raster were zero/non-forest) through 0.5 (where half the 30m cells were forest, half were non-forest) to 1 (where all cells in the 30m raster were forested).
Although it is has been suggested not to use bilinear interpolation on discrete data, as far as I can tell the result with binary 0/1 data would be to give an average value (i.e. a proportion between 1 and 0). Is this a sensible way to do it, or is there a better method?
I can use Arc, QGIS and Idrisi.
Answer
Use Block statistics.
This works like Focal statistics by computing a statistical summary (such as the mean you desired) within a specified neighborhood of cells (such as an 8 by 8 square, where 8 = 240 m / 30 m), except it performs this only for a regular subdivision of the grid, rather than with a set of overlapping neighborhoods, one at each cell.
You can also make use of Focal statistics if you really want to: after computing the focal mean over 8 by 8 squares, resample to a 240 m grid using nearest neighbor resampling. When the grids are registered to one another (i.e., they have the same origin) this should give the same result as block statistics
. (I won't guarantee that: some arbitrary choices have to be made when new cell centers coincide with old cell corners--as they will here--and, if different committees coded the two procedures, they may have made different choices: little in ArcGIS is truly consistent, I'm afraid.)
Another approach is to create a grid of zones, one zone per square where an average is desired, and perform a zonal summary as a grid. The zones can be computed mathematically from grids of row and column coordinates (by means of the floor
or int
function, by reclassification, or by joining a suitable table to the attribute table).
I will close by remarking that bilinear interpolation, although it will indeed yield values in the range 0..1, is not what you want: it works by finding at most four original (30 m) grid cells surrounding the center of a new (240 m) cell and interpolating only their values. As such, it will overlook the other 8*8 - 4 = 60 original cells falling within each new block. I illustrate bilinear interpolation at http://www.quantdec.com/SYSEN597/GTKAV/section9/map_algebra.htm: the discussion begins near the middle of the page.
No comments:
Post a Comment