library(tidygeocoder)
library(sf)
library(tidyverse)
library(leaflet)
library(osrm)

EJERCICIO DE PRÁCTICA

Ciudad: Ciudad Autónoma de Buenos Aires, Argentina

CONSIGNA: PARTE 1

  1. Obtener las coordenadas (longitud y latitud) de la Casa de Gobierno (Casa Rosada) de la Ciudad Autónoma de Buenos Aires.
casa_rosada <- geo(address = "Balcarce 50, CABA, Buenos Aires, Argentina",
                   method = "osm")
  1. Generar un mapa interactivo donde se ubique la Casa de Gobierno de la Ciudad de Buenos Aires.
leaflet(casa_rosada) %>% 
  addTiles() %>% 
  addMarkers(~long, ~lat)
  1. Cargar el dataset caba_comisarias.csv que se encuentra en la carpeta data y contiene el domicilio de todas las comisarías de la Ciudad.
caba_comisarias <- read.csv("data/caba_comisarias.csv",
                            encoding = "UTF-8",
                          stringsAsFactors = TRUE)
dim(caba_comisarias)
## [1] 49  2
head(caba_comisarias)
##                  nombre           direccion
## 1 Comisaria Vecinal 1-D         LAVALLE 451
## 2 Comisaria Vecinal 5-B          MUÑIZ 1250
## 3 Comisaria Vecinal 6-A DIAZ VELEZ AV. 5152
## 4 Comisaria Vecinal 7-B          VALLE 1454
## 5   Comisaria Comunal 6 AVELLANEDA AV. 1548
## 6   Comisaria Comunal 1       SUIPACHA 1156
  1. Realizar todas las funciones que sean necesarias para poder georreferenciar todas las comisarías del punto 3.
caba_comisarias <- caba_comisarias %>% 
  mutate(direccion= paste(direccion, ", Ciudad de Buenos Aires, Argentina", sep = ""))
Sys.sleep(1)
caba_comisarias <- caba_comisarias %>% 
  geocode(address = direccion, method= "osm")
  1. Generar un mapa interactivo con los datos del punto 3. Realizar algunos ajustes estéticos a elección, como por ejemplo cambiar el mapa de fondo, agregar un pop-up, etc. Ejemplos de mapas bases:

Stamen Terrain leaflet() %>% addProviderTiles(providers$Stamen.Terrain) %>% setView(lng = -73.97, lat = 40.77, zoom = 12)

Stamen Toner leaflet() %>% addProviderTiles(providers$Stamen.Toner) %>% setView(lng = -73.97, lat = 40.77, zoom = 12)

Stamen Watercolor leaflet() %>% addProviderTiles(providers$Stamen.Watercolor) %>% setView(lng = -73.97, lat = 40.77, zoom = 12)

CartoDB Positron leaflet() %>% addProviderTiles(providers$CartoDB.Positron) %>% setView(lng = -73.97, lat = 40.77, zoom = 12)

CartoDB DarkMatter leaflet() %>% addProviderTiles(providers$CartoDB.DarkMatter) %>% setView(lng = -73.97, lat = 40.77, zoom = 12)

leaflet(caba_comisarias) %>% 
  addProviderTiles(providers$CartoDB.DarkMatter) %>% 
  addMarkers(~long, ~ lat,
             popup= ~direccion )
  1. Calcular, a partir de isócronas, cuantas comisarías se encuentran a menos de 10 minutos en auto de la Casa de Gobierno. Hacer un mapa con los resultados.
isocrona <- osrmIsochrone(loc = c(casa_rosada$long, casa_rosada$lat),
                          breaks = c(0, 10),
                          res = 35,
                          osrm.profile = "car")
leaflet(isocrona) %>%
  addProviderTiles(providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~colorBin("YlOrRd", domain = isocrona$isomax)(isomax),
  color = NA,
  fillOpacity = 0.5)%>%
  addMarkers(data= casa_rosada) %>% 
   addMiniMap(tiles=providers$CartoDB.Positron)
st_crs(isocrona)
## Coordinate Reference System:
##   User input: EPSG:4326 
##   wkt:
## GEOGCRS["WGS 84",
##     ENSEMBLE["World Geodetic System 1984 ensemble",
##         MEMBER["World Geodetic System 1984 (Transit)"],
##         MEMBER["World Geodetic System 1984 (G730)"],
##         MEMBER["World Geodetic System 1984 (G873)"],
##         MEMBER["World Geodetic System 1984 (G1150)"],
##         MEMBER["World Geodetic System 1984 (G1674)"],
##         MEMBER["World Geodetic System 1984 (G1762)"],
##         MEMBER["World Geodetic System 1984 (G2139)"],
##         ELLIPSOID["WGS 84",6378137,298.257223563,
##             LENGTHUNIT["metre",1]],
##         ENSEMBLEACCURACY[2.0]],
##     PRIMEM["Greenwich",0,
##         ANGLEUNIT["degree",0.0174532925199433]],
##     CS[ellipsoidal,2],
##         AXIS["geodetic latitude (Lat)",north,
##             ORDER[1],
##             ANGLEUNIT["degree",0.0174532925199433]],
##         AXIS["geodetic longitude (Lon)",east,
##             ORDER[2],
##             ANGLEUNIT["degree",0.0174532925199433]],
##     USAGE[
##         SCOPE["Horizontal component of 3D system."],
##         AREA["World."],
##         BBOX[-90,-180,90,180]],
##     ID["EPSG",4326]]
caba_comisarias_geo <- caba_comisarias %>% 
  st_as_sf(coords = c("long", "lat"), crs=4326)
sf_use_s2(FALSE)
caba_comisarias_geo <- st_intersection(caba_comisarias_geo, isocrona)
caba_comisarias_geo
## Simple feature collection with 19 features and 5 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: -58.41684 ymin: -34.64722 xmax: -58.36067 ymax: -34.58755
## Geodetic CRS:  WGS 84
## # A tibble: 19 × 6
##    nombre                direccion    id isomin isomax              geometry
##  * <fct>                 <chr>     <int>  <dbl>  <dbl>           <POINT [°]>
##  1 Comisaria Vecinal 1-D LAVALLE …     1      0     10 (-58.37325 -34.60199)
##  2 Comisaria Vecinal 6-A DIAZ VEL…     1      0     10 (-58.41684 -34.60841)
##  3 Comisaria Comunal 1   SUIPACHA…     1      0     10 (-58.38004 -34.59465)
##  4 Comisaria Vecinal 1-… SAN JOSE…     1      0     10  (-58.3852 -34.62235)
##  5 Comisaria Comunal 2   LAS HERA…     1      0     10 (-58.39722 -34.58755)
##  6 Comisaria Vecinal 1-C AV. SAN …     1      0     10 (-58.39073 -34.62252)
##  7 Comisaria Vecinal 2-B CHARCAS …     1      0     10 (-58.40664 -34.59398)
##  8 Comisaria Vecinal 1-… PERU 105…     1      0     10  (-58.3745 -34.60858)
##  9 Comisaria Vecinal 3-B CATAMARC…     1      0     10  (-58.40311 -34.6261)
## 10 Comisaria Vecinal 1-E AV. INGE…     1      0     10  (-58.36385 -34.6243)
## 11 Comisaria Vecinal 4-C PINZON 4…     1      0     10  (-58.36067 -34.6341)
## 12 Comisaria Vecinal 4-… MONTES D…     1      0     10 (-58.37433 -34.63919)
## 13 Comisaria Vecinal 1-A TUCUMAN …     1      0     10 (-58.38895 -34.60185)
## 14 Comisaria Vecinal 4-D CALIFORN…     1      0     10 (-58.37469 -34.64722)
## 15 Comisaria Vecinal 1-B TACUARI …     1      0     10 (-58.37862 -34.61724)
## 16 Comisaria Comunal 3   LAVALLE …     1      0     10 (-58.39482 -34.60341)
## 17 Comisaria Vecinal 3-A LAVALLE …     1      0     10   (-58.4041 -34.6033)
## 18 Comisaria Vecinal 3-… GENERAL …     1      0     10 (-58.40935 -34.61707)
## 19 Comisaria Comunal 5   BILLINGH…     1      0     10 (-58.41556 -34.60443)
leaflet(isocrona) %>%
  addProviderTiles(providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~colorBin("Purples", domain = isocrona$isomax)(isomax),
  color = NA,
  fillOpacity = 0.5) %>%
  addMarkers(data=casa_rosada,
             popup = "Casa Rosada") %>%
  addCircles(data=caba_comisarias_geo,
             popup = ~nombre,
             color = "black")%>%
  addMiniMap(tiles=providers$CartoDB.Positron)

CONSIGNA: PARTE 2

  1. Realizar un ruteo múltiple desde la Casa de Gobierno geolocalizada en el punto 1 (Parte 1) y las 5 comisarías que se ubican a menos de 10 minutos en auto. ¿Cuál es la comisaría más cercana a la Casa de Gobierno si utilizamos al auto como medio de transporte? ¿Cuánto tiempo tardaríamos en llegar?
ruteo_funcion <- function(nombre_origen, lon_origen, lat_origen,
                          nombre_destino, lon_destino, lat_destino)
  {
  ruta <- osrmRoute(src = c(lon_origen, lat_origen),
                    dst = c(lon_destino, lat_destino),
                    overview = "full",
                    osrm.profile = "car")
  ruta %>%
  mutate(src=nombre_origen,
         dst=nombre_destino)
}
caba_comisarias_geo <- caba_comisarias_geo %>% 
  mutate(long = st_coordinates(.)[,1],
         lat  = st_coordinates(.)[,2]) %>%
  st_drop_geometry()
ruteo <- list("Casa Rosada", casa_rosada$long, casa_rosada$lat,
              caba_comisarias_geo$nombre, caba_comisarias_geo$long, caba_comisarias_geo$lat)
ruteo <- pmap(ruteo, ruteo_funcion)
summary(ruteo)
##       Length Class Mode
##  [1,] 5      sf    list
##  [2,] 5      sf    list
##  [3,] 5      sf    list
##  [4,] 5      sf    list
##  [5,] 5      sf    list
##  [6,] 5      sf    list
##  [7,] 5      sf    list
##  [8,] 5      sf    list
##  [9,] 5      sf    list
## [10,] 5      sf    list
## [11,] 5      sf    list
## [12,] 5      sf    list
## [13,] 5      sf    list
## [14,] 5      sf    list
## [15,] 5      sf    list
## [16,] 5      sf    list
## [17,] 5      sf    list
## [18,] 5      sf    list
## [19,] 5      sf    list
ruteo <- ruteo %>% 
  reduce(rbind)
  1. Generar un mapa interactivo con todos los ruteos calculados en el punto 1. Realizar algunos ajustes estéticos a elección, como por ejemplo cambiar el mapa de fondo, agregar un pop-up, etc.
leaflet(ruteo) %>% 
  addProviderTiles(providers$CartoDB.DarkMatter) %>% 
  addPolylines(color= "turquoise",
               label= paste("Distancia:", ruteo$distance, "|",
                            "Duración:", ruteo$duration)) %>% 
  addCircleMarkers(data= casa_rosada, ~long, ~lat,
                   popup = "Casa Rosada",
                   color= "black") %>% 
  addCircleMarkers(data=caba_comisarias_geo, ~long, ~lat,
                   popup = ~nombre,
                   color= "white") %>%
  addMiniMap(tiles = providers$CartoDB.DarkMatter)