Autora: GONZALEZ, Dana Agustina

Planteo del problema

¿Qué tan bien cubierta está la ubicación de las escuelas por la red de paradas de colectivo en la Ciudad Palpalá, Jujuy, Argentina?

Palpalá es una ciudad ubicada en la provincia de Jujuy, a 13 km al sureste de San Salvador de Jujuy y cuenta con una población aproximada de 57.000 hab. (INDEC 2022). Sus actividades principales son la industrial (Siderúrgica Aceros Zapla) y residencial.

En términos de movilidad, la gran parte de los desplazamientos en transporte público es pendular hacia San Salvador de Jujuy por dos corredores principales, la Ruta Nacional Nº 66 y la Ruta Provincial Nº 1. Esto se debe a que la ciudad capital concentra las actividades de educación, trabajo, comercio y ocio.

Para moverse en transporte público dentro de Palpalá se pueden usar diversas líneas. Algunas, a su vez, conectan Palpalá con el centro de San Salvador de Jujuy y otras áreas. Es decir que el sistema, en algunas líneas, es urbano e interurbano al mismo tiempo.

En 2010, la ciudad contaba con aproximadamente 50.000 habitantes, ocupando una superficie de 1.042 ha. y con una densidad de 48,16 hab/ha. En diez años la ciudad paso a tener 57.000 habitantes, 1600 ha. de ocupación y una densidad de 34,79 hab/ha. Este crecimiento acelerado y de baja densidad trajo muchos problemas para la movilidad, como ser: grandes distancias para acceder al transporte público, poca frecuencia e inseguridad.

Siguiendo a Chris Zegras, profesor de Transporte en el Instituto Tecnológico de Massachusetts, las personas no quieren transporte. Las personas quieren lo que el transporte puede ofrecerles, es decir buscan “accesibilidad”. Accesibilidad al trabajo, a la educación, la recreación, etc.

El transporte público cobra gran relevancia a la hora de atender a problemáticas emergentes ya que puede profundizar las desigualdades sociales, pero también tiene la capacidad de constituirse en una oportunidad para una ciudad mejor.

El Banco Interamericano de Desarrollo (BID) afirma que las políticas públicas de planeación y las prácticas de proyectos no tienen en cuenta datos desagregados de movilidad, lo que en otras palabras se traduce en una desatención de las necesidades de movilidad que demanda la población. Esta situación exacerba las barreras de acceso a oportunidades y servicios (como educación, salud y empleo). Por el contrario, el potencial del transporte está en la capacidad que este tenga para permitir el acceso a oportunidades.

Este trabajo se concentra en la accesibilidad a la educación por medio del Transporte público. Para eso primero se buscará dar respuesta a la pregunta: ¿Qué tan bien cubierta está la ubicación de las escuelas por la red de paradas de colectivo en la Ciudad Palpalá?

knitr::opts_chunk$set(
  echo = TRUE,      
  warning = FALSE, 
  message = FALSE   
)

Carga de librerías

library(sf)
library(tidyverse)
library(ggmap)
library(osmdata)
library(osrm)
library(units)
library(leaflet)
library(tidygeocoder)

Datos geográficos de la Ciudad de Palpalá

bbox_palpala <- getbb("Palpala, Jujuy, Argentina")
bbox_palpala
##         min       max
## x -65.25711 -65.02115
## y -24.36308 -24.01494
mapa_palpala <- get_stadiamap(bbox = bbox_palpala,
                                         maptype = "alidade_smooth",
                                 zoom=12)

Primera visualización

ggmap(mapa_palpala)

Limites de la Ciudad

polygon_palpala <- getbb("Palpala, Jujuy, Argentina",
                                       format_out = "sf_polygon")
polygon_palpala
## Simple feature collection with 2 features and 0 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -65.25711 ymin: -24.36308 xmax: -65.02115 ymax: -24.01494
## Geodetic CRS:  WGS 84
##                         geometry
## 1 POLYGON ((-65.25711 -24.229...
## 2 POLYGON ((-65.25711 -24.229...
ggplot()+
  geom_sf(data = polygon_palpala)

polygon_palpala <- polygon_palpala %>% 
  unique()
polygon_palpala
## Simple feature collection with 1 feature and 0 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -65.25711 ymin: -24.36308 xmax: -65.02115 ymax: -24.01494
## Geodetic CRS:  WGS 84
##                         geometry
## 1 POLYGON ((-65.25711 -24.229...
ggmap(mapa_palpala)+
  geom_sf(data = polygon_palpala, inherit.aes = FALSE)

ggmap(mapa_palpala)+
  geom_sf(data=polygon_palpala, fill=NA, color="red", lwd=0.75, inherit.aes = FALSE)+
  labs(title="Palpala, Jujuy, Argentina",
       caption="Fuente: OpenStreetMap")+
  theme_void()

Escuelas

available_features()
##   [1] "4wd_only"                    "abandoned"                  
##   [3] "abutters"                    "access"                     
##   [5] "addr"                        "addr:*"                     
##   [7] "addr:city"                   "addr:conscriptionnumber"    
##   [9] "addr:country"                "addr:county"                
##  [11] "addr:district"               "addr:flats"                 
##  [13] "addr:full"                   "addr:hamlet"                
##  [15] "addr:housename"              "addr:housenumber"           
##  [17] "addr:inclusion"              "addr:interpolation"         
##  [19] "addr:place"                  "addr:postbox"               
##  [21] "addr:postcode"               "addr:province"              
##  [23] "addr:state"                  "addr:street"                
##  [25] "addr:subdistrict"            "addr:suburb"                
##  [27] "addr:unit"                   "admin_level"                
##  [29] "aeroway"                     "agricultural"               
##  [31] "alcohol"                     "alt_name"                   
##  [33] "amenity"                     "area"                       
##  [35] "atv"                         "backward"                   
##  [37] "barrier"                     "basin"                      
##  [39] "bdouble"                     "bicycle"                    
##  [41] "bicycle_road"                "biergarten"                 
##  [43] "boat"                        "border_type"                
##  [45] "boundary"                    "brand"                      
##  [47] "bridge"                      "building"                   
##  [49] "building:colour"             "building:fireproof"         
##  [51] "building:flats"              "building:levels"            
##  [53] "building:material"           "building:min_level"         
##  [55] "building:part"               "building:soft_storey"       
##  [57] "bus"                         "bus:lanes"                  
##  [59] "bus_bay"                     "busway"                     
##  [61] "capacity"                    "carriage"                   
##  [63] "castle_type"                 "change"                     
##  [65] "charge"                      "clothes"                    
##  [67] "construction"                "construction#Railways"      
##  [69] "construction_date"           "covered"                    
##  [71] "craft"                       "crossing"                   
##  [73] "crossing:island"             "cuisine"                    
##  [75] "cutting"                     "cycle_rickshaw"             
##  [77] "cycleway"                    "cycleway:left"              
##  [79] "cycleway:left:oneway"        "cycleway:right"             
##  [81] "cycleway:right:oneway"       "denomination"               
##  [83] "destination"                 "diet:*"                     
##  [85] "direction"                   "dispensing"                 
##  [87] "disused"                     "dog"                        
##  [89] "drinking_water"              "drinking_water:legal"       
##  [91] "drive_in"                    "drive_through"              
##  [93] "ele"                         "electric_bicycle"           
##  [95] "electrified"                 "embankment"                 
##  [97] "embedded_rails"              "emergency"                  
##  [99] "end_date"                    "energy_class"               
## [101] "entrance"                    "est_width"                  
## [103] "fee"                         "female"                     
## [105] "fire_object:type"            "fire_operator"              
## [107] "fire_rank"                   "food"                       
## [109] "foot"                        "footway"                    
## [111] "ford"                        "forestry"                   
## [113] "forward"                     "frequency"                  
## [115] "frontage_road"               "fuel"                       
## [117] "full_name"                   "gauge"                      
## [119] "gender_segregated"           "golf_cart"                  
## [121] "goods"                       "gutter"                     
## [123] "hand_cart"                   "hazard"                     
## [125] "hazmat"                      "healthcare"                 
## [127] "healthcare:counselling"      "healthcare:speciality"      
## [129] "height"                      "hgv"                        
## [131] "highway"                     "historic"                   
## [133] "horse"                       "hot_water"                  
## [135] "hov"                         "ice_road"                   
## [137] "incline"                     "industrial"                 
## [139] "inline_skates"               "inscription"                
## [141] "int_name"                    "internet_access"            
## [143] "junction"                    "kerb"                       
## [145] "landuse"                     "lane_markings"              
## [147] "lanes"                       "lanes:bus"                  
## [149] "lanes:psv"                   "layer"                      
## [151] "leaf_cycle"                  "leaf_type"                  
## [153] "leisure"                     "lhv"                        
## [155] "lit"                         "loc_name"                   
## [157] "location"                    "male"                       
## [159] "man_made"                    "max_age"                    
## [161] "max_level"                   "maxaxleload"                
## [163] "maxheight"                   "maxlength"                  
## [165] "maxspeed"                    "maxstay"                    
## [167] "maxweight"                   "maxwidth"                   
## [169] "military"                    "min_age"                    
## [171] "min_level"                   "minspeed"                   
## [173] "mofa"                        "moped"                      
## [175] "motor_vehicle"               "motorboat"                  
## [177] "motorcar"                    "motorcycle"                 
## [179] "motorroad"                   "mountain_pass"              
## [181] "mtb:description"             "mtb:scale"                  
## [183] "name"                        "name:left"                  
## [185] "name:right"                  "name_1"                     
## [187] "name_2"                      "narrow"                     
## [189] "nat_name"                    "natural"                    
## [191] "nickname"                    "noexit"                     
## [193] "non_existent_levels"         "nudism"                     
## [195] "office"                      "official_name"              
## [197] "old_name"                    "oneway"                     
## [199] "oneway:bicycle"              "oneway:bus"                 
## [201] "openfire"                    "opening_hours"              
## [203] "opening_hours:drive_through" "operator"                   
## [205] "orientation"                 "oven"                       
## [207] "overtaking"                  "parking"                    
## [209] "parking:condition"           "parking:lane"               
## [211] "passenger_lines"             "passing_places"             
## [213] "place"                       "power"                      
## [215] "power_supply"                "priority"                   
## [217] "priority_road"               "produce"                    
## [219] "proposed"                    "proposed:name"              
## [221] "protected_area"              "psv"                        
## [223] "psv:lanes"                   "public_transport"           
## [225] "railway"                     "railway:preserved"          
## [227] "railway:track_ref"           "recycling_type"             
## [229] "ref"                         "ref_name"                   
## [231] "reg_name"                    "religion"                   
## [233] "religious_level"             "rental"                     
## [235] "residential"                 "roadtrain"                  
## [237] "route"                       "sac_scale"                  
## [239] "sauna"                       "service"                    
## [241] "service_times"               "shelter_type"               
## [243] "shop"                        "short_name"                 
## [245] "shoulder"                    "shower"                     
## [247] "side_road"                   "sidewalk"                   
## [249] "site"                        "ski"                        
## [251] "smoking"                     "smoothness"                 
## [253] "social_facility"             "sorting_name"               
## [255] "speed_pedelec"               "sport"                      
## [257] "start_date"                  "step_count"                 
## [259] "substation"                  "surface"                    
## [261] "tactile_paving"              "tank"                       
## [263] "taxi"                        "tidal"                      
## [265] "toilets"                     "toilets:wheelchair"         
## [267] "toll"                        "topless"                    
## [269] "tourism"                     "tourist_bus"                
## [271] "tracks"                      "tracktype"                  
## [273] "traffic_calming"             "traffic_sign"               
## [275] "trail_visibility"            "trailblazed"                
## [277] "trailblazed:visibility"      "trailer"                    
## [279] "tunnel"                      "turn"                       
## [281] "type"                        "unisex"                     
## [283] "usage"                       "vehicle"                    
## [285] "vending"                     "voltage"                    
## [287] "water"                       "wheelchair"                 
## [289] "wholesale"                   "width"                      
## [291] "winter_road"                 "wood"
available_tags("amenity")
## # A tibble: 137 × 2
##    Key     Value          
##    <chr>   <chr>          
##  1 amenity animal_boarding
##  2 amenity animal_breeding
##  3 amenity animal_shelter 
##  4 amenity animal_training
##  5 amenity arts_centre    
##  6 amenity atm            
##  7 amenity baby_hatch     
##  8 amenity baking_oven    
##  9 amenity bank           
## 10 amenity bar            
## # ℹ 127 more rows
escuelas_palpala <- opq(bbox_palpala)
escuelas_palpala <- escuelas_palpala %>% 
  add_osm_feature(key = "amenity", value = "school")
escuelas_palpala <- osmdata_sf(escuelas_palpala)
escuelas_palpala
escuelas_polygons <- escuelas_palpala$osm_polygons
dim(escuelas_polygons)
## [1] 38 21
names(escuelas_polygons)
##  [1] "osm_id"           "name"             "addr:city"        "addr:country"    
##  [5] "addr:full"        "addr:housenumber" "addr:postcode"    "addr:street"     
##  [9] "alt_name"         "amenity"          "barrier"          "building"        
## [13] "description"      "fence_type"       "height"           "isced:level"     
## [17] "leisure"          "phone"            "ref:cue"          "roof:material"   
## [21] "geometry"
head(escuelas_polygons)
## Simple feature collection with 6 features and 20 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -65.25812 ymin: -24.25868 xmax: -65.1935 ymax: -24.16805
## Geodetic CRS:  WGS 84
##              osm_id                                                       name
## 287651577 287651577                    Escuela Primaria N° 434 "Minero Jujeño"
## 457599690 457599690                         Escuela especial N 2 Juan Pablo II
## 474086493 474086493                   Escuela N° 204 "Carmen Avila de Naverán"
## 474100012 474100012 Escuela N 207 Gral. de Brigada Armando Pedro Pio Martijena
## 474372486 474372486                 Escuela N 78 Dr. José Benito De La Barcena
## 510320204 510320204                   Escuela Nº 273 Francisco Antonio Rizzuto
##                      addr:city addr:country addr:full addr:housenumber
## 287651577                 <NA>         <NA>      <NA>             <NA>
## 457599690              Palpalá         <NA>      <NA>               99
## 474086493              Palpalá           AR      <NA>              s/n
## 474100012              Palpalá           AR      <NA>              694
## 474372486              Palpalá           AR      <NA>              148
## 510320204 Los Blancos, Palpala         <NA>      <NA>             <NA>
##           addr:postcode           addr:street   alt_name amenity barrier
## 287651577          <NA>                  <NA>       <NA>  school    <NA>
## 457599690          <NA>        Pedro Aramburu       <NA>  school    <NA>
## 474086493         Y4612 Avenida General Savio       <NA>  school    <NA>
## 474100012      Y4612GRN      Avenida Belgrano Esc. N 207  school    <NA>
## 474372486      Y4613DCD          Los Paraísos       <NA>  school   fence
## 510320204          <NA>    Ruta Provincial 20       <NA>  school    <NA>
##           building description fence_type height isced:level leisure
## 287651577     <NA>        <NA>       <NA>   <NA>        <NA>    <NA>
## 457599690     <NA>        <NA>       <NA>   <NA>        <NA>  garden
## 474086493     <NA>        <NA>       <NA>   <NA>        <NA>    <NA>
## 474100012     <NA>        <NA>       <NA>   <NA>        <NA>    <NA>
## 474372486     <NA>        <NA>       wire      3        <NA>  garden
## 510320204     <NA>        <NA>       <NA>   <NA>        <NA>    <NA>
##                   phone ref:cue roof:material                       geometry
## 287651577          <NA>    <NA>          <NA> POLYGON ((-65.25664 -24.237...
## 457599690 0388 427-1722    <NA>          <NA> POLYGON ((-65.20878 -24.254...
## 474086493 0388 427-0632    <NA>          <NA> POLYGON ((-65.20286 -24.251...
## 474100012 0388 427 0305    <NA>          <NA> POLYGON ((-65.1939 -24.2585...
## 474372486 0388-427-0388    <NA>          <NA> POLYGON ((-65.21749 -24.249...
## 510320204          <NA>    <NA>          <NA> POLYGON ((-65.20958 -24.168...

Mapa de escuelas

ggmap(mapa_palpala)+
  geom_sf(data=polygon_palpala, fill=NA, color="red", lwd=0.75, inherit.aes = FALSE)+
  geom_sf(data = escuelas_polygons, fill="blue", color=NA, inherit.aes = FALSE) +
  labs(title="escuelas",
       subtitle="Palpala, Jujuy, Argentina",
       caption="Fuente: OpenStreetMap")+
  theme_void()

Escuelas dentro del limite departamental

escuelas_palpala <- st_intersection(escuelas_polygons,polygon_palpala)
dim(escuelas_palpala)
## [1] 31 21
ggmap(mapa_palpala)+
  geom_sf(data=polygon_palpala, fill=NA, color="red", lwd=0.75, inherit.aes = FALSE)+
  geom_sf(data = escuelas_polygons, fill="blue", color=NA, inherit.aes = FALSE) +
  labs(title="escuelas",
       subtitle="Palpala, Jujuy, Argentina",
       caption="Fuente: OpenStreetMap")+
  theme_void()

Mapa Interactivo

library(leaflet)
leaflet() %>%
   addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons(data = st_transform(polygon_palpala, 4326),
              color = "red", weight = 3, fill = FALSE) %>%
  addPolygons(data = st_transform(escuelas_palpala, 4326),
              color = "blue", weight = 1, fillOpacity = 0.4, label = ~name)

Mapa de calor

Este mapa muestra donde está la mayor concentración de escuelas

library(leaflet.extras)
escuelas_coords <- st_transform(escuelas_palpala, 4326) %>%
  st_coordinates() %>%
  as.data.frame()
leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addPolygons(data = st_transform(polygon_palpala, 4326),
              color = "red", weight = 3, fill = FALSE) %>%
  addHeatmap(
    data = escuelas_coords,
    lng = ~X, lat = ~Y,
    radius = 20,
    blur = 15,
    max = 0.05
  )

Se observa con claridad que la concentración de establecimiento educativos se localiza en el área central de la ciudad.

Paradas de colectivos

Se procede a cargar las paradas de las distintas líneas de colectivo. Las mismas se obtuvieron de la página Poblaciones, plataforma abierta de datos espaciales de la Argentina.

tp_paradas_linea_1 <- st_read("shp_paradas/separadas/1.geojson")
## Reading layer `1' from data source 
##   `C:\Users\PC\Downloads\tp_final\tp_final\shp_paradas\separadas\1.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 215 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 3570121 ymin: 7317425 xmax: 3582597 ymax: 7325544
## Projected CRS: POSGAR 2007 / Argentina 3
tp_paradas_linea_2 <- st_read("shp_paradas/separadas/2.geojson")
## Reading layer `2' from data source 
##   `C:\Users\PC\Downloads\tp_final\tp_final\shp_paradas\separadas\2.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 266 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 3570472 ymin: 7316113 xmax: 3580909 ymax: 7325461
## Projected CRS: POSGAR 2007 / Argentina 3
tp_paradas_linea_3 <- st_read("shp_paradas/separadas/3.geojson")
## Reading layer `3' from data source 
##   `C:\Users\PC\Downloads\tp_final\tp_final\shp_paradas\separadas\3.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 111 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 3578355 ymin: 7316545 xmax: 3582064 ymax: 7319177
## Projected CRS: POSGAR 2007 / Argentina 3
tp_paradas_linea_4 <- st_read("shp_paradas/separadas/4.geojson")
## Reading layer `4' from data source 
##   `C:\Users\PC\Downloads\tp_final\tp_final\shp_paradas\separadas\4.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 95 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 3577794 ymin: 7316142 xmax: 3581529 ymax: 7318662
## Projected CRS: POSGAR 2007 / Argentina 3
tp_paradas_linea_5 <- st_read("shp_paradas/separadas/6.geojson")
## Reading layer `6' from data source 
##   `C:\Users\PC\Downloads\tp_final\tp_final\shp_paradas\separadas\6.geojson' 
##   using driver `GeoJSON'
## Simple feature collection with 104 features and 14 fields
## Geometry type: POINT
## Dimension:     XY
## Bounding box:  xmin: 3578945 ymin: 7315763 xmax: 3580909 ymax: 7318666
## Projected CRS: POSGAR 2007 / Argentina 3

Mapa de paradas de colectivos y escuelas

leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  addPolygons(data = st_transform(polygon_palpala, 4326),
              color = "red", weight = 2, fill = FALSE,
              group = "Límite Palpalá") %>%
  addPolygons(data = st_transform(escuelas_palpala, 4326),
              color = "blue",label = ~name, weight = 1, fillOpacity = 0.4,
              group = "Escuelas (polígonos)")%>%
  addCircleMarkers(data = st_transform(tp_paradas_linea_1,4326),
                   color = "red")%>%
  addCircleMarkers(data = st_transform(tp_paradas_linea_2,4326),
                   color = "lightblue")%>%
  addCircleMarkers(data = st_transform(tp_paradas_linea_3,4326),
                   color = "orange")%>%
  addCircleMarkers(data = st_transform(tp_paradas_linea_4,4326),
                   color = "green")%>%
  addCircleMarkers(data = st_transform(tp_paradas_linea_5,4326),
                   color = "pink")

Buffer paradas: 300m alrededor de todas las paradas

Para determinar el área de influencia y cobertura de las paradas de colectivo, se establece un buffer de 300m alrededor de cada parada.

paradas_buffer <- st_buffer(st_union(
  st_transform(tp_paradas_linea_1, 4326)
), 300)
paradas_todas <- rbind(
  tp_paradas_linea_1, tp_paradas_linea_2, tp_paradas_linea_3, tp_paradas_linea_4, tp_paradas_linea_5
)
paradas_todas <- st_transform(paradas_todas, 4326)
paradas_buffer <- st_buffer(st_union(paradas_todas), 300)

Intersección: escuelas cubiertas por transporte

escuelas_palpala_m <- st_transform(escuelas_palpala, 4326)
escuelas_cubiertas <- escuelas_palpala_m[st_intersects(escuelas_palpala_m, paradas_buffer, sparse = FALSE), ]
escuelas_no_cubiertas <- escuelas_palpala_m[!st_intersects(escuelas_palpala_m, paradas_buffer, sparse = FALSE), ]
escuelas_totales <- nrow(escuelas_palpala_m)
cubiertas <- nrow(escuelas_cubiertas)
no_cubiertas <- nrow(escuelas_no_cubiertas)
porcentaje_cubiertas <- round(cubiertas / escuelas_totales * 100, 1)
porcentaje_no_cubiertas <- 100 - porcentaje_cubiertas
cat("Escuelas cubiertas:", cubiertas, "de", escuelas_totales,
    "(", porcentaje_cubiertas, "% )\n")
## Escuelas cubiertas: 28 de 31 ( 90.3 % )
cat("Escuelas NO cubiertas:", no_cubiertas,
    "(", porcentaje_no_cubiertas, "% )\n")
## Escuelas NO cubiertas: 3 ( 9.7 % )

Mapa Area de cobertura

leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  addPolygons(data = st_transform(polygon_palpala, 4326),
              color = "red", weight = 2, fill = FALSE) %>%
  addPolygons(data = st_transform(paradas_buffer, 4326),
              fillColor = "lightgreen", color = "green", fillOpacity = 0.3,
              group = "Área de cobertura (300m)") 
escuelas_cubiertas_pts <- st_centroid(escuelas_cubiertas)
escuelas_no_cubiertas_pts <- st_centroid(escuelas_no_cubiertas)
leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  addPolygons(data = st_transform(polygon_palpala, 4326),
              color = "red", weight = 2, fill = FALSE) %>%
  addPolygons(data = st_transform(paradas_buffer, 4326),
              fillColor = "lightgreen", color = "green", fillOpacity = 0.3,
              group = "Área de cobertura (300m)") %>%
  addCircleMarkers(data = st_transform(escuelas_no_cubiertas_pts, 4326),
                   color = "red", radius = 6, label = ~name) %>%
  addCircleMarkers(data = st_transform(escuelas_cubiertas_pts, 4326),
                   color = "dodgerblue", radius = 6, label = ~name) %>% 
  addLegend(position = "bottomright",
            colors = c("dodgerblue", "red"),
            labels = c("cubierta", "No cubierta"),
            title = "Mapa de escuelas")
escuelas_unidas <- bind_rows(
  escuelas_cubiertas_pts %>% st_set_geometry(NULL) %>% mutate(cubierta = "Cubierta"),
  escuelas_no_cubiertas_pts %>% st_set_geometry(NULL) %>% mutate(cubierta = "No cubierta")
)
escuelas_unidas %>%
  count(cubierta) %>%
  ggplot(aes(x = cubierta, y = n, fill = cubierta)) +
  geom_bar(stat = "identity") +
  labs(x = "Cobertura del transporte", y = "Cantidad de escuelas", fill = "Cobertura") +
  scale_fill_manual(values = c("dodgerblue", "red")) +
  theme_minimal()

Podemos mostrar los establecimientos educativos con más paradas de transporte publico

paradas_total <- bind_rows(
  tp_paradas_linea_1,
  tp_paradas_linea_2,
  tp_paradas_linea_3,
  tp_paradas_linea_4,
  tp_paradas_linea_5
)
paradas_total <- st_transform(paradas_total, 4326)
escuelas <- st_transform(escuelas_palpala, 4326)
escuelas_buffer <- st_buffer(escuelas, 300)
escuelas_stats <- escuelas_buffer %>%
  mutate(paradas_cerca = lengths(st_intersects(., paradas_total)))
total_paradas <- nrow(paradas_total)

escuelas_stats <- escuelas_stats %>%
  mutate(porcentaje = (paradas_cerca / total_paradas) * 100)
escuelas_df <- escuelas_stats %>%
  st_drop_geometry()
ggplot(escuelas_df, aes(x = porcentaje, y = reorder(name, porcentaje))) +
  geom_col(fill = "dodgerblue") +
  geom_text(aes(label = paste0(round(porcentaje, 2), "%")), 
            hjust = -0.1, size = 3, color = "black") +
  labs(
    x = "Porcentaje de paradas a 300m",
    y = "Escuela",
    title = "Porcentaje de paradas de transporte publico dentro de 300m por escuela"
  ) +
  theme_minimal() +
  theme(axis.text.y = element_text(size = 7)) +
  xlim(0, max(escuelas_df$porcentaje) + 5)

Conclusión

Como lo muestra los gráficos, la mayoría de las escuelas se encuentran cubiertas por las paradas de colectivos, lo cual nos permite responder la pregunta inicial. En este caso se observan que quedan por fuera tres escuelas de tipo rural. Sin embargo, ahora sería interesante mostrar la población que tiene acceso a la red de transporte público para poder acceder a los equipamientos educativos.

Datos de Población

Datos obtenidos de la página Poblaciones, plataforma abierta de datos espaciales de la Argentina.

radios <- st_read("datos/Indicadores de personas. Radios, 2022 - Palpalá/Indicadores de personas. Radios, 2022 - Palpalá.shp")
## Reading layer `Indicadores de personas. Radios, 2022 - Palpalá' from data source `C:\Users\PC\Downloads\tp_final\tp_final\datos\Indicadores de personas. Radios, 2022 - Palpalá\Indicadores de personas. Radios, 2022 - Palpalá.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 69 features and 70 fields
## Geometry type: POLYGON
## Dimension:     XY
## Bounding box:  xmin: -65.25711 ymin: -24.36501 xmax: -65.02042 ymax: -24.01442
## Geodetic CRS:  WGS 84
class(radios)
## [1] "sf"         "data.frame"
names(radios)
##  [1] "REDCODE"    "P_TOTAL"    "P_A17"      "P_0A3"      "P_4A5"     
##  [6] "P_6A12"     "P_13A17"    "P_18A"      "P_18A29"    "P_30A54"   
## [11] "P_55A69"    "P_70A"      "M_TOTAL"    "M_A17"      "M_0A3"     
## [16] "M_4A5"      "M_6A12"     "M_13A17"    "M_18A"      "M_18A29"   
## [21] "M_30A54"    "M_55A69"    "M_70A"      "V_TOTAL"    "V_A17"     
## [26] "V_0A3"      "V_4A5"      "V_6A12"     "V_13A17"    "V_18A"     
## [31] "V_18A29"    "V_30A54"    "V_55A69"    "V_70A"      "P18A_SIN_I"
## [36] "P18A_PRIMA" "P18A_SECUN" "P18A_SOLOP" "P18A_SOLOS" "P18A_TERCI"
## [41] "P18A_UNIVE" "P0A3_ASIST" "P4A5_ASIST" "P6A12_ASIS" "P1317_ASIS"
## [46] "P1317_SIN_" "P1829_ASIS" "P1829_SIN_" "P1425_ASIS" "P1425_SIN_"
## [51] "P1425"      "P_COBERTUR" "P_COBERT_1" "P_COBERT_2" "P65_JUBILA"
## [56] "P65_PENSIO" "P65_JUBI_1" "P_PENSION_" "P65_TOTAL"  "CODPROV"   
## [61] "PROV"       "CODDPTO"    "DPTO"       "REDCODE_1"  "RADIO"     
## [66] "RADIOS_POB" "RADIOS_HOG" "RADIOS_LAT" "RADIOS_LON" "RADIOS_SUP"
## [71] "geometry"
summary(radios)
##    REDCODE             P_TOTAL           P_A17           P_0A3       
##  Length:69          Min.   :  26.0   Min.   :  3.0   Min.   :  0.00  
##  Class :character   1st Qu.: 743.0   1st Qu.:173.0   1st Qu.: 27.00  
##  Mode  :character   Median : 940.0   Median :250.0   Median : 41.00  
##                     Mean   : 949.6   Mean   :260.5   Mean   : 41.61  
##                     3rd Qu.:1263.0   3rd Qu.:344.0   3rd Qu.: 54.00  
##                     Max.   :1617.0   Max.   :662.0   Max.   :101.00  
##      P_4A5           P_6A12         P_13A17           P_18A       
##  Min.   : 0.00   Min.   :  1.0   Min.   :  2.00   Min.   :  23.0  
##  1st Qu.:17.00   1st Qu.: 71.0   1st Qu.: 50.00   1st Qu.: 559.0  
##  Median :28.00   Median :113.0   Median : 76.00   Median : 702.0  
##  Mean   :27.96   Mean   :110.9   Mean   : 80.06   Mean   : 689.1  
##  3rd Qu.:38.00   3rd Qu.:145.0   3rd Qu.: 99.00   3rd Qu.: 886.0  
##  Max.   :85.00   Max.   :315.0   Max.   :223.00   Max.   :1285.0  
##     P_18A29       P_30A54         P_55A69          P_70A           M_TOTAL   
##  Min.   :  6   Min.   :  6.0   Min.   :  8.0   Min.   :  1.00   Min.   : 12  
##  1st Qu.:128   1st Qu.:252.0   1st Qu.: 68.0   1st Qu.: 21.00   1st Qu.:402  
##  Median :179   Median :328.0   Median :120.0   Median : 56.00   Median :489  
##  Mean   :180   Mean   :325.7   Mean   :115.9   Mean   : 67.46   Mean   :486  
##  3rd Qu.:234   3rd Qu.:450.0   3rd Qu.:148.0   3rd Qu.:106.00   3rd Qu.:659  
##  Max.   :433   Max.   :559.0   Max.   :376.0   Max.   :211.00   Max.   :836  
##      M_A17           M_0A3           M_4A5           M_6A12      
##  Min.   :  1.0   Min.   : 0.00   Min.   : 0.00   Min.   :  1.00  
##  1st Qu.: 86.0   1st Qu.:14.00   1st Qu.: 8.00   1st Qu.: 37.00  
##  Median :124.0   Median :19.00   Median :14.00   Median : 55.00  
##  Mean   :130.2   Mean   :20.65   Mean   :13.38   Mean   : 55.57  
##  3rd Qu.:173.0   3rd Qu.:27.00   3rd Qu.:17.00   3rd Qu.: 72.00  
##  Max.   :334.0   Max.   :58.00   Max.   :37.00   Max.   :152.00  
##     M_13A17          M_18A          M_18A29       M_30A54         M_55A69      
##  Min.   : 0.00   Min.   : 11.0   Min.   :  3   Min.   :  2.0   Min.   :  3.00  
##  1st Qu.:25.00   1st Qu.:299.0   1st Qu.: 64   1st Qu.:131.0   1st Qu.: 35.00  
##  Median :39.00   Median :358.0   Median : 87   Median :170.0   Median : 61.00  
##  Mean   :40.64   Mean   :355.7   Mean   : 89   Mean   :168.4   Mean   : 61.26  
##  3rd Qu.:53.00   3rd Qu.:454.0   3rd Qu.:118   3rd Qu.:223.0   3rd Qu.: 82.00  
##  Max.   :94.00   Max.   :675.0   Max.   :216   Max.   :305.0   Max.   :207.00  
##      M_70A           V_TOTAL          V_A17           V_0A3      
##  Min.   :  0.00   Min.   : 14.0   Min.   :  2.0   Min.   : 0.00  
##  1st Qu.: 11.00   1st Qu.:358.0   1st Qu.: 79.0   1st Qu.:11.00  
##  Median : 30.00   Median :473.0   Median :126.0   Median :21.00  
##  Mean   : 37.04   Mean   :463.6   Mean   :130.3   Mean   :20.96  
##  3rd Qu.: 57.00   3rd Qu.:628.0   3rd Qu.:167.0   3rd Qu.:28.00  
##  Max.   :118.00   Max.   :800.0   Max.   :328.0   Max.   :57.00  
##      V_4A5           V_6A12         V_13A17           V_18A      
##  Min.   : 0.00   Min.   :  0.0   Min.   :  1.00   Min.   : 12.0  
##  1st Qu.: 8.00   1st Qu.: 34.0   1st Qu.: 25.00   1st Qu.:257.0  
##  Median :13.00   Median : 57.0   Median : 36.00   Median :343.0  
##  Mean   :14.58   Mean   : 55.3   Mean   : 39.42   Mean   :333.4  
##  3rd Qu.:21.00   3rd Qu.: 71.0   3rd Qu.: 50.00   3rd Qu.:439.0  
##  Max.   :48.00   Max.   :164.0   Max.   :129.00   Max.   :610.0  
##     V_18A29          V_30A54         V_55A69           V_70A      
##  Min.   :  3.00   Min.   :  4.0   Min.   :  4.00   Min.   : 0.00  
##  1st Qu.: 63.00   1st Qu.:118.0   1st Qu.: 33.00   1st Qu.:10.00  
##  Median : 92.00   Median :162.0   Median : 56.00   Median :28.00  
##  Mean   : 91.01   Mean   :157.3   Mean   : 54.62   Mean   :30.42  
##  3rd Qu.:121.00   3rd Qu.:206.0   3rd Qu.: 76.00   3rd Qu.:41.00  
##  Max.   :217.00   Max.   :302.0   Max.   :169.00   Max.   :93.00  
##    P18A_SIN_I      P18A_PRIMA       P18A_SECUN      P18A_SOLOP   
##  Min.   :  1.0   Min.   :  22.0   Min.   :  8.0   Min.   : 14.0  
##  1st Qu.: 22.0   1st Qu.: 511.0   1st Qu.:334.0   1st Qu.:139.0  
##  Median : 37.0   Median : 621.0   Median :421.0   Median :234.0  
##  Mean   : 41.8   Mean   : 622.8   Mean   :402.8   Mean   :219.9  
##  3rd Qu.: 60.0   3rd Qu.: 793.0   3rd Qu.:501.0   3rd Qu.:304.0  
##  Max.   :101.0   Max.   :1209.0   Max.   :923.0   Max.   :411.0  
##    P18A_SOLOS      P18A_TERCI       P18A_UNIVE      P0A3_ASIST   
##  Min.   :  6.0   Min.   :  1.00   Min.   : 0.00   Min.   : 0.00  
##  1st Qu.:240.0   1st Qu.: 54.00   1st Qu.:21.00   1st Qu.: 7.00  
##  Median :296.0   Median : 76.00   Median :32.00   Median :13.00  
##  Mean   :289.7   Mean   : 76.83   Mean   :36.28   Mean   :13.17  
##  3rd Qu.:367.0   3rd Qu.: 98.00   3rd Qu.:50.00   3rd Qu.:19.00  
##  Max.   :614.0   Max.   :213.00   Max.   :96.00   Max.   :31.00  
##    P4A5_ASIST      P6A12_ASIS      P1317_ASIS       P1317_SIN_    
##  Min.   : 0.00   Min.   :  1.0   Min.   :  2.00   Min.   :  2.00  
##  1st Qu.:17.00   1st Qu.: 68.0   1st Qu.: 46.00   1st Qu.: 50.00  
##  Median :25.00   Median :111.0   Median : 67.00   Median : 72.00  
##  Mean   :26.84   Mean   :107.6   Mean   : 74.67   Mean   : 78.26  
##  3rd Qu.:36.00   3rd Qu.:140.0   3rd Qu.: 95.00   3rd Qu.: 98.00  
##  Max.   :84.00   Max.   :310.0   Max.   :211.00   Max.   :218.00  
##    P1829_ASIS      P1829_SIN_       P1425_ASIS       P1425_SIN_   
##  Min.   : 0.00   Min.   :  2.00   Min.   :  1.00   Min.   :  3.0  
##  1st Qu.:12.00   1st Qu.: 28.00   1st Qu.: 48.00   1st Qu.: 63.0  
##  Median :19.00   Median : 55.00   Median : 72.00   Median : 98.0  
##  Mean   :21.16   Mean   : 55.38   Mean   : 78.03   Mean   :102.6  
##  3rd Qu.:27.00   3rd Qu.: 71.00   3rd Qu.: 96.00   3rd Qu.:125.0  
##  Max.   :75.00   Max.   :146.00   Max.   :242.00   Max.   :296.0  
##      P1425       P_COBERTUR       P_COBERT_1      P_COBERT_2   
##  Min.   :  3   Min.   :  16.0   Min.   : 0.00   Min.   :  9.0  
##  1st Qu.:124   1st Qu.: 406.0   1st Qu.:20.00   1st Qu.:222.0  
##  Median :179   Median : 531.0   Median :31.00   Median :402.0  
##  Mean   :183   Mean   : 518.1   Mean   :33.29   Mean   :398.2  
##  3rd Qu.:236   3rd Qu.: 634.0   3rd Qu.:44.00   3rd Qu.:546.0  
##  Max.   :473   Max.   :1054.0   Max.   :85.00   Max.   :965.0  
##    P65_JUBILA       P65_PENSIO      P65_JUBI_1      P_PENSION_    
##  Min.   :  2.00   Min.   : 0.00   Min.   :  3.0   Min.   :  0.00  
##  1st Qu.: 27.00   1st Qu.: 4.00   1st Qu.: 28.0   1st Qu.: 27.00  
##  Median : 73.00   Median :14.00   Median : 75.0   Median : 48.00  
##  Mean   : 83.65   Mean   :16.86   Mean   : 87.3   Mean   : 46.75  
##  3rd Qu.:125.00   3rd Qu.:27.00   3rd Qu.:131.0   3rd Qu.: 64.00  
##  Max.   :280.00   Max.   :53.00   Max.   :287.0   Max.   :118.00  
##    P65_TOTAL     CODPROV              PROV             CODDPTO         
##  Min.   :  5   Length:69          Length:69          Length:69         
##  1st Qu.: 37   Class :character   Class :character   Class :character  
##  Median : 91   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :104                                                           
##  3rd Qu.:154                                                           
##  Max.   :329                                                           
##      DPTO            REDCODE_1            RADIO             RADIOS_POB    
##  Length:69          Length:69          Length:69          Min.   :  26.0  
##  Class :character   Class :character   Class :character   1st Qu.: 743.0  
##  Mode  :character   Mode  :character   Mode  :character   Median : 940.0  
##                                                           Mean   : 949.6  
##                                                           3rd Qu.:1263.0  
##                                                           Max.   :1617.0  
##    RADIOS_HOG      RADIOS_LAT       RADIOS_LON       RADIOS_SUP     
##  Min.   : 10.0   Min.   :-24.32   Min.   :-65.24   Min.   :  0.077  
##  1st Qu.:239.0   1st Qu.:-24.26   1st Qu.:-65.22   1st Qu.:  0.150  
##  Median :296.0   Median :-24.26   Median :-65.21   Median :  0.207  
##  Mean   :279.5   Mean   :-24.26   Mean   :-65.20   Mean   :  7.068  
##  3rd Qu.:356.0   3rd Qu.:-24.25   3rd Qu.:-65.20   3rd Qu.:  0.428  
##  Max.   :454.0   Max.   :-24.13   Max.   :-65.07   Max.   :178.670  
##           geometry 
##  POLYGON      :69  
##  epsg:4326    : 0  
##  +proj=long...: 0  
##                    
##                    
## 
radios <- st_transform(radios, 4326)
radios_cubiertos <- st_intersection(radios, paradas_buffer)

Población cubierta

poblacion_cubierta <- sum(radios_cubiertos$P_TOTAL, na.rm = TRUE)
poblacion_total <- sum(radios$P_TOTAL, na.rm = TRUE)
poblacion_no_cubierta <- poblacion_total - poblacion_cubierta
porcentaje_cubierto <- poblacion_cubierta / poblacion_total * 100
porcentaje_no_cubierto <- 100 - porcentaje_cubierto
data.frame(
  Total = poblacion_total,
  Cubierta = poblacion_cubierta,
  No_cubierta = poblacion_no_cubierta,
  `% Cubierta` = round(porcentaje_cubierto,1),
  `% No cubierta` = round(porcentaje_no_cubierto,1)
)
##   Total Cubierta No_cubierta X..Cubierta X..No.cubierta
## 1 65522    64209        1313          98              2
library(ggplot2)
library(dplyr)
df_pob <- data.frame(
  Categoria = c("Cubierta", "No cubierta"),
  Poblacion = c(poblacion_cubierta, poblacion_no_cubierta)
)

Grafico

ggplot(df_pob, aes(x = Categoria, y = Poblacion, fill = Categoria)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = Poblacion), vjust = -0.5) +
  labs(title = "Población cubierta vs. no cubierta",
       y = "Población",
       x = "") +
  theme_minimal() +
  scale_fill_manual(values = c("dodgerblue", "red"))

Mapa

radios <- radios %>%
  mutate(cobertura = ifelse(st_intersects(radios, paradas_buffer, sparse = FALSE)[,1],
                            "Cubierta", "No cubierta"))
leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  addPolygons(data = st_transform(radios, 4326),
              fillColor = ~ifelse(cobertura == "Cubierta", "dodgerblue", "red"),
              color = "black", weight = 1, fillOpacity = 0.5,
              label = ~paste0("Población: ", P_TOTAL, "\nCobertura: ", cobertura)) %>%
  addPolygons(data = st_transform(paradas_buffer, 4326),
              fillColor = "lightgreen", color = "green", fillOpacity = 0.2,
              group = "Área de cobertura (300 m)") %>%
  addLegend(position = "bottomright",
            colors = c("dodgerblue", "red"),
            labels = c("Cubierta", "No cubierta"),
            title = "Cobertura de paradas")

Conclusión

Dos conclusiones posibles: 1. A simple vista pareciera que el sistema cubre un gran porcentaje de la ciudad, sin embargo, si se superpone con datos de frecuencia y calidad del transporte público notaríamos que aun con una red abarcativa, no es suficiente para lograr la accesibilidad plena. Lamentablemente no se encuentran datos de frecuencia y calidad del TP para esta ciudad. 2. Al tomar datos de radios censales, no tiene mucha precisión de las áreas que quedan sin cubrir. Como se observa en el mapa, en un mismo radio censal hay áreas en el que el TP no llega. Por conocer la zona, sé que existen asentamientos informales, que no son captados por los radios. A continuación, se superpondrá la capa de barrios populares para verificar esta situación.

Renabap

Datos obtenidos de la página Poblaciones, plataforma abierta de datos espaciales de la Argentina.

renabap <- st_read("datos/renabap/Registro Nacional de Barrios Populares 2023 - Palpalá/Registro Nacional de Barrios Populares 2023 - Palpalá.shp")
## Reading layer `Registro Nacional de Barrios Populares 2023 - Palpalá' from data source `C:\Users\PC\Downloads\tp_final\tp_final\datos\renabap\Registro Nacional de Barrios Populares 2023 - Palpalá\Registro Nacional de Barrios Populares 2023 - Palpalá.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 11 features and 21 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -65.23412 ymin: -24.2832 xmax: -65.16785 ymax: -24.25472
## Geodetic CRS:  WGS 84
names(renabap)
##  [1] "ID_RENABAP" "NOMBRE_BAR" "FAMILIAS"   "ANIO_CREAC" "DECADA_CRE"
##  [6] "CLASIFICAC" "TITULO_PRO" "ELECTRICID" "CLOACAS"    "AGUA"      
## [11] "COCINA"     "WKT"        "CODPROV"    "PROV"       "CODDPTO"   
## [16] "DPTO"       "REDCODE"    "RADIO"      "SUPERFICIE" "LATITUD_CE"
## [21] "LONGITUD_C" "geometry"
renabap <- st_transform(renabap,4326)
leaflet() %>%
  addProviderTiles(providers$Esri.WorldImagery) %>%
  addPolygons(data = st_transform(radios, 4326),
              fillColor = ~ifelse(cobertura == "Cubierta", "dodgerblue", "red"),
              color = "black", weight = 1, fillOpacity = 0.5,
              label = ~paste0("Población: ", P_TOTAL, "\nCobertura: ", cobertura)) %>%
  addPolygons(data = st_transform(paradas_buffer, 4326),
              fillColor = "lightgreen", color = "green", fillOpacity = 0.2,
              group = "Área de cobertura (300 m)") %>%
  addPolygons(data = renabap,
              fillColor = "orange", color = "orange", weight = 2,
              fillOpacity = 0.3,
              label = ~NOMBRE_BAR, 
              group = "Barrios populares") %>%
  addLegend(position = "bottomright",
            colors = c("dodgerblue", "red", "orange"),
            labels = c("Cubierta", "No cubierta", "Barrio popular"),
            title = "Mapa de cobertura y barrios")

Conclusión

Este grafico confirma una realidad conocida, pero difícil de dimensionar con datos. A simple vista tres barrios populares quedan por fuera del área de influencia del sistema de transporte urbano: Los Alisos, Los Alisos III y más de la mitad del barrio 18 de noviembre, lo que se traduce en alrededor de 250 familias. El sistema acrecenta las desigualdades. Moverse y principalmente acceder, en este caso, a la educación es un privilegio.

Caminando del Hogar a una parada de colectivo

Como ultima instancia se analizará a que distancia se encuentran las paradas de colectivo más cercanas al barrio Los Alisos (uno de los barrios que no está cubierto por la red), para ello solo se tomara la línea 5 ya que es la única que llega hasta zonas próximas al asentamiento.

class(renabap)
## [1] "sf"         "data.frame"
st_crs(renabap)
## 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)"],
##         MEMBER["World Geodetic System 1984 (G2296)"],
##         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]]

Filtro del barrio Los Alisos

barrio_los_alisos <- renabap %>%
  filter(NOMBRE_BAR == "Los Alisos")
centroide <- st_centroid(barrio_los_alisos)
coords <- st_coordinates(centroide)[1,]  
leaflet() %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addMarkers(lng = coords[1], lat = coords[2], 
             popup = "Los Alisos")

Isocrona

isocrona <- osrmIsochrone(
  loc = c(coords[1], coords[2]),
  breaks = seq(0, 20, 5),
  res = 35,
  osrm.profile = "foot"
)
ggplot() +
  geom_sf(data = isocrona, aes(fill = isomax), color = NA) +
  scale_fill_viridis_c(direction = -1) +
  labs(fill = "Minutos") +
  theme_test()

leaflet(isocrona) %>%
  addProviderTiles(providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~colorBin("YlOrRd", domain = isocrona$isomax)(isomax),
  color = NA,
  fillOpacity = 0.5)%>%
  addMarkers(lng = coords[1], lat = coords[2], 
             popup = "Los Alisos")%>%
  addMiniMap(tiles=providers$CartoDB.Positron)

Paradas centroides

centroides_paradas <- st_point_on_surface(tp_paradas_linea_5)
centroides_paradas <- st_transform(centroides_paradas, st_crs(polygon_palpala))
centroides_paradas_in_polygon <- st_intersection(centroides_paradas, polygon_palpala)
extraer_coordenadas_paradas <- function(geo) {
  coordenadas <- unlist(strsplit(gsub("POINT |\\(|\\)", "", geo), " "))
  return(data.frame(lon = as.numeric(coordenadas[1]), lat = as.numeric(coordenadas[2])))
}
coordenadas_paradas <- do.call(rbind, lapply(centroides_paradas_in_polygon$geometry, extraer_coordenadas_paradas))
leaflet(coordenadas_paradas) %>%
  addProviderTiles(providers$CartoDB.Positron) %>% 
  addCircles(~lon, ~lat,
             color = "hotpink")
coordenadas_paradas <- coordenadas_paradas %>%
  reverse_geocode(lat = lat, long = lon, method = "osm")
leaflet(isocrona) %>%
  addProviderTiles(providers$CartoDB.Positron) %>% 
  addPolygons(fillColor = ~colorBin("YlOrRd", domain = isocrona$isomax)(isomax),
  color = NA,
  fillOpacity = 0.5) %>% 
  addMarkers(lng = coords[1], lat = coords[2], 
             popup = "Los Alisos" ) %>% 
  addCircles(data = coordenadas_paradas,
              color = "hotpink")

Union de Isocrona con paradas de colectivo

paradas_sf <- st_as_sf(coordenadas_paradas,
                        coords = c("lon", "lat"), 
                        crs = 4326)
isocrona_sf <- st_transform(isocrona, 4326)
isocrona_sf_limpio <- sf::st_make_valid(isocrona_sf)

if (all(sf::st_is_valid(isocrona_sf_limpio))) {
  print("Las geometrías han sido reparadas correctamente.")
}
## [1] "Las geometrías han sido reparadas correctamente."
paradas_join <- sf::st_join(paradas_sf, isocrona_sf_limpio, join = st_intersects)
paradas_resumen <- paradas_join %>%
  st_drop_geometry() %>%
  group_by(isomax) %>%
  summarise(n = n())

Grafico

ggplot(paradas_resumen, aes(x = factor(isomax), y = n, fill = factor(isomax))) +
  geom_col() +
  scale_fill_brewer(palette = "Reds") +
  labs(x = "Distancia maxima (min)", y = "Cantidad de paradas",
       title = "Paradas dentro de cada isocrona") +
  theme_minimal()

Conclusión

El grafico nos muestra que 10 paradas de una sola linea se encuentran a 20 minutos a pie. El problema no es solo que las paradas estén lejos, sino que esa distancia se suma a otras deficiencias del sistema de transporte, como: Falta de frecuencia y Mala calidad: El estado de las unidades, la seguridad y la puntualidad afectan la experiencia del usuario. Estos problemas impactan desproporcionadamente a los residentes con menos recursos, quienes dependen más del transporte público. La dificultad para acceder al trabajo, la educación y los servicios de salud se agrava, profundizando la desigualdad socioeconómica. En resumen, la lejanía de las paradas es un problema de accesibilidad, pero se convierte en un agravante de la desigualdad cuando se combina con la ineficiencia del servicio.