Beyond street networks, osmnxr downloads any
OpenStreetMap feature — amenities, building footprints,
transit stops, parks, shops — as tidy sf points, mirroring
OSMnx’s features module (Boeing 2025). Because these calls
hit the live Overpass API, the download chunks below are not executed
when the vignette is built; run them interactively.
Features are selected with tags, given as a named
list. Each entry is either TRUE (the key with any value) or
a character vector of allowed values:
# schools in a place
ox_features_from_place("Olinda, Brazil", tags = list(amenity = "school"))
# the amenities studied in accessibility research, in one call
ox_features_from_place(
"Recife, Brazil",
tags = list(amenity = c("school", "hospital", "pharmacy", "marketplace"))
)
# every building footprint (key present, any value)
ox_features_from_place("Olinda, Brazil", tags = list(building = TRUE))
# parks and green space
ox_features_from_place("Recife, Brazil", tags = list(leisure = "park"))
# public transit stops
ox_features_from_place("Recife, Brazil", tags = list(public_transport = "stop_position"))When you already know the extent, query a bounding box
(c(xmin, ymin, xmax, ymax) in longitude/latitude)
directly:
Each call returns an sf of points with
osm_type, osm_id and one column per tag
encountered, so it composes directly with dplyr and
sf:
Features and the street network share the same CRS (EPSG:4326), so you can snap facilities to the network and analyse access. This is the bridge to the Accessibility article:
g <- ox_graph_from_place("Olinda, Brazil", network_type = "walk") |>
ox_simplify() |>
ox_add_edge_travel_times()
schools <- ox_features_from_place("Olinda, Brazil", tags = list(amenity = "school"))
xy <- sf::st_coordinates(schools)
nodes <- ox_nearest_nodes(g, xy[, 1], xy[, 2])
# 15-minute walking catchment around every school
ox_isochrone(g, nodes, cutoffs = 900, weight = "travel_time")Boeing, G. (2025). Modeling and analyzing urban networks and amenities with OSMnx. Geographical Analysis.