Main Content

areamat

Surface area covered by nonzero values in binary data grid

Syntax

A = areamat(BW,R)
A = areamat(BW,R,ellipsoid)
[A, cellarea] = areamat(...)

Description

A = areamat(BW,R) returns the surface area covered by the elements of the binary regular data grid BW, which contain the value 1 (true). BW can be the result of a logical expression such as BW = (topo60c > 0). Specify R as a GeographicCellsReference object. The RasterSize property of R must be consistent with size(BW).

The output A expresses surface area as a fraction of the surface area of the unit sphere (4*pi), so the result ranges from 0 to 1.

A = areamat(BW,R,ellipsoid) calculates the surface area on the ellipsoid or sphere defined by the input ellipsoid, which can be a referenceSphere, referenceEllipsoid, or oblateSpheroid object, or a vector of the form [semimajor_axis eccentricity]. The units of the output, A, are the square of the length units in which the semimajor axis is provided. For example, if ellipsoid is replaced with wgs84Ellipsoid('kilometers'), then A is in square kilometers. If you do not specify ellipsoid and R has a non-empty GeographicCRS property, then areamat uses the ellipsoid contained in the Spheroid property of the geocrs object in the GeographicCRS property of R.

[A, cellarea] = areamat(...) returns a vector, cellarea, describing the area covered by the data cells in BW. Because all the cells in a given row are exactly the same size, only one value is needed per row. Therefore cellarea has size M-by-1, where M = size(BW,1) is the number of rows in BW.

Examples

collapse all

Find the surface area in normalized units of the part of Earth's terrain that is above sea level.

First, load elevation raster data and a geographic cells reference object. The raster contains terrain heights relative to mean sea level. Then, create a logical array representing the terrain above sea level.

load topo60c
topoASL = topo60c > 0;

Find the surface area in normalized units of the elements of the array that contain true.

areamat(topoASL,topo60cR)
ans = 
0.2890

The result means 28.9% of Earth's terrain is above sea level.

Find the surface area in kilometers of the part of Earth's terrain that is above sea level.

First, load elevation raster data and a geographic cells reference object. The raster contains terrain heights relative to mean sea level. Then, create a reference sphere for Earth and specify its units as kilometers.

load topo60c
s = referenceSphere('earth','km');

Create a logical array representing the terrain above sea level.

topoASL = topo60c > 0;

Find the surface area in kilometers of the elements of the array that contain true.

areamat(topoASL,topo60cR,s)
ans = 
1.4739e+08

The result means that approximately 147 million square kilometers of Earth's terrain is above sea level.

Tips

Given a regular data grid that is a logical 0-1 matrix, the areamat function returns the area corresponding to the true, or 1, elements. The input data grid can be a logical statement, such as (topo60c > 0), which is 1 everywhere that topo60c is greater than 0 meters, and 0 everywhere else. This is an illustration of that matrix:

World map with areas above sea level in black and areas below sea level in white

This calculation is based on the areaquad function and is therefore limited only by the granularity of the cellular data.

Version History

Introduced before R2006a

expand all

See Also

|