Perform geometric set operations with simple feature geometry collections

st_intersection(x, y)

# S3 method for sfc
st_intersection(x, y)

# S3 method for sf
st_intersection(x, y)

st_difference(x, y)

# S3 method for sfc
st_difference(x, y)

st_sym_difference(x, y)

st_snap(x, y, tolerance)

## Arguments

x object of class sf, sfc or sfg object of class sf, sfc or sfg tolerance values used for st_snap; numeric value or object of class units; may have tolerance values for each feature in x

## Value

The intersection, difference or symmetric difference between two sets of geometries. The returned object has the same class as that of the first argument (x) with the non-empty geometries resulting from applying the operation to all geometry pairs in x and y. In case x is of class sf, the matching attributes of the original object(s) are added. The sfc geometry list-column returned carries an attribute idx, which is an n-by-2 matrix with every row the index of the corresponding entries of x and y, respectively.

## Details

A spatial index is built on argument x; see http://r-spatial.org/r/2017/06/22/spatial-index.html. The reference for the STR tree algorithm is: Leutenegger, Scott T., Mario A. Lopez, and Jeffrey Edgington. "STR: A simple and efficient algorithm for R-tree packing." Data Engineering, 1997. Proceedings. 13th international conference on. IEEE, 1997. For the pdf, search Google Scholar.

When called with missing y, the sfc method for st_intersection returns all non-empty intersections of the geometries of x; an attribute idx contains a list-column with the indexes of contributing geometries.

when called with a missing y, the sf method for st_intersection returns an sf object with attributes taken from the contributing feature with lowest index; two fields are added: n.overlaps with the number of overlapping features in x, and a list-column origins with indexes of all overlapping features.

When st_difference is called with a single argument, overlapping areas are erased from geometries that are indexed at greater numbers in the argument to x; geometries that are empty or contained fully inside geometries with higher priority are removed entirely. The st_difference.sfc method with a single argument returns an object with an "idx" attribute with the orginal index for returned geometries.

## See also

st_union for the union of simple features collections; intersect and setdiff for the base R set operations.

## Examples

set.seed(131)
library(sf)
m = rbind(c(0,0), c(1,0), c(1,1), c(0,1), c(0,0))
p = st_polygon(list(m))
n = 100
l = vector("list", n)
for (i in 1:n)
l[[i]] = p + 10 * runif(2)
s = st_sfc(l)
plot(s, col = sf.colors(categorical = TRUE, alpha = .5))title("overlapping squares")d = st_difference(s) # sequential differences: s1, s2-s1, s3-s2-s1, ...
plot(d, col = sf.colors(categorical = TRUE, alpha = .5))title("non-overlapping differences")i = st_intersection(s) # all intersections
plot(i, col = sf.colors(categorical = TRUE, alpha = .5))title("non-overlapping intersections")summary(lengths(st_overlaps(s, s))) # includes self-counts!#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#>    0.00    2.00    3.50    3.66    5.00    8.00 summary(lengths(st_overlaps(d, d)))#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#>       0       0       0       0       0       0 summary(lengths(st_overlaps(i, i)))#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#>       0       0       0       0       0       0 sf = st_sf(s)
i = st_intersection(sf) # all intersections
plot(i["n.overlaps"])summary(i$n.overlaps - lengths(i$origins))#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
#>       0       0       0       0       0       0 # A helper function that erases all of y from x:
st_erase = function(x, y) st_difference(x, st_union(st_combine(y)))