Created
January 7, 2023 17:23
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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