Trabajo Práctico N2: “Explorando y mapeando información georreferenciada de OpenStreetMap”

La ciudad con la que vamos a continuar trabajando es la Ciudad Autónoma de Buenos Aires"

library(tidyverse)
## -- 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
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(sf)
## Linking to GEOS 3.6.1, GDAL 2.2.3, PROJ 4.9.3
library (leaflet)
library(osmdata)
## Data (c) OpenStreetMap contributors, ODbL 1.0. https://www.openstreetmap.org/copyright

I. Descargar de OpenStreetMap la grilla de calles para la Ciudad elegida en el ejercicio 1 y mapearla por uno de sus atributos (velocidad mínima, velocidad máxima, cantidad de carriles, etc).

bbox <- getbb("Ciudad Autónoma de Buenos Aires, Argentina")
bbox_poly <- getbb("Ciudad Autónoma de Buenos Aires, Argentina", format_out = "sf_polygon")
leaflet(bbox_poly) %>%
    addTiles() %>% 
    addPolygons()
CABA <- opq(bbox) %>% 
    add_osm_feature(key = "highway") %>% 
    osmdata_sf()
calles <- CABA$osm_lines 
calles <- st_intersection(calles, bbox_poly)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
ggplot() +
    geom_sf(data = calles)+
        theme_void() +
    labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Calles",
         caption = "fuente: OpenStreetMap")

calles <- calles %>% 
  mutate(maxspeed = as.numeric(maxspeed),
         lanes = ifelse(is.na(lanes), 1, as.numeric(lanes)))
ggplot(calles) +
    geom_sf(aes(color = maxspeed), alpha = 0.5) +
    scale_color_gradient(low="khaki1", high="firebrick4")+
      theme_void() +
    labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Vías de circulación",
         caption = "Fuente: OpenStreetMap",
         color = "Velocidad Máxima")

ggplot() +
    geom_sf(data = calles,
             color = "gray40", alpha = .5) +
    geom_sf(data = filter(calles, str_detect(name, "Avenida")), 
            color ="dodgerblue4") +
    theme_void() +
      labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Avenidas",
         caption = "Fuente: OpenStreetMap")

ggplot() +
    geom_sf(data = calles,
             color = "gray70", alpha = .4) +
    geom_sf(data = filter(calles, bicycle == "designated"), 
            color ="chartreuse4") +
    theme_void() +
      labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Ciclovías",
         caption = "Fuente: OpenStreetMap")

ggplot(calles) +
    geom_sf(aes(color = lanes), alpha = 0.5) +
    scale_color_viridis_c  ()+
      theme_void() +
    labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Carriles de circulación",
         caption = "Fuente: OpenStreetMap",
         color = "Número de carriles de circulación")

II. Descargar de OpenStreetMap una (o más) capas de datos de tipo puntos o polígonos. (Ver catálogo de categorías en https://wiki.openstreetmap.org/wiki/Map_Features)

a. Proyectar los datos descargados en un mapa y comentar los resultados: ¿Cómo se distribuyen en la Ciudad?

Estaciones de Ecobici

CABA_estaciones <- opq(bbox) %>% 
  add_osm_feature(key = "amenity", value = "bicycle_rental") %>% 
  osmdata_sf() 
CABA_estaciones<- st_intersection(CABA_estaciones$osm_points, bbox_poly)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
head(CABA_estaciones)
## Simple feature collection with 6 features and 15 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -58.40744 ymin: -34.62776 xmax: -58.36887 ymax: -34.58387
## CRS:            EPSG:4326
##                osm_id                      name        amenity capacity covered
## 1045957370 1045957370 001 - Facultad de Derecho bicycle_rental     <NA>    <NA>
## 1125852274 1125852274       006 - Parque Lezama bicycle_rental     <NA>    <NA>
## 1125852281 1125852281          004 - Plaza Roma bicycle_rental       20      no
## 1125852284 1125852284            007 - Obelisco bicycle_rental     <NA>    <NA>
## 1125852286 1125852286            008 - Congreso bicycle_rental     <NA>    <NA>
## 1289591557 1289591557    009 - Parque Las Heras bicycle_rental     <NA>    <NA>
##            fee fixme    network opening_hours operator operator.type ref
## 1045957370  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   1
## 1125852274  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   6
## 1125852281  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   4
## 1125852284  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   7
## 1125852286  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   8
## 1289591557  no  <NA> BA Ecobici          <NA>  Tembici          <NA>   9
##            shelter supervised                      website
## 1045957370    <NA>       <NA> https://www.baecobici.com.ar
## 1125852274    <NA>       <NA> https://www.baecobici.com.ar
## 1125852281    <NA>       <NA> https://www.baecobici.com.ar
## 1125852284    <NA>       <NA> https://www.baecobici.com.ar
## 1125852286    <NA>       <NA> https://www.baecobici.com.ar
## 1289591557    <NA>       <NA> https://www.baecobici.com.ar
##                               geometry
## 1045957370 POINT (-58.39094 -34.58387)
## 1125852274 POINT (-58.36905 -34.62776)
## 1125852281 POINT (-58.36887 -34.60173)
## 1125852284 POINT (-58.38101 -34.60577)
## 1125852286 POINT (-58.38918 -34.60995)
## 1289591557 POINT (-58.40744 -34.58506)
ggplot() +
  geom_sf(data = calles, 
            color = "gray70") +
    geom_sf(data = filter(calles, bicycle == "designated"), 
            color ="chartreuse4", size=1.5)+
  geom_sf(data = CABA_estaciones, size=1.5, alpha=1, color="darkslateblue") +
  theme_void() +
    labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Estaciones de Ecobici y ciclovías",
         caption = "Fuente: OpenStreetMap")

Se observa que la mayor cantidad de estaciones de Ecobici se encuentran en el centro administrativo de la ciudad. Al cruzar la información, con una base de la red de ciclovías existente, se observa que hay muchas estaciones que se encuentran desvinculadas a la red y viceversa.

Cruces Semaforizados

CABA_semaforos <- opq(bbox) %>% 
  add_osm_feature(key = "highway", value = "traffic_signals") %>% 
  osmdata_sf() 
CABA_semaforos <- st_intersection(CABA_semaforos$osm_points, bbox_poly)
## although coordinates are longitude/latitude, st_intersection assumes that they are planar
## Warning: attribute variables are assumed to be spatially constant throughout all
## geometries
head(CABA_semaforos)
## Simple feature collection with 6 features and 15 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -58.38205 ymin: -34.62216 xmax: -58.38078 ymax: -34.59159
## CRS:            EPSG:4326
##            osm_id bicycle crossing direction enforcement         highway lanes
## 32382072 32382072    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382075 32382075    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382078 32382078    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382578 32382578    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382580 32382580    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32385175 32385175    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
##          note railway side source surface traffic_signals
## 32382072 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382075 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382078 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382578 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382580 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32385175 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
##          traffic_signals.direction traffic_signals.sound
## 32382072                      <NA>                  <NA>
## 32382075                      <NA>                  <NA>
## 32382078                      <NA>                  <NA>
## 32382578                      <NA>                  <NA>
## 32382580                      <NA>                  <NA>
## 32385175                      <NA>                  <NA>
##                             geometry
## 32382072 POINT (-58.38205 -34.59159)
## 32382075 POINT (-58.38172 -34.60613)
## 32382078 POINT (-58.38098 -34.62216)
## 32382578 POINT (-58.38078 -34.62215)
## 32382580 POINT (-58.38159 -34.60025)
## 32385175  POINT (-58.38197 -34.5954)
ggplot() +
  geom_sf(data = calles, 
            color = "gray60") +
  geom_sf(data = CABA_semaforos, size=0.6, alpha=0.25, color="salmon") +
  theme_void() +
    labs(title = "Ciudad Autónoma de Buenos Aires",
         subtitle = "Cruces semaforizados",
         caption = "Fuente: OpenStreetMap")

Se observa que la mayor cantidad de los cruces semaforizados, se encuentran en el centro administrativo de la ciudad. A medida que se alejan de dicho centro, la cantidad de cruces semaforizados se reduce, hasta observar una fuerte disminución en lo que son los barrios cercanos a la Av. Gral. Paz o el Riachuelo. Además, se pueden observar la cantidad de cruces semafóricos que presentan las principales Avenidad de la Ciudad, como Av. 9 de Julio, Av. Juan B. Justo, Av. San Martín, Av. Cabildo entre otras.

b. Hacer un conteo de los ítems de la capa descargada por barrio, mapearlo y compararlo con el conteo de los ítems descargados en el ejercicio anterior: ¿La distribución es similar o hay diferencias? ¿A qué se puede deber?

comunas2 <- st_read('https://bitsandbricks.github.io/data/CABA_comunas.geojson')
## Reading layer `CABA_comunas' from data source `https://bitsandbricks.github.io/data/CABA_comunas.geojson' using driver `GeoJSON'
## Simple feature collection with 15 features and 4 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -58.53152 ymin: -34.70529 xmax: -58.33514 ymax: -34.52754
## CRS:            4326
head(comunas2)
## Simple feature collection with 6 features and 4 fields
## geometry type:  MULTIPOLYGON
## dimension:      XY
## bbox:           xmin: -58.4627 ymin: -34.6625 xmax: -58.33514 ymax: -34.56935
## CRS:            4326
##                                                                        barrios
## 1 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 2                                                                     RECOLETA
## 3                                                    BALVANERA - SAN CRISTOBAL
## 4                           BARRACAS - BOCA - NUEVA POMPEYA - PARQUE PATRICIOS
## 5                                                              ALMAGRO - BOEDO
## 6                                                                    CABALLITO
##   perimetro     area comunas                       geometry
## 1  35572.65 17802807       1 MULTIPOLYGON (((-58.36854 -...
## 2  21246.61  6140873       2 MULTIPOLYGON (((-58.39521 -...
## 3  10486.26  6385991       3 MULTIPOLYGON (((-58.41192 -...
## 4  36277.44 21701236       4 MULTIPOLYGON (((-58.3552 -3...
## 5  12323.47  6660526       5 MULTIPOLYGON (((-58.41287 -...
## 6  10990.96  6851029       6 MULTIPOLYGON (((-58.43061 -...
semaforizados_comunas1<- st_join(CABA_semaforos, comunas2)
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
## although coordinates are longitude/latitude, st_intersects assumes that they are planar
semaforizados_comunas1 %>% 
    group_by(comunas) %>% 
    summarise(cantidad=n()) 
## Warning: Factor `comunas` contains implicit NA, consider using
## `forcats::fct_explicit_na`
## Simple feature collection with 16 features and 2 fields
## geometry type:  MULTIPOINT
## dimension:      XY
## bbox:           xmin: -58.53133 ymin: -34.69844 xmax: -58.35634 ymax: -34.53563
## CRS:            EPSG:4326
## # A tibble: 16 x 3
##    comunas cantidad                                                     geometry
##  * <fct>      <int>                                             <MULTIPOINT [°]>
##  1 1           1494 ((-58.39292 -34.59967), (-58.39169 -34.61815), (-58.39167 -~
##  2 10           468 ((-58.53133 -34.61744), (-58.5313 -34.61791), (-58.53122 -3~
##  3 11           596 ((-58.52932 -34.61097), (-58.52736 -34.61237), (-58.5272 -3~
##  4 12           616 ((-58.51476 -34.57982), (-58.5146 -34.57972), (-58.51265 -3~
##  5 13           684 ((-58.47533 -34.53936), (-58.47473 -34.54014), (-58.47429 -~
##  6 14           860 ((-58.44881 -34.56789), (-58.44806 -34.56829), (-58.44685 -~
##  7 15           746 ((-58.50214 -34.59313), (-58.50178 -34.59509), (-58.50088 -~
##  8 2            456 ((-58.41584 -34.5978), (-58.41552 -34.59673), (-58.41447 -3~
##  9 3            684 ((-58.41444 -34.61075), (-58.4134 -34.61261), (-58.41309 -3~
## 10 4            844 ((-58.43441 -34.6531), (-58.43365 -34.65249), (-58.43201 -3~
## 11 5            530 ((-58.43332 -34.60269), (-58.43229 -34.60395), (-58.43213 -~
## 12 6            424 ((-58.4627 -34.60737), (-58.46266 -34.60746), (-58.4622 -34~
## 13 7            588 ((-58.47648 -34.62522), (-58.47546 -34.62745), (-58.47435 -~
## 14 8            428 ((-58.49915 -34.67265), (-58.49807 -34.67194), (-58.49712 -~
## 15 9            458 ((-58.52998 -34.63935), (-58.52994 -34.64057), (-58.52989 -~
## 16 <NA>          22 ((-58.51847 -34.66246), (-58.51312 -34.57606), (-58.51183 -~
head(semaforizados_comunas1)
## Simple feature collection with 6 features and 19 fields
## geometry type:  POINT
## dimension:      XY
## bbox:           xmin: -58.38205 ymin: -34.62216 xmax: -58.38078 ymax: -34.59159
## CRS:            EPSG:4326
##            osm_id bicycle crossing direction enforcement         highway lanes
## 32382072 32382072    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382075 32382075    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382078 32382078    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382578 32382578    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32382580 32382580    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
## 32385175 32385175    <NA>     <NA>      <NA>        <NA> traffic_signals  <NA>
##          note railway side source surface traffic_signals
## 32382072 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382075 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382078 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382578 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32382580 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
## 32385175 <NA>    <NA> <NA>   <NA>    <NA>            <NA>
##          traffic_signals.direction traffic_signals.sound
## 32382072                      <NA>                  <NA>
## 32382075                      <NA>                  <NA>
## 32382078                      <NA>                  <NA>
## 32382578                      <NA>                  <NA>
## 32382580                      <NA>                  <NA>
## 32385175                      <NA>                  <NA>
##                                                                               barrios
## 32382072 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 32382075 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 32382078 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 32382578 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 32382580 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
## 32385175 CONSTITUCION - MONSERRAT - PUERTO MADERO -  RETIRO - SAN NICOLAS - SAN TELMO
##          perimetro     area comunas                    geometry
## 32382072  35572.65 17802807       1 POINT (-58.38205 -34.59159)
## 32382075  35572.65 17802807       1 POINT (-58.38172 -34.60613)
## 32382078  35572.65 17802807       1 POINT (-58.38098 -34.62216)
## 32382578  35572.65 17802807       1 POINT (-58.38078 -34.62215)
## 32382580  35572.65 17802807       1 POINT (-58.38159 -34.60025)
## 32385175  35572.65 17802807       1  POINT (-58.38197 -34.5954)
comunas_semaforizadas2<- semaforizados_comunas1 %>%
  filter(!is.na(comunas)) %>%
  group_by(comunas) %>%
  summarise(cantidad=n())


comunas_semaforizadas2 <- st_set_geometry (comunas_semaforizadas2, NULL)

comunas2 <- left_join(comunas2, comunas_semaforizadas2)
## Joining, by = "comunas"
ggplot() +
  geom_sf(data = comunas2, aes(fill=( (cantidad/2 )/(area/1000000)))) +
  geom_sf_text(data=comunas2, aes(label = comunas), size=2.5, colour = "black")+
    labs(title = "Cantidad de cruces semafóricos por Comuna en relación al área",
         subtitle = "Ciudad Autónoma de Buenos Aires, 2020",
         fill = "Cantidad por km 2 ",
         caption= "Fuente: OpenStreetMap",
         y="",
         x="") +
  scale_fill_viridis_c()
## Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
## give correct results for longitude/latitude data

Podemos observar que las comunas que presentan una mayor cantidad de semáforos en relación a su superficie son: La Comuna 3, La Comuna 1, La comuna 5 y La comuna 2. En relación con el mapa de coropletas que realizamos la vez anterior, (utilizando información de badata), podemos observar que la distribución es muy parecida, pero el valor por km2, es diferente dado que se reporta una mayor cantidad de cruces semáforizados en relación con la información obtenida de BA data (una diferencia de 1009 cruces). Esto puede deberse a dos motivos: que la información de BAdata no está actualizada o bien hay errores en los reportes de la gente.

La información descargada desde OpenStreetMap presentaba todos los cruces semaforizadosx2, es por eso que se decidió dividir a la mitad la información de “cantidad”