View source: R/helperGeoBoundaries.R
| addUpper | R Documentation |
Maps each polygon in a lower administrative layer (e.g., ADM2) to its containing polygon in an upper layer (e.g., ADM1), populating an upper-level name column. If containment fails for some polygons (e.g., due to slivers or minor topology issues), a nearest-centroid fallback is used.
addUpper(
poly.adm.upper,
poly.adm,
by.adm,
by.adm.upper,
out_lower = "NAME_2",
out_upper = "NAME_1",
sort = TRUE
)
poly.adm.upper |
Spatial polygons for the *upper* admin level
(e.g., Admin 1 when the desired output is Admin 2). Can be an
|
poly.adm |
Spatial polygons for the *target* admin level you want
returned (e.g., Admin 2). Can be an |
by.adm |
Character scalar. Column name in |
by.adm.upper |
Character scalar. Column name in |
out_lower |
Character scalar. Name of the output column to hold the
lower-level names in the returned object. Defaults to |
out_upper |
Character scalar. Name of the output column to hold the
upper-level names in the returned object. Defaults to |
sort |
Logical. If |
Inputs may be either sf or sp polygon data. If sp inputs
are provided, they are converted to sf internally. Containment is
determined via sf::st_within(). For polygons not matched by containment,
the function uses sf::st_nearest_feature() on centroids
(sf::st_centroid()) to assign an upper-level name.
An sf object at the target (lower) admin level containing:
out_lower: lower-level admin name (copied from by.adm)
out_upper: upper-level admin name (derived via spatial matching)
geometry: polygon geometry
admin2.name.full: convenience concatenation
paste0(out_upper, "_", out_lower)
## Not run:
library(sf)
adm1 <- st_read("geoBoundaries/geoBoundaries-NGA-ADM1-all/geoBoundaries-NGA-ADM1.shp")
adm2 <- st_read("geoBoundaries/geoBoundaries-NGA-ADM2-all/geoBoundaries-NGA-ADM2.shp")
# If both layers use "shapeName" but you want outputs named NAME_1/NAME_2:
res <- addUpper(
poly.adm.upper = adm1,
poly.adm = adm2,
by.adm = "shapeName", # lower-level names
by.adm.upper = "shapeName", # upper-level names
out_lower = "NAME_2",
out_upper = "NAME_1",
sort = TRUE
)
# If the columns are already NAME_1 / NAME_2:
res2 <- addUpper(
poly.adm.upper = adm1,
poly.adm = adm2,
by.adm = "NAME_2",
by.adm.upper = "NAME_1"
)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.