osmplotr tutorial

for v0.3.0


Stable version from CRAN


Development version from GitHub

if (!require("devtools")) install.packages("devtools")



A map can be generated using the following simple steps:

  1. Specify the bounding box for the desired region
bbox <- get_bbox(c (-0.13, 51.51, -0.11, 51.52))
  1. Download the desired data—in this case, all building perimeters.
dat_B <- extract_osm_objects(key='building', bbox=bbox)
  1. Initiate an osm_basemap with desired background (bg) colour
map <- osm_basemap(bbox = bbox, bg = 'gray20')
  1. Add desired plotting objects in the desired colour.
map <- add_osm_objects(map, dat_B, col = 'gray40')
  1. Print the map

The function print_osm_map creates a graphics device that is scaled to the bounding box of the map. Note also that osmplotr maps contain no margins and fill the entire plot area. Additional capabilities of osmplotr are described in the following sections, beginning with downloading and extraction of data.

Downloading Data

The main function for downloading OSM data from the overpass API is extract_osm_objects. Data of a particular type can be extracted by passing the appropriate OSM key, as in the above example:

bbox <- get_bbox(c(-0.13, 51.51, -0.11, 51.52))
dat_B <- extract_osm_objects(key = 'building', bbox = bbox)
dat_H <- extract_osm_objects(key = 'highway', bbox = bbox)

These objects are of appropriate Spatial classes:

class(dat_B); class(dat_H)
#> [1] "sf"         "data.frame"
#> [1] "sf"         "data.frame"
class(dat_B$geometry); class(dat_H$geometry)
#> [1] "sfc_POLYGON" "sfc"
#> [1] "sfc_LINESTRING" "sfc"

Spatial (sp) objects may be returned with,

dat_B <- extract_osm_objects(key = 'building', bbox = bbox, sf = FALSE)

otherwise sf is used as the default format. The Simple Features (sf) objects with polygons of London buildings and linestrings of highways respectively contain

nrow(dat_B); nrow(dat_H)
#> [1] 1759
#> [1] 1133

… 1,759 building polygons and 1,133 highway lines. extract_osm_objects also accepts key-value pairs which are passed to the overpass API :

dat_T <- extract_osm_objects(key = 'natural', value = 'tree', bbox = bbox)

Trees are located by single coordinates and are thus point objects:

class(dat_T$geometry); nrow(dat_T)
#> [1] "sfc_POINT" "sfc"
#> [1] 688


Mark Padgham (2017). osmplotr: Bespoke Images of ‘OpenStreetMap’ Data. R package version 0.3.0. https://CRAN.R-project.org/package=osmplotr

License and bugs

Back to top