Skip to contents

These layers are rasters (grids of cells), returned as terra SpatRasters. National 1 km grids are downloaded once and cached; finer grids are read directly from the cloud for one area at a time.

Function Resolutions Source
mn_elevation(), mn_hillshade() 1 km (national), 90 m (by area) Copernicus DEM GLO-90
mn_landcover() 1 km (national), 10 m (by area) ESA WorldCover 2021
mn_population() 1 km, 100 m; years 2015 to 2030 WorldPop

mn_map() draws rasters too, with the right colours and credits.

Terrain

mn_map(mn_elevation(), title = "Elevation (m)") +
  geom_sf(data = mn_aimags(), fill = NA, colour = "white", linewidth = 0.2)

Shaded relief makes a good background under other layers:

mn_map(mn_hillshade(), caption = FALSE) +
  geom_sf(data = mn_aimags(), fill = NA, colour = "white", linewidth = 0.3) +
  geom_sf(data = mn_settlements(type = c("capital", "aimag_centre")), colour = "firebrick", size = 1)

For one area, 90 m detail:

mn_map(mn_hillshade("90m", within = "Ulaanbaatar"), caption = FALSE) +
  geom_sf(data = mn_ub_districts(), fill = NA, colour = "firebrick")
#> Warning: Raster pixels are placed at uneven horizontal intervals and will be shifted
#> ℹ Consider using `geom_tile()` instead.
#> Raster pixels are placed at uneven horizontal intervals and will be shifted
#> ℹ Consider using `geom_tile()` instead.

Land cover

mn_map(mn_landcover(), title = "Land cover, 2021")

Population

mn_zonal() adds up the grid for any set of polygons, for example soums:

pop <- mn_population(2025)
soums <- mn_zonal(pop, mn_soums(), name = "population")
mn_map(soums, fill = population / area_km2, trans = "log10",
       title = "People per km2 by soum, 2025 (WorldPop)")

Protected areas

The World Database on Protected Areas may not be redistributed, so it is downloaded from UNEP-WCMC on first use:

pa <- mn_protected_areas()
mn_map(mn_aimags(), caption = FALSE) +
  geom_sf(data = pa, aes(fill = desig_eng), alpha = 0.6, colour = NA) +
  labs(fill = NULL, caption = mn_citation(c("admin", "wdpa")))