Skip to content

Instantly share code, notes, and snippets.

@datagistips
Created January 7, 2023 17:23
Show Gist options
  • Save datagistips/fc1bb64f558b2ef826e1e937c9998255 to your computer and use it in GitHub Desktop.
Save datagistips/fc1bb64f558b2ef826e1e937c9998255 to your computer and use it in GitHub Desktop.
A simple Shiny App to Geocode Addresses and See them on a Map
library(shiny)
library(banR) # Pour le géococage et l'appel à l'API BANO
library(leaflet) # Pour la carte interactive
# ui est la partie affichage
ui <- fluidPage(
fluidRow(column(12,
h1("Géocodage d'adresse BANO"),
textInput("adresse", label = NULL, "", placeholder = "Tapez une adresse"),
leafletOutput("mymap"))),
)
# server est la partie calcul
server <- function(input, output) {
# Récupère les coordonnées de l'adresse
r_q <- reactive({
# Si pas de saisie d'adresse, on ne renvoie rien
if(is.null(input$adresse)) return()
if(input$adresse == "") return()
# Certaines saisies peuvent provoquer une erreur, telles que "34" (avec seulement le numéro)
# comme le module est dynamique et incrémental, il vaut mieux gérer ce type d'erreur
q <- tryCatch({
# Géocodage BANO depuis banR
geocode(input$adresse)
}
, error = function(e) { return()})
# Si pas de résultat, on ne renvoie rien...
if(nrow(q) == 0) return()
# Sinon, on récupère les infos de la requête
long <- q$longitude
lat <- q$latitude
name <- q$name
return(data.frame(long = long, lat = lat, name = name))
})
# Carte leaflet
output$mymap <- renderLeaflet({
# Ceci est la carte basique
map <- leaflet() %>% addTiles()
# Si pas de résultat, alors on renvoie la carte simple
if(is.null(r_q())) return(map)
if(nrow(r_q()) == 0) return(map)
# Sinon, on récupère la localisation, le nom de l'adresse....
long <- r_q()$long
lat <- r_q()$lat
name <- r_q()$name
# ...pour localiser les marqueurs.
# Chaque marqueur a un libellé correspondant au nom de l'adresse
map <- map %>% addMarkers(long, lat, label = name)
return(map)
})
}
# Lance l'application
shinyApp(ui = ui, server = server)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment