## ----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)