geosphere (version 1.5-18)

areaPolygon: Area of a longitude/latitude polygon

Description

Compute the area of a polygon in angular coordinates (longitude/latitude) on an ellipsoid.

Usage

# S4 method for matrix
areaPolygon(x, a=6378137, f=1/298.257223563, ...)

# S4 method for SpatialPolygons areaPolygon(x, a=6378137, f=1/298.257223563, ...)

Value

area in square meters

Arguments

x

longitude/latitude of the points forming a polygon; Must be a matrix or data.frame of 2 columns (first one is longitude, second is latitude) or a SpatialPolygons* object

a

major (equatorial) radius of the ellipsoid

f

ellipsoid flattening. The default value is for WGS84

...

Additional arguments. None implemented

Author

This function calls GeographicLib code by C.F.F. Karney

References

C.F.F. Karney, 2013. Algorithms for geodesics, J. Geodesy 87: 43-55. tools:::Rd_expr_doi("10.1007/s00190-012-0578-z"). Addenda: https://geographiclib.sourceforge.io/geod-addenda.html. Also see https://geographiclib.sourceforge.io/

See Also

centroid, perimeter

Examples

Run this code
p <- rbind(c(-180,-20), c(-140,55), c(10, 0), c(-140,-60), c(-180,-20))
areaPolygon(p)

# Be careful with very large polygons, as they may not be what they seem!
# For example, if you wanted a polygon to compute the area equal to about 1/4 of the ellipsoid
# this won't work:
b <- matrix(c(-180, 0, 90, 90, 0, 0, -180, 0), ncol=2, byrow=TRUE)
areaPolygon(b)
# Becausee the shortest path between (-180,0) and (0,0) is 
# over one of the poles, not along the equator!
# Inserting a point along the equator fixes that
b <- matrix(c(-180, 0, 0, 0, -90,0, -180, 0), ncol=2, byrow=TRUE)
areaPolygon(b)

Run the code above in your browser using DataLab