Skip to content

Instantly share code, notes, and snippets.

@jbkunst
Created November 23, 2021 14:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jbkunst/96ebdfba3508d472fb9d32bac5d2bc1f to your computer and use it in GitHub Desktop.
Save jbkunst/96ebdfba3508d472fb9d32bac5d2bc1f to your computer and use it in GitHub Desktop.
ls <- red_sample$geometry %>% head(1)
dem <- dem
C <- 0.6
tobler_calle2 <- function(ls, dem, C){
# puntos <- puntos_ordenados(ls,dem)
# puntos <- todos_los_puntos(ls, dem)
pts_orig <- ls %>%
st_cast('POINT') %>%
st_as_sf() %>%
rename(geometry = x)
# centroides_dem <- get_centroids_from_dem(ls,dem)
ls <- ls %>% st_as_sf()
celdas_dem <- extract(dem,ls, cellnumber = T)[[1]]
centroides_dem <- celdas_dem[,1] %>% xyFromCell(dem, cell = . , spatial = T) %>% st_as_sfc()
centroides_dem
pts_nuevos <- st_nearest_points(ls, centroides_dem) %>%
st_coordinates() %>%
data.frame() %>%
mutate(start_end = rep(c(1,2), times = n()/2)) %>%
filter(start_end == 1) %>%
st_as_sf(coords=c('X','Y'), crs = 32719) %>%
select(-c(L1,start_end))
puntos <- pts_orig %>% bind_rows(pts_nuevos)
puntos <- puntos %>%
st_union() %>%
st_cast('POINT')
puntos
dem_linea <- extract(dem, puntos %>% st_as_sf(), method = 'bilinear') # convierte un objeto extraño en un objeto sf
N <- length(puntos)#largo de los puntos
d <- tibble(punto = puntos, dem_linea = dem_linea)
d
t_calle_ida2 <- d %>%
mutate(
punto_sig = lead(punto),
dx = map2_dbl(punto, punto_sig, st_distance),
dh = lead(dem_linea) - dem_linea,
slope = dh/dx,
pace_tramo = C * exp(3.5 * abs(slope + 0.05)),
t_tramo = pace_tramo * dx
) %>%
summarise(sum(t_tramo, na.rm = TRUE)) %>%
pull()
# t_calle_ida <- sapply(seq(N-1), function(i) iterador(i,puntos,dem_linea,C)) %>% sum() #funciones que aplican una función a cada elemento de una lista o vector.
t_calle_vuelta2 <- d %>%
mutate(
punto_sig = lag(punto),
dx = map2_dbl(punto, punto_sig, st_distance),
dh = lag(dem_linea) - dem_linea,
slope = dh/dx,
pace_tramo = C * exp(3.5 * abs(slope + 0.05)),
t_tramo = pace_tramo * dx
) %>%
summarise(sum(t_tramo, na.rm = TRUE)) %>%
pull()
# t_calle_vuelta <- sapply(seq(2,N) %>% rev , function(i) iterador(i,puntos,dem_linea,C, reverse = TRUE)) %>% sum() #funciones que aplican una función a cada elemento de una lista o vector.
#genera secuencia hasta N-1 y aplica la funcion iterador y suma el tiempo
t_calle2 <- mean(c(t_calle_ida2,t_calle_vuelta2))
return(t_calle2)
}
library(furrr)
ncores <- availableCores()
plan(multisession, workers = ncores)
tic()
t3 <- map(seq(N), ~ tail(head(red_sample$geometry, .x), 1)) %>%
future_map_dbl(tobler, dem = dem, C = 0.6)
toc()
# identical(t1, t2)
identical(t1, t3)
tic()
t4 <- map(seq(N), ~ tail(head(red_sample$geometry, .x), 1)) %>%
future_map_dbl(tobler_calle2, dem = dem, C = 0.6)
toc()
identical(t1, t4)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment