knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 6.5, fig.height = 5.5)
library(osmnxr)
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:
g <- ox_graph_from_place("Olinda, Brazil", network_type = "drive") g <- ox_simplify(g)
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
plot(g)
ox_basic_stats(g)
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
route_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.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.