osmnxr is OSMnx for R: it downloads, models,
analyzes and visualizes street networks from OpenStreetMap. The public API
is tidyverse-friendly and returns sf objects; the
heavy graph computation (routing, metrics, simplification) runs in a
bundled Rust core.
The central object is the osm_graph: a pair of
sf tables (nodes and edges) plus metadata.
The usual entry point is a place name, which downloads from OpenStreetMap:
So this vignette runs offline, we load that exact network — the historic centre of Olinda, Brazil — from the copy bundled with the package:
g <- ox_example("olinda")
g
#>
#> ── osm_graph ───────────────────────────────────────────────────────────────────
#> 498 nodes, 1191 edges
#> Network type: "unknown"
#> Simplified: FALSE
#> CRS: "WGS 84"Snap coordinates to graph nodes, then compute the shortest path (Dijkstra, in Rust):
orig <- ox_nearest_nodes(g, x = -34.8553, y = -8.0089)
dest <- ox_nearest_nodes(g, x = -34.8505, y = -8.0125)
route <- ox_shortest_path(g, orig, dest)
length(route) # nodes along the route
#> [1] 8route_xy <- sf::st_coordinates(g$nodes)[match(route, g$nodes$osmid), ]
plot(g, col = "grey80", lwd = 0.6)
lines(route_xy, col = "#b7410e", lwd = 3)No network needed at all? example_osm_graph() builds a
synthetic grid for quick experiments.