inst/doc/isochrones.R

## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = identical(tolower(Sys.getenv("NOT_CRAN")), "true"),
  out.width = "100%"
)

## ---- message = FALSE---------------------------------------------------------
#  options(java.parameters = "-Xmx2G")
#  
#  library(r5r)
#  library(sf)
#  library(data.table)
#  library(ggplot2)
#  library(interp)

## ---- message = FALSE---------------------------------------------------------
#  # system.file returns the directory with example data inside the r5r package
#  # set data path to directory containing your own data if not running this example
#  data_path <- system.file("extdata/poa", package = "r5r")
#  
#  r5r_core <- setup_r5(data_path)

## ---- message = FALSE---------------------------------------------------------
#  # read all points in the city
#  points <- fread(file.path(data_path, "poa_hexgrid.csv"))
#  
#  # subset point with the geolocation of the central bus station
#  central_bus_stn <- points[291,]
#  
#  # isochrone intervals
#  time_intervals <- seq(0, 100, 10)
#  
#  # routing inputs
#  mode <- c("WALK", "TRANSIT")
#  max_walk_time <- 30      # in minutes
#  max_trip_duration <- 100 # in minutes
#  time_window <- 120       # in minutes
#  departure_datetime <- as.POSIXct("13-05-2019 14:00:00",
#                                   format = "%d-%m-%Y %H:%M:%S")
#  
#  # calculate travel time matrix
#  iso1 <- r5r::isochrone(r5r_core,
#                         origins = central_bus_stn,
#                         mode = mode,
#                         cutoffs = time_intervals,
#                         sample_size = 1,
#                         departure_datetime = departure_datetime,
#                         max_walk_time = max_walk_time,
#                         max_trip_duration = max_trip_duration,
#                         time_window = time_window,
#                         progress = FALSE)
#  

## ---- message = FALSE---------------------------------------------------------
#  head(iso1)

## ---- message = FALSE---------------------------------------------------------
#  # extract OSM network
#  street_net <- street_network_to_sf(r5r_core)
#  main_roads <- subset(street_net$edges, street_class %like% 'PRIMARY|SECONDARY')
#  
#  colors <- c('#ffe0a5','#ffcb69','#ffa600','#ff7c43','#f95d6a',
#              '#d45087','#a05195','#665191','#2f4b7c','#003f5c')
#  
#  ggplot() +
#    geom_sf(data = iso1, aes(fill=factor(isochrone)), color = NA, alpha = .7) +
#    geom_sf(data = main_roads, color = "gray55", size=0.01, alpha = 0.2) +
#    geom_point(data = central_bus_stn, aes(x=lon, y=lat, color='Central bus\nstation')) +
#    # scale_fill_viridis_d(direction = -1, option = 'B') +
#    scale_fill_manual(values = rev(colors) ) +
#    scale_color_manual(values=c('Central bus\nstation'='black')) +
#    labs(fill = "Travel time\n(in minutes)", color='') +
#    theme_minimal() +
#    theme(axis.title = element_blank())

## ---- message = FALSE---------------------------------------------------------
#  # calculate travel time matrix
#  ttm <- travel_time_matrix(r5r_core,
#                            origins = central_bus_stn,
#                            destinations = points,
#                            mode = mode,
#                            departure_datetime = departure_datetime,
#                            max_walk_time = max_walk_time,
#                            max_trip_duration = max_trip_duration,
#                            time_window = time_window,
#                            progress = FALSE)
#  
#  head(ttm)
#  

## ---- message = FALSE---------------------------------------------------------
#  # add coordinates of destinations to travel time matrix
#  ttm[points, on=c('to_id' ='id'), `:=`(lon = i.lon, lat = i.lat)]
#  
#  # interpolate estimates to get spatially smooth result
#  travel_times.interp <- with(na.omit(ttm), interp(lon, lat, travel_time_p50)) |>
#                          with(cbind(travel_time=as.vector(z),  # Column-major order
#                                     x=rep(x, times=length(y)),
#                                     y=rep(y, each=length(x)))) |>
#                              as.data.frame() |> na.omit()

## ---- message = FALSE, out.width='100%'---------------------------------------
#  # find isochrone's bounding box to crop the map below
#  bb_x <- c(min(travel_times.interp$x), max(travel_times.interp$x))
#  bb_y <- c(min(travel_times.interp$y), max(travel_times.interp$y))
#  
#  # plot
#  ggplot(travel_times.interp) +
#    geom_sf(data = main_roads, color = "gray55", size=0.01, alpha = 0.7) +
#    geom_contour_filled(aes(x=x, y=y, z=travel_time), alpha=.7) +
#    geom_point(aes(x=lon, y=lat, color='Central bus\nstation'),
#               data=central_bus_stn) +
#    # scale_fill_viridis_d(direction = -1, option = 'B') +
#    scale_fill_manual(values = rev(colors) ) +
#    scale_color_manual(values=c('Central bus\nstation'='black')) +
#    scale_x_continuous(expand=c(0,0)) +
#    scale_y_continuous(expand=c(0,0)) +
#    coord_sf(xlim = bb_x, ylim = bb_y) +
#    labs(fill = "Travel time\n(in minutes)", color='') +
#    theme_minimal() +
#    theme(axis.title = element_blank())

## ---- message = FALSE---------------------------------------------------------
#  r5r::stop_r5(r5r_core)
#  rJava::.jgc(R.gc = TRUE)

Try the r5r package in your browser

Any scripts or data that you put into this service are public.

r5r documentation built on Aug. 8, 2023, 9:07 a.m.