Skip to contents

This function can be used to obtain polygon/multipolygon objects representing an administrative boundary. The objects are extracted from the multipolygons layer of a given OSM extract.


oe_get_boundary(place, name = place, exact = TRUE, ...)



Description of the geographical area that should be matched with a .osm.pbf file. Can be either a length-1 character vector, an sf/sfc/bbox object, or a numeric vector of coordinates with length 2. In the last case, it is assumed that the EPSG code is 4326 specified as c(LON, LAT), while you can use any CRS with sf/sfc/bbox objects. See Details and Examples in oe_match().


A character vector of length 1 that describes the relevant area. By default, this is equal to place, but this parameter can be tuned to obtain more granular results starting from the same OSM extract. See examples. It must be always set when the place argument is specified using numeric or spatial objects.


Boolean of length 1. If TRUE, then the function returns only those features where the field name is exactly equal to name. If FALSE, it performs a (case-sensitive) pattern matching.


Further arguments (e.g. quiet or force_vectortranslate) that are passed to oe_get().


An sf object


The function may return an empty result when the corresponding GPKG file already exists and contains partial results. In that case, you can try running the function setting never_skip_vectortranslate = TRUE.


if (FALSE) {
my_cols = sf.colors(5, categorical = TRUE)
gabon = oe_get_boundary("Gabon", quiet = TRUE) # country
libreville = oe_get_boundary("Gabon", "Libreville", quiet = TRUE) # capital

opar = par(mar = rep(0, 4))
plot(st_geometry(st_boundary(gabon)), reset = FALSE, col = "grey")
plot(st_geometry(libreville), add = TRUE, col = my_cols[1])

# Exact match
komo = oe_get_boundary("Gabon", "Komo", quiet = TRUE)
# Pattern matching
komo_pt = oe_get_boundary("Gabon", "Komo", exact = FALSE, quiet = TRUE)
plot(st_geometry(komo), add = TRUE, col = my_cols[2])
plot(st_geometry(komo_pt), add = TRUE, col = my_cols[3:5])

# Get all boundaries
(oe_get_boundary("Gabon", name = "%", exact = FALSE, quiet = TRUE)[, 1:2])

# If the basic approach doesn't work, i.e.

# try to consider larger regions, i.e.
oe_get_boundary("West Yorkshire", "Leeds")