Minimal roman

Day 11 of 30DayMapChallenge
R
30DayMapChallenge
spatial
datavisualization
Author

Michaël

Published

2025-11-11

Modified

2025-11-12

A photo of Jerash’s superb colonnaded cardo maximus is straight in the way that only a Roman road can be

Cardo Maximus, Jerash, Jordan – Public domain by Mustang Joe

Day 11 of 30DayMapChallenge: « Minimal » (previously).

A recent dataset of Roman Empire’s road system has just been published (de Soto et al. 2025) and is updated on Itiner-e where we can download the current GeoJSON. Let’s update an old post.

library(dplyr)
library(ggplot2)
library(glue)
library(sf)
library(rnaturalearth)
library(rnaturalearthhires)

Data

if (!file.exists("itiner.geojson")) {
  download.file("https://itiner-e.org/route-segments/download",
                "itiner.geojson")
}
roads <- read_sf("itiner.geojson") |> 
  mutate(type = factor(type, levels = c("Main Road",
                                        "Secondary Road",
                                        "River",
                                        "Sea Lane"))) |> 
  st_transform("EPSG:3035")

# map background
world <- ne_countries(scale = 50) 

Map

bb <- st_bbox(roads)

ggplot() +
  geom_sf(data = world, fill = "snow2", color = "snow2") +
  geom_sf(data = roads, aes(color = type, linetype = type, linewidth = type)) +
  scale_color_manual(
    values = c("Main Road" = "chocolate4",
               "Secondary Road" = "chocolate2",
               "River" = "steelblue1",
               "Sea Lane" = "slategray1")) +
  scale_linetype_manual(
    values = c("Main Road" = 1,
               "Secondary Road" = 1,
               "River" = 1,
               "Sea Lane" = 2)) +
  scale_linewidth_manual(
    values = c("Main Road" = .5,
               "Secondary Road" = .2,
               "River" = .2,
               "Sea Lane" = .2)) +
  coord_sf(crs = "EPSG:3035", 
           xlim = bb[c(1, 3)], ylim = bb[c(2, 4)]) +
  labs(title = "Roman roads",
       caption = glue("https://r.iresmi.net/ - {Sys.Date()}
                      {st_crs(roads)$Name}
                      data: Itiner-e doi:10.1038/s41597-025-06140-z / Natural Earth")) +
  theme_minimal() +
  theme(plot.caption = element_text(size = 6, 
                                    color = "darkgrey"),
        legend.position = "bottom")
Map of roman roads
Figure 1: Roman Empire’s road system

References

de Soto, Pau, Adam Pažout, Tom Brughmans, Peter Bjerregaard Vahlstrup, Álvaro Auir, Toon Bongers, Jens Emil Bødstrup Christoffersen, et al. 2025. “Itiner-e: A High-Resolution Dataset of Roads of the Roman Empire.” Scientific Data 12 (1): 1731. https://doi.org/10.1038/s41597-025-06140-z.