Cargamos las librerías necesarias para la realización del TP:

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 3.6.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.0 --
## v ggplot2 3.3.0     v purrr   0.3.3
## v tibble  2.1.3     v dplyr   0.8.4
## v tidyr   1.0.2     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.5.0
## Warning: package 'tidyr' was built under R version 3.6.3
## Warning: package 'readr' was built under R version 3.6.3
## Warning: package 'purrr' was built under R version 3.6.3
## Warning: package 'dplyr' was built under R version 3.6.3
## Warning: package 'stringr' was built under R version 3.6.3
## Warning: package 'forcats' was built under R version 3.6.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(sf)
## Warning: package 'sf' was built under R version 3.6.3
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library(osrm)
## Warning: package 'osrm' was built under R version 3.6.3
## Data: (c) OpenStreetMap contributors, ODbL 1.0 - http://www.openstreetmap.org/copyright
## Routing: OSRM - http://project-osrm.org/
library(leaflet)
## Warning: package 'leaflet' was built under R version 3.6.3

I. Elegir un dataset que contenga servicios esenciales (hospitales, escuelas, comisarías, etc) en una Ciudad. En este caso deberán elegir un barrio céntrico y uno periférico del shape de barrios y calcular ambos centroides. Los datos pueden ser descargados del portal open data de la ciudad o de OSM y deben tener ubicación geográfica.

La ciudad elegida fue CABA y se mapearon las comisarias.

barrios <- st_read("http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson")
## Reading layer `barrios_badata' from data source `http://cdn.buenosaires.gob.ar/datosabiertos/datasets/barrios/barrios.geojson' using driver `GeoJSON'
## Simple feature collection with 48 features and 4 fields
## geometry type:  POLYGON
## dimension:      XY
## bbox:           xmin: -58.53152 ymin: -34.70529 xmax: -58.33515 ymax: -34.52649
## CRS:            4326
comisarias <- read.csv("comisarias-policia-de-la-ciudad.csv",
                       encoding="UTF-8") %>%
                       mutate(nombre=as.character(nombre))
barrios$barrio
##  [1] CHACARITA         PATERNAL          VILLA CRESPO      VILLA DEL PARQUE 
##  [5] ALMAGRO           CABALLITO         VILLA SANTA RITA  MONTE CASTRO     
##  [9] VILLA REAL        FLORES            FLORESTA          CONSTITUCION     
## [13] SAN CRISTOBAL     BOEDO             VELEZ SARSFIELD   VILLA LURO       
## [17] PARQUE PATRICIOS  MATADEROS         VILLA LUGANO      SAN TELMO        
## [21] SAAVEDRA          COGHLAN           VILLA URQUIZA     COLEGIALES       
## [25] BALVANERA         VILLA GRAL. MITRE PARQUE CHAS       AGRONOMIA        
## [29] VILLA ORTUZAR     BARRACAS          PARQUE AVELLANEDA PARQUE CHACABUCO 
## [33] NUEVA POMPEYA     PALERMO           VILLA RIACHUELO   VILLA SOLDATI    
## [37] VILLA PUEYRREDON  VILLA DEVOTO      LINIERS           VERSALLES        
## [41] PUERTO MADERO     MONSERRAT         SAN NICOLAS       BELGRANO         
## [45] RECOLETA          RETIRO            NUÑEZ             BOCA             
## 48 Levels: AGRONOMIA ALMAGRO BALVANERA BARRACAS BELGRANO BOCA ... VILLA URQUIZA

Determinación de los barrios centroides:

barrios_centroides <- barrios %>%
  st_centroid()
## Warning in st_centroid.sf(.): st_centroid assumes attributes are constant over
## geometries of x
## Warning in st_centroid.sfc(st_geometry(x), of_largest_polygon =
## of_largest_polygon): st_centroid does not give correct centroids for longitude/
## latitude data

Ubicación geográfica de los barrios centroides:

ggplot()+
  geom_sf(data=barrios, fill="grey",color="white")+
  geom_sf(data=barrios_centroides, size=2)+
  labs(title = "Barrios de la Ciudad",
         subtitle = "Ubicación de los centroides",
         fill="Barrios",
         caption= "Fuente:https://data.buenosaires.gob.ar/")+
  theme_void()

Dentro de la Ciudad de Buenos Aires, determinamos:

  • Barrio Céntrico: VILLA CRESPO
  • Barrio Periférico: SAAVEDRA
barrios_centroides <- barrios_centroides %>%
  filter(barrio=="VILLA CRESPO" | barrio=="SAAVEDRA") %>%
  mutate(ubicacion=if_else(barrio=="VILLA CRESPO", "CENTRO", "PERIFERIA"))
barrios_centroides <- cbind(barrios_centroides, st_coordinates(barrios_centroides)) %>%
                      st_set_geometry(NULL)
ggplot()+
  geom_sf(data=barrios, fill="grey",color="white")+
  geom_point(data=barrios_centroides, aes(x=X, y=Y, color=ubicacion), size=6)+
  geom_point(data=comisarias, aes(x=long, y=lat), shape=20, size=3)+
  labs(title = "Barrios de la Ciudad",
         subtitle = "Ubicación de las comisarias y centroides elegidos Centro | Periferia",
         color="Barrios",
         caption= "Fuente:https://data.buenosaires.gob.ar/")+
  theme_void()

Servicios esenciales: Estimar la distancia entre los centroides calculados en el punto I y los ítems que componen la capa descargada. Describir los resultados obtenidos y hacer los siguientes mapas:

Servicio elegido Comisarias:

ruteo_a_comisarias <- function(o_nombre, o_x, o_y, d_nombre, d_x, d_y) {
  
  ruta <- osrmRoute(src = c(o_nombre, o_x, o_y),
                    dst = c(d_nombre, d_x, d_y), 
                    returnclass = "sf",
                    overview = "full")
  
  cbind(ORIGEN = o_nombre, DESTINO = d_nombre, ruta)
  
}

Determinación de distancia entre las comisarias el el barrio céntrico: VILLA CRESPO

comisarias_VC <- comisarias %>%
  mutate(ORIGEN="VILLA CRESPO") %>%
  left_join(barrios_centroides, by=c("ORIGEN"="barrio")) %>%
  rename(NOMBRE_ORIGEN=ORIGEN,
         LON_ORIGEN=X,
         LAT_ORIGEN=Y,
         NOMBRE_DESTINO=nombre,
         LON_DESTINO=long,
         LAT_DESTINO=lat) %>%
  select(NOMBRE_ORIGEN, LON_ORIGEN, LAT_ORIGEN, NOMBRE_DESTINO, LON_DESTINO, LAT_DESTINO)
## Warning: Column `ORIGEN`/`barrio` joining character vector and factor, coercing
## into character vector
ruteo_VC <- list(comisarias_VC$NOMBRE_ORIGEN, comisarias_VC$LON_ORIGEN,comisarias_VC$LAT_ORIGEN,
                   comisarias_VC$NOMBRE_DESTINO, comisarias_VC$LON_DESTINO,comisarias_VC$LAT_DESTINO)

ruteo_centrico <- pmap(ruteo_VC, ruteo_a_comisarias) %>% 
  reduce(rbind)
ruteo_centrico <-mutate(ruteo_centrico, RUTA = paste(ORIGEN,"a", DESTINO)) 
filter(ruteo_centrico, distance == min(distance))
## Simple feature collection with 1 feature and 7 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -58.44367 ymin: -34.59982 xmax: -58.43972 ymax: -34.59635
## CRS:            EPSG:4326
##         ORIGEN                DESTINO          src                    dst
## 1 VILLA CRESPO Comisaria Vecinal 15-B VILLA CRESPO Comisaria Vecinal 15-B
##   duration distance                       geometry
## 1 3.413333   0.9174 LINESTRING (-58.44228 -34.5...
##                                    RUTA
## 1 VILLA CRESPO a Comisaria Vecinal 15-B

La comisaria mas cerca de VILLA CRESPO es la Comisaria vecinal 15-B, ubicada a 0.9km con 3.5 minutos de viaje en auto.

Mapa con los ruteos del centroide del barrio céntrico a los ítems de servicios esenciales elegido.

leaflet(ruteo_centrico) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addPolylines(color = ~colorNumeric("RdBu", ruteo_centrico$distance)(distance),
              label = ruteo_centrico$RUTA %>%
              lapply(htmltools::HTML)) %>%
  addLegend("bottomright", pal = colorNumeric("RdBu", ruteo_centrico$distance), values = ~distance,
            title = "Distancia",
            opacity = 0.55)

Determinación de distancia entre las comisarias el el barrio periférico: SAAVEDRA

comisarias_SAA <- comisarias %>%
  mutate(ORIGEN="SAAVEDRA") %>%
  left_join(barrios_centroides, by=c("ORIGEN"="barrio")) %>%
  rename(NOMBRE_ORIGEN=ORIGEN,
         LON_ORIGEN=X,
         LAT_ORIGEN=Y,
         NOMBRE_DESTINO=nombre,
         LON_DESTINO=long,
         LAT_DESTINO=lat) %>%
  select(NOMBRE_ORIGEN, LON_ORIGEN, LAT_ORIGEN, NOMBRE_DESTINO, LON_DESTINO, LAT_DESTINO)
## Warning: Column `ORIGEN`/`barrio` joining character vector and factor, coercing
## into character vector
ruteo_SAA <- list(comisarias_SAA$NOMBRE_ORIGEN, comisarias_SAA$LON_ORIGEN,comisarias_SAA$LAT_ORIGEN,
                   comisarias_SAA$NOMBRE_DESTINO, comisarias_SAA$LON_DESTINO,comisarias_SAA$LAT_DESTINO)

ruteo_periferico <- pmap(ruteo_SAA, ruteo_a_comisarias) %>% 
  reduce(rbind)
ruteo_periferico <-mutate(ruteo_periferico, RUTA = paste(ORIGEN,"a", DESTINO)) 
filter(ruteo_periferico, distance == min(distance))
## Simple feature collection with 1 feature and 7 fields
## geometry type:  LINESTRING
## dimension:      XY
## bbox:           xmin: -58.49094 ymin: -34.5531 xmax: -58.48874 ymax: -34.55079
## CRS:            EPSG:4326
##     ORIGEN              DESTINO      src                  dst duration distance
## 1 SAAVEDRA Comisaria Comunal 12 SAAVEDRA Comisaria Comunal 12 1.556667   0.3594
##                         geometry                            RUTA
## 1 LINESTRING (-58.48874 -34.5... SAAVEDRA a Comisaria Comunal 12

La comisaria mas cerca de SAAVEDRA en la Comisaria vecinal 12, ubicada a 0,3 km con 1.5 minutos de viaje en auto.

Mapa con los ruteos del centroide del barrio céntrico a los ítems de servicios esenciales elegido.

leaflet(ruteo_periferico) %>%
  addTiles() %>%
  addProviderTiles(providers$CartoDB.DarkMatter) %>%
  addPolylines(color = ~colorNumeric("RdBu", ruteo_periferico$distance)(distance),
              label = ruteo_periferico$RUTA %>%
              lapply(htmltools::HTML)) %>%
  addLegend("bottomright", pal = colorNumeric("RdBu", ruteo_periferico$distance), values = ~distance,
            title = "Distancia",
            opacity = 0.55)

Con este ultimo chunk damos por finalizado el TP5.-