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
)
library(sf)
library(tidyverse)
library(ggmap)
library(osmdata)
library(osrm)
library(units)
library(leaflet)
library(tidygeocoder)
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)
ggmap(mapa_palpala)
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()
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...
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_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()
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)
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.
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
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")
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)
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 % )
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()
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)
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 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)
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)
)
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"))
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")
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.
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")
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.
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]]
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 <- 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)
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")
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())
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()
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.