Compute Euclidian or great circle distance between pairs of geometries; compute, the area or the length of a set of geometries.
st_area(x, ...) st_length(x) st_distance( x, y, ..., dist_fun, by_element = FALSE, which = ifelse(isTRUE(st_is_longlat(x)), "Great Circle", "Euclidean"), par = 0, tolerance = 0 )
x | object of class |
---|---|
... | ignored |
y | object of class |
dist_fun | deprecated |
by_element | logical; if |
which | character; for Cartesian coordinates only: one of |
par | for |
tolerance | ignored if |
If the coordinate reference system of x
was set, these functions return values with unit of measurement; see set_units.
st_area returns the area of a geometry, in the coordinate reference system used; in case x
is in degrees longitude/latitude, st_geod_area is used for area calculation.
st_length returns the length of a LINESTRING
or MULTILINESTRING
geometry, using the coordinate reference system. POINT
, MULTIPOINT
, POLYGON
or MULTIPOLYGON
geometries return zero.
If by_element
is FALSE
st_distance
returns a dense numeric matrix of dimension length(x) by length(y); otherwise it returns a numeric vector of length x
or y
, the shorter one being recycled. Distances involving empty geometries are NA
.
great circle distance calculations use function geod_inverse
from PROJ; see Karney, Charles FF, 2013, Algorithms for geodesics, Journal of Geodesy 87(1), 43--55
st_dimension, st_cast to convert geometry types
b0 = st_polygon(list(rbind(c(-1,-1), c(1,-1), c(1,1), c(-1,1), c(-1,-1)))) b1 = b0 + 2 b2 = b0 + c(-0.2, 2) x = st_sfc(b0, b1, b2) st_area(x)#> [1] 4 4 4#> 1434649 [m]outer = matrix(c(0,0,10,0,10,10,0,10,0,0),ncol=2, byrow=TRUE) hole1 = matrix(c(1,1,1,2,2,2,2,1,1,1),ncol=2, byrow=TRUE) hole2 = matrix(c(5,5,5,6,6,6,6,5,5,5),ncol=2, byrow=TRUE) poly = st_polygon(list(outer, hole1, hole2)) mpoly = st_multipolygon(list( list(outer, hole1, hole2), list(outer + 12, hole1 + 12) )) st_length(st_sfc(poly, mpoly))#> [1] 0 0#> [,1] [,2] [,3] #> [1,] 0 1 2 #> [2,] 1 0 1 #> [3,] 2 1 0st_distance(p, p, by_element = TRUE)#> [1] 0 0 0