Match Across Geographic Layers
geo_match(
from,
to,
method = "center",
by = NULL,
tiebreaker = TRUE,
epsg = 3857
)
smaller geographic level to match up from
larger geographic level to be matched to
string from 'center', 'centroid', 'point', 'circle', or 'area' for matching method
A character vector to match by. One element if both from
and to
share the subsetting column name.
One element with a name (for from
) and one element (for to
).
Should ties be broken? boolean. If FALSE, precincts with no matches get value -1 and precincts with multiple matches get value -2.
numeric EPSG code to planarize to. Default is 3857.
Integer Vector of matches length(to) with values in 1:nrow(from)
Methods are as follows:
centroid: matches each element of from
to the to
entry that the geographic centroid intersects
center: very similar to centroid, but it matches an arbitrary center point within from
if the centroid of from
is outside the bounds of from. (This happens for non-convex shapes only).
point: matches each element of from
to the to
entry that the "point on surface" intersects.
circle: matches each element of from
to the to
entry that the centroid
of the maximum inscribed circle intersects
area: matches each element of from
to the to
element which has the largest area overlap
library(dplyr)
data(checkerboard)
counties <- sf::st_as_sf(as.data.frame(rbind(
sf::st_union(checkerboard |> filter(i < 4)),
sf::st_union(checkerboard |> filter(i >= 4))
)))
geo_match(from = checkerboard, to = counties)
#> Warning: Planarizing skipped. `x` missing CRS.
#> Warning: Planarizing skipped. `x` missing CRS.
#> [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
#> [39] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
geo_match(from = checkerboard, to = counties, method = 'area')
#> Warning: Planarizing skipped. `x` missing CRS.
#> [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2
#> [39] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2