Les fonctions leaflet_ peuvent etre utilisees dans 2 contextes differents :
Appel direct d’une fonction leaflet_ dans l’environnement RStudio. Dans ce cas, la carte s’affiche dans la fenetre Viewer (ctrl+9). Il s’agit la d’un contexte ‘leaflet’ classique.
Dans une application shiny, les fonctions leaflet_ peuvent etre utilisees pour actualiser des cartes a chaque changement de parametres grace a leaflet_proxy. L’interet ici est de ne pas recharger toutes les couches de la carte mais uniquement celles qui doivent etre actualisees. Le temps de rafraichissement est alors reduit. C’est le contexte ‘proxy’.
Il est bien sur possible d’appeler des fonctions leaflet_ dans une application shiny avec un contexte ‘leaflet’, mais dans ce cas toute la carte sera rechargee des qu’un parametre sera modifie.
Ci-dessous, quelques exemples d’applications shiny integrant les fonctions leaflet_ dans un contexte ‘proxy’.
library(oceanis)
library(shiny)
library(leaflet)
data("depm")
data("donnees_monoloc")
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("lngRonds_out"),
uiOutput("latRonds_out"),
uiOutput("rayon_rond_out"),
uiOutput("opaciteElargie_out"),
uiOutput("colPos_out"),
uiOutput("colBorderRonds_out")
),mainPanel(
leafletOutput("carte",
height = 900)
)
)
),
server = function(input, output){
# Declaration et envoi des widgets a l'ui
$lngRonds_out <- renderUI({
outputnumericInput("lngRonds",
"Longitude de la legende des ronds",
value = 9)
})$latRonds_out <- renderUI({
outputnumericInput("latRonds",
"Latitude de la legende des ronds",
value = 49)
})$rayon_rond_out <- renderUI({
outputnumericInput("rayon_rond",
"Rayon du rond le plus grand",
value = 30000)
})$opaciteElargie_out <- renderUI({
outputsliderInput("opaciteElargie",
"Opacite de la representation elargie",
min=0,
max=100,
value=60,
step=10,
ticks=FALSE)
})$colPos_out <- renderUI({
outputtextInput("colPos",
"Couleur de remplissage des ronds",
value = "#CD853F")
})$colBorderRonds_out <- renderUI({
outputtextInput("colBorderRonds",
"Couleur de la bordure des ronds",
value = "#303030")
})
# Initialisation et envoi de la carte leaflet a l'ui
$carte <- renderLeaflet({
output<- leaflet_ronds(data = donnees_monoloc,
map fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varVolume = "POP_2015",
map_proxy = "shiny")
})
# Reactive pour actualiser la carte leaflet
<- reactive({
react_carte <- leaflet_ronds(data = donnees_monoloc,
map fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varVolume = "POP_2015",
rayonRond = as.numeric(input$rayon_rond),
opacityElargi = as.numeric(input$opaciteElargie)/100,
colPos = input$colPos,
colBorderPos = input$colBorderRonds,
map_proxy = "shiny")
})
# Deplacement de la legende des ronds
observeEvent(list(input$lngRonds,input$latRonds),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour la nouvelle position de la legende des ronds.
<- add_legende_ronds(map = proxy,
proxy titre = "POP_2015",
lng = as.numeric(input$lngRonds),
lat = as.numeric(input$latRonds),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de la taille des ronds
observeEvent(input$rayon_rond,{
<- leafletProxy("carte")
proxy
# on passe le proxy en parametre (map_proxy = proxy).
# on utilise isolate() autour des input qui ne changent pas d'etat dans cet observeEvent
# pour eviter le rafraichissement intempestif de la carte.
# on met a jour la carte proxy avec la nouvelle taille des ronds.
<- leaflet_ronds(data = donnees_monoloc,
proxy fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varVolume = "POP_2015",
rayonRond = as.numeric(input$rayon_rond),
opacityElargi = as.numeric(isolate(input$opaciteElargie))/100,
colPos = isolate(input$colPos),
colBorderPos = isolate(input$colBorderRonds),
map_proxy = proxy)
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour la nouvelle taille des ronds de la legende.
<- add_legende_ronds(map = proxy,
proxy titre = "POP_2015",
lng = as.numeric(isolate(input$lngRonds)),
lat = as.numeric(isolate(input$latRonds)),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de l'opacite de la representation elargie
observeEvent(input$opaciteElargie,{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy avec la nouvelle opacite de la representation elargie.
<- set_opacite_elargi(map = proxy,
proxy opacite = as.numeric(input$opaciteElargie)/100,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de la couleur des ronds
observeEvent(list(input$colPos,input$colBorderRonds),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour les nouvelles couleurs des ronds et de leur bordure.
<- set_couleur_ronds(map = proxy,
proxy colorPos = input$colPos,
colBorderPos = input$colBorderRonds,
map_leaflet = react_carte())
# ou bien en passant les parametres directement dans la fonction leaflet_ronds()
# avec map_proxy = proxy.
# selon les cas, cette solution peut etre plus longue.
# proxy <- leaflet_ronds(data = donnees_monoloc,
# fondMaille = depm[depm$REG %in% c("84","93"),],
# fondMailleElargi = depm,
# idData = "COD_DEP",
# varVolume = "POP_2015",
# rayonRond = as.numeric(isolate(input$rayon_rond)),
# colPos = input$colPos,
# colBorderPos = input$colBorderRonds,
# opacityElargi = as.numeric(isolate(input$opaciteElargie))/100,
# map_proxy = proxy)
ignoreInit = T)
},
} )
library(oceanis)
library(shiny)
library(leaflet)
data("depm")
data("donnees_monoloc")
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("lngClasses_out"),
uiOutput("latClasses_out"),
uiOutput("nb_classes_out"),
uiOutput("opaciteElargie_out"),
uiOutput("stylePalette_out"),
uiOutput("colBorder_out")
),mainPanel(
leafletOutput("carte",
height = 900)
)
)
),
server = function(input, output){
# Declaration et envoi des widgets a l'ui
$lngClasses_out <- renderUI({
outputnumericInput("lngClasses",
"Longitude de la legende des classes",
value = 9)
})$latClasses_out <- renderUI({
outputnumericInput("latClasses",
"Latitude de la legende des classes",
value = 49)
})$nb_classes_out <- renderUI({
outputnumericInput("nb_classes",
"Nombre de classes",
value = 4)
})$opaciteElargie_out <- renderUI({
outputsliderInput("opaciteElargie",
"Opacite de la representation elargie",
min=0,
max=100,
value=60,
step=10,
ticks=FALSE)
})$stylePalette_out <- renderUI({
outputselectInput("stylePalette", "Style Insee de la palette",
choices = c("defaut", "InseeFlash", "InseeAnalyse",
"InseeDossier", "InseePremiere"),
selected = "defaut")
})$colBorder_out <- renderUI({
outputtextInput("colBorderClasses",
"Couleur de la bordure des classes",
value = "white")
})
# Initialisation et envoi de la carte leaflet a l'ui
$carte <- renderLeaflet({
output<- leaflet_classes(data = donnees_monoloc,
map fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varRatio = "VAR_AN_MOY",
nbClasses = 4,
map_proxy = "shiny")
})
# Reactive pour actualiser la carte leaflet
<- reactive({
react_carte <- leaflet_classes(data = donnees_monoloc,
map fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varRatio = "VAR_AN_MOY",
nbClasses = as.numeric(input$nb_classes),
stylePalette = input$stylePalette,
opacityElargi = as.numeric(input$opaciteElargie)/100,
colBorder = input$colBorderClasses,
map_proxy = "shiny")
})
# Reactive pour ajouter la legende de classes a la carte leaflet
<- reactive({
react_legende_carte <- add_legende_classes(map = react_carte(),
map titre = "VAR_AN_MOY",
lng = as.numeric(input$lngClasses),
lat = as.numeric(input$latClasses),
zoom = 6)
})
# Deplacement de la legende des classes
observeEvent(list(input$lngClasses,input$latClasses),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour la nouvelle position de la legende des classes.
<- add_legende_classes(map = proxy,
proxy titre = "VAR_AN_MOY",
lng = as.numeric(input$lngClasses),
lat = as.numeric(input$latClasses),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification du nombre de classes
observeEvent(input$nb_classes,{
<- leafletProxy("carte")
proxy
# on passe le proxy en parametre (map_proxy = proxy).
# on utilise isolate() autour des input qui ne changent pas d'etat dans cet observeEvent
# pour eviter le rafraichissement intempestif de la carte.
# on met a jour la carte proxy avec le nouveau nombre de classes.
<- leaflet_classes(data = donnees_monoloc,
proxy fondMaille = depm[depm$REG %in% c("84","93"),],
fondMailleElargi = depm,
idData = "COD_DEP",
varRatio = "VAR_AN_MOY",
nbClasses = as.numeric(input$nb_classes),
stylePalette = isolate(input$stylePalette),
opacityElargi = as.numeric(isolate(input$opaciteElargie))/100,
colBorder = isolate(input$colBorderClasses),
map_proxy = proxy)
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour le nouveau nombre de classes dans la legende.
<- add_legende_classes(map = proxy,
proxy titre = "VAR_AN_MOY",
lng = as.numeric(isolate(input$lngClasses)),
lat = as.numeric(isolate(input$latClasses)),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de l'opacite de la representation elargie
observeEvent(input$opaciteElargie,{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy avec la nouvelle opacite de la representation elargie.
<- set_opacite_elargi(map = proxy,
proxy opacite = as.numeric(input$opaciteElargie)/100,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification du style de palette et de la bordure des classes
observeEvent(list(input$stylePalette,input$colBorderClasses),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet avec la legende en parametre
# (map_leaflet = react_legende_carte()).
# on met a jour la carte proxy pour la nouvelle palette et la bordure des classes.
<- set_couleur_classes(map = proxy,
proxy stylePalette = input$stylePalette,
colBorder = input$colBorderClasses,
map_leaflet = react_legende_carte())
ignoreInit = T)
},
} )
library(oceanis)
library(shiny)
library(leaflet)
data("repm")
data("donnees_biloc")
shinyApp(
ui = fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput("lngFleches_out"),
uiOutput("latFleches_out"),
uiOutput("largeurFleche_out"),
uiOutput("colFleches_out"),
uiOutput("colBorderFleches_out")
),mainPanel(
leafletOutput("carte",
height = 900)
)
)
),
server = function(input, output){
# Declaration et envoi des widgets a l'ui
$lngFleches_out <- renderUI({
outputnumericInput("lngFleches",
"Longitude de la legende des fleches",
value = 9)
})$latFleches_out <- renderUI({
outputnumericInput("latFleches",
"Latitude de la legende des fleches",
value = 49)
})$largeurFleche_out <- renderUI({
outputnumericInput("largeurFleche",
"Largeur de la plus grande fleche",
value = 50)
})$colFleches_out <- renderUI({
outputtextInput("colFleches",
"Couleur de remplissage des fleches",
value = "#CD853F")
})$colBorderFleches_out <- renderUI({
outputtextInput("colBorderFleches",
"Couleur de la bordure des fleches",
value = "#303030")
})
# Initialisation et envoi de la carte leaflet a l'ui
$carte <- renderLeaflet({
output<- leaflet_joignantes(data = donnees_biloc,
map fondMaille = regm,
typeMaille = "REG",
idDataDepart = "REG_DEPART",
idDataArrivee = "REG_ARRIVEE",
varFlux = "MIGR",
filtreDist = 300,
decalageAllerRetour = 20,
decalageCentroid = 20,
map_proxy = "shiny")
})
# Reactive pour actualiser la carte leaflet
<- reactive({
react_carte <- leaflet_joignantes(data = donnees_biloc,
map fondMaille = regm,
typeMaille = "REG",
idDataDepart = "REG_DEPART",
idDataArrivee = "REG_ARRIVEE",
varFlux = "MIGR",
filtreDist = 300,
decalageAllerRetour = 20,
decalageCentroid = 20,
largeurFlecheMax = as.numeric(input$largeurFleche),
colFleche = input$colFleches,
colBorder = input$colBorderFleches,
map_proxy = "shiny")
})
# Reactive pour ajouter la legende des fleches a la carte leaflet
<- reactive({
react_legende_carte <- add_legende_joignantes(map = react_carte(),
map titre = "MIGR",
lng = as.numeric(input$lngFleches),
lat = as.numeric(input$latFleches),
zoom = 6)
})
# Deplacement de la legende des fleches
observeEvent(list(input$lngFleches,input$latFleches),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour la nouvelle position de la legende des fleches.
<- add_legende_joignantes(map = proxy,
proxy titre = "MIGR",
lng = as.numeric(input$lngFleches),
lat = as.numeric(input$latFleches),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de la largeur des fleches
observeEvent(input$largeurFleche,{
<- leafletProxy("carte")
proxy
# on passe le proxy en parametre (map_proxy = proxy).
# on utilise isolate() autour des input qui ne changent pas d'etat dans cet observeEvent
# pour eviter le rafraichissement intempestif de la carte.
# on met a jour la carte proxy avec la nouvelle largeur de fleches.
<- leaflet_joignantes(data = donnees_biloc,
proxy fondMaille = regm,
typeMaille = "REG",
idDataDepart = "REG_DEPART",
idDataArrivee = "REG_ARRIVEE",
varFlux = "MIGR",
filtreDist = 300,
decalageAllerRetour = 20,
decalageCentroid = 20,
largeurFlecheMax = as.numeric(input$largeurFleche),
colFleche = isolate(input$colFleches),
colBorder = isolate(input$colBorderFleches),
map_proxy = proxy)
# on passe la carte leaflet en parametre (map_leaflet = react_carte()).
# on met a jour la carte proxy pour la nouvelle largeur de fleches dans la legende.
<- add_legende_joignantes(map = proxy,
proxy titre = "MIGR",
lng = as.numeric(isolate(input$lngFleches)),
lat = as.numeric(isolate(input$latFleches)),
zoom = 6,
map_leaflet = react_carte())
ignoreInit = T)
},
# Modification de la couleur des fleches et de leur bordure
observeEvent(list(input$colFleches,input$colBorderFleches),{
<- leafletProxy("carte")
proxy
# on passe la carte leaflet avec la legende en parametre
# (map_leaflet = react_legende_carte()).
# on met a jour la carte proxy pour la nouvelle couleur des fleches et des bordures.
<- set_couleur_joignantes(map = proxy,
proxy colFleche = input$colFleches,
colBorder = input$colBorderFleches,
map_leaflet = react_legende_carte())
ignoreInit = T)
},
} )