[GRASS-user] [GRASSLIST:1159] Surface area of a DEM

I'd like to estimate the surface area of each cell in a DEM (r.surf.area
seems to just give you the value for the entire dem, no?) -- by surface area
I am referring to the "true" ground area as opposed to the planar projected
ground area (which is constant for all cells) -- flat areas the area = the
planar projected area (e.g. a 30m cell that is flat has 900m2 of surface
area, but an inclined slope will have > 900m2). Is there a grass module to
do this, or any recommendation on how to calculate this? Thanks!

--j

--

Jonathan A. Greenberg, PhD
NRC Research Associate
NASA Ames Research Center
MS 242-4
Moffett Field, CA 94035-1000
Phone: 415-794-5043
AIM: jgrn3007
MSN: jgrn3007@hotmail.com

Jonathan Greenberg wrote:

I'd like to estimate the surface area of each cell in a DEM
(r.surf.area seems to just give you the value for the entire dem, no?)
-- by surface area I am referring to the "true" ground area as opposed
to the planar projected ground area (which is constant for all cells)
-- flat areas the area = the planar projected area (e.g. a 30m cell
that is flat has 900m2 of surface area, but an inclined slope will
have > 900m2). Is there a grass module to do this, or any
recommendation on how to calculate this? Thanks!

1) Use r.slope.aspect to make a slope map

2) r.mapcalc "area = nsres()*ewres() / cos(slope)"

then r.univar's sum for the area map should give an answer close to
r.surf.area?

It's a fractal problem, so use results with care.

Hamish

[Resending to grassuser list; my original reply went to the Baylor
list, which bounced as I'm no longer subscribed there.]

Jonathan Greenberg wrote:

I'd like to estimate the surface area of each cell in a DEM (r.surf.area
seems to just give you the value for the entire dem, no?) -- by surface area
I am referring to the "true" ground area as opposed to the planar projected
ground area (which is constant for all cells) -- flat areas the area = the
planar projected area (e.g. a 30m cell that is flat has 900m2 of surface
area, but an inclined slope will have > 900m2). Is there a grass module to
do this, or any recommendation on how to calculate this? Thanks!

r.slope.aspect will produce a slope map in either percentage or
degrees, from which you can compute the scale factor of each cell as
either sqrt(1+k^2) (where k is percent/100) or 1/cos(angle). Those
values can then be summed with e.g. "r.statistics method=sum".

Note that it doesn't matter as to the direction of the slope; a
30-degree N-S slope produces the same result as a 30-degree NE-SW
slope.

Also note that any slope calculation based upon a DEM will inevitably
be an approximation, on top of the fact that the DEM will be an
approximation. [In fact, if the terrain has fractal dimension, the
notion of surface area becomes entirely meaningless.]

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