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)

x | object of class |
---|---|

y | object of class |

tolerance | tolerance values used for |

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.

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.

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

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")title("non-overlapping intersections")#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0.00 2.00 3.50 3.66 5.00 8.00#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0 0 0 0 0 0#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 0 0 0 0 0 0summary(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)))