Matriz de distâncias rodoviárias e duração de viagens para condados dos EUA

Introdução

Informações de distância entre lugares são úteis para avaliar a proximidade e a interconexão entre regiões. A distância euclidiana entre dois lugares, embora simples e fácil de calcular, não é realista em termos de custos de deslocamento. Esta base apresenta métricas de distância rodoviária e duração de viagem entre todos os condados dos EUA.

Métodos

Usei a base de condados da Simple Maps (versão básica de 2024), com 3.144 registros.

Uma lista de pares de condados é calculada usando análise combinatória simples. Exemplo:

x <- c("a", "b", "c", "d")

combn(x, m = 2)
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,] "a"  "a"  "a"  "b"  "b"  "c" 
[2,] "b"  "c"  "d"  "c"  "d"  "d" 
Note

Com isso, assumo que a distância entre dois condados é a mesma, independentemente do sentido.

Assim, para os 3.144 condados, temos o seguinte número total de rotas a calcular:

choose(n = 3144, k = 2)
[1] 4940796

Para calcular a distância rodoviária entre pares de condados, foi usado o serviço de API OSRM, com o pacote {osrm} (Giraud 2022). Mais especificamente, foi usado o serviço de tabela, considerando o perfil “car”, retornando como resultado a distância em metros e a duração estimada da viagem em minutos para a rota mais rápida encontrada.

Exemplo de rota

Por exemplo, vamos calcular a distância rodoviária entre New York County, NY, e Los Angeles County, CA, com o pacote {osrm}.

library(osrm)
library(leaflet)
library(sf)

new_york <- c(-73.9668, 40.7792)
los_angeles <- c(-118.2247, 34.3219)

route <- osrmRoute(
  src = new_york, dst = los_angeles, 
  overview = "full",
  osrm.profile = "car"
)
# Distância da rota, em metros
route$distance
[1] 4485.93
# Duração da rota, em minutos
route$duration
[1] 2997.118
route |>
  st_transform(4326) |>
  leaflet() |>
  addTiles() |>
  addPolylines()
Important

Para alguns pares de condados, o serviço OSRM não consegue determinar uma rota rodoviária possível. Isso é esperado, já que alguns condados podem não ser acessíveis por estrada.

Os scripts usados para preparar a base estão disponíveis aqui.

Baixar a base de dados

A base com as distâncias rodoviárias e durações de viagem está disponível no Zenodo nos formatos RDS, parquet e CSV.

Clique no link abaixo para acessar e baixar os dados.

Também é possível baixar a base diretamente pelo R usando o pacote {zendown}.

# install.packages("zendown")
library(zendown)

dist_usa_file <- zen_file(13906981, "dist_usa.rds")

dist_usa <- readRDS(dist_usa_file)

head(dist_usa)
   orig  dest    dist    dur
1 06037 01073 3270056 2124.1
2 06037 01089 3251589 2136.9
3 06037 01097 3282597 2143.5
4 06037 04013  600220  412.8
5 06037 04019  823167  627.0
6 06037 04021  745854  524.8

Gráficos

library(ggplot2)

ggplot(data = dist_usa, aes(x = dist/1000)) +
  geom_histogram(bins = 100) +
  labs(
    title = "Distância rodoviária da rota mais rápida entre condados dos EUA", 
    x = "Distância (km)", y = "contagem"
  ) +
  theme_bw()

ggplot(data = dist_usa, aes(x = dur/60)) +
  geom_histogram(bins = 100) +
  labs(
    title = "Duração estimada da rota mais rápida entre condados dos EUA", 
    x = "Duração da viagem (horas)", y = "contagem"
  ) +
  theme_bw()

Planos futuros

  • Calcular rotas usando outros serviços de roteamento disponíveis.

  • Atualizar a base anualmente, já que a infraestrutura rodoviária pode mudar.

Back to top

References

Giraud, Timothée. 2022. osrm: Interface Between R and the OpenStreetMap-Based Routing Service OSRM.” Journal of Open Source Software 7 (78): 4574. https://doi.org/10.21105/joss.04574.