# /!\/!\/!\ à exécuter si nécessaire
# install.packages("tidyverse", type = "win.binary")
# 0 - Nettoyer son env de travail
rm(list=ls())
# Charger librairies
library(dplyr)
library(sf)
library(leaflet)
library(ggplot2)
library(ggspatial)
library(osmdata)
library(osrm)
library(tidyr)
library(readxl)
# 0 -Fixer le repertoire de travail
setwd("~/git/MASTER_1_R/data")
1 - Creation de donnees (from scratch)
# Recolte des donnees
# Parc de l'Hôtel de Ville 49.44254170087927, 1.1013442922359218
# Square Charles Verdrel 49.44491092198989, 1.0933064445697365
# Esplanade du Champ de Mars 49.43684894602264, 1.1041573107722227
# Parc de la Presqu’île Rollet 49.44214567455017, 1.0630771863412742
# Jardin des Plantes de Rouen 49.42203509935082, 1.0763288491493366
<- c("Parc de l'Hôtel de Ville","Square Charles Verdrel","Esplanade du Champ de Mars","Parc de la Presqu’île Rollet", "Jardin des Plantes de Rouen")
nom <- c(49.44254170087927,49.44491092198989,49.43684894602264,49.44214567455017,49.42203509935082)
lat <- c(1.1013442922359218,1.0933064445697365,1.1041573107722227,1.0630771863412742,1.0763288491493366)
lon <- seq(1,5)
id
# Creation du dataframe
<- data.frame(ID = id,Place = nom, X = lon, Y = lat)
df
# Creation du spatial dataframe
<- st_as_sf(df,
df_sf coords = c("X", "Y"),
crs = 4326)
# Cartographie de nos points
<- leaflet() %>%
map1 addProviderTiles("Esri.WorldImagery") %>%
addCircles(data=df_sf, color="red", radius = 100)
map1
2 - Calcul du plus court chemin entre de deux points (distance + temps de parcours)
# Selectionner le premier point
<- df_sf[2,]
point_1 <- df_sf[3,]
point_2
# Calcul du plus court chemin
<- osrmRoute(src = point_1,
trajet_1 dst = point_2,
osrm.profile = "foot", returnclass="sf")
<- leaflet() %>%
map2 addProviderTiles("Esri.WorldImagery") %>%
addCircles(data=df_sf[2:3,], color="red", radius = 100) %>%
addPolylines(data=trajet_1, color = "blue")
map2
3 - Calcul d’itinéraire entre plusieurs points (Travelling salesman problem)
# Calcul d'itineraire
<- osrmTrip(df_sf,osrm.profile = "foot", returnclass="sf")
itineraire_1.list <- itineraire_1.list[[1]]$trip
itineraire_1.df
<- leaflet() %>%
map3 addProviderTiles("Esri.WorldImagery") %>%
addCircles(data=df_sf, color="red", radius = 100) %>%
addPolylines(data=itineraire_1.df, color = "blue")
map3
cat('Distance :', round(sum(itineraire_1.df$distance)),'km\nTemps de parcours à pied : ', round(sum(itineraire_1.df$duration)),'minutes')
Distance : 12 km
Temps de parcours à pied : 164 minutes
4 - Calcul d’isochrone
# Calcul d'isochrone
<- osrmIsochrone(loc = point_1,
iso_1 breaks = seq(0,30,10),osrm.profile = "foot")
$foot_time <- paste(iso_1$min, "to", iso_1$max, "min")
iso_1<- colorFactor("RdYlBu", iso_1$foot_time)
pal
<- leaflet() %>%
map4 addProviderTiles("Esri.WorldImagery") %>%
addPolygons(data=iso_1, color = ~pal(iso_1$foot_time)) %>%
addCircles(data=point_1, color="red", radius = 100) %>%
addLegend(position = "bottomright",
pal = pal,
values = iso_1$foot_time,
title = "Isochrone - Foot time")
map4