Estaciones de metro en Madrid capital

Madrid
Transporte
Metro
Autor/a
Afiliación

Olivia García de Paredes de la Vega

Universitat de València

Fecha de publicación

1 de abril de 2026

Input

En este trabajo utilizaremos datos sacados de la plataforma colaborativa OpenStreetMap, la cual proporciona datos geoespaciales abiertos y actualizados de forma continua por una comunidad global, centrandonos en las estaciones de metro de Madrid. Estas estaciones se encuentran representadas en la OSM ante las siguientes etiquetas railway=station y station=subway. Esta aproximacion garantiza que los datos utilizados esten actualizados y sean reproducibles desde cualquier equipo, cumpliendo asi con los requisitos del proyecto DataEnhance UV. Pese a ello, al tratarse de una base de datos colaborativa, podemos encontrar algunos problemas en cuanto a la calidad del dato (duplicados, cambios en los nombres o atributos incompletos). Teniendo en cuenta esto, resulta esencial realizar un proceso de limpieza para mejorar el conjunto de datos.

Descripción

Empezamos cargando todas las librerias necesarias para este trabajo, donde realizaremos consultas a traves de OpenStreetMaps y generaremos mapas.

En este apartado consultaremos todas las etiquetas disponibles en la categoria railway en OMS. Aqui identificaremos los valores existentes y confirmaremos cual es el adecuado para obtner los puntos correspondientes a las entradas de metro. Se verifica que la etiqueta correcta es subway_entrance.

osm_railway <- osmdata::available_tags("railway")
head(osm_railway, 20)
# A tibble: 20 × 2
   Key     Value           
   <chr>   <chr>           
 1 railway abandoned       
 2 railway buffer_stop     
 3 railway construction    
 4 railway crossing        
 5 railway derail          
 6 railway disused         
 7 railway funicular       
 8 railway halt            
 9 railway level_crossing  
10 railway light_rail      
11 railway miniature       
12 railway monorail        
13 railway narrow_gauge    
14 railway platform        
15 railway preserved       
16 railway proposed        
17 railway rail            
18 railway railway_crossing
19 railway roundhouse      
20 railway signal          
osm_railway %>% filter(Value == "subway_entrance")
# A tibble: 1 × 2
  Key     Value          
  <chr>   <chr>          
1 railway subway_entrance

Continuamos extrayendo a partir de la cartogrofia oficial del municipio de Madrid, y su correspondiente bounding box con forma rectangular, donde se define el area exacta en la cual realizaremos la consulta, evitando de esta manera descargar datos innecesarios fuera del municipio.

madrid_city <- mapSpain::esp_get_munic() %>%
  filter(name == "Madrid")
! The file to be downloaded has size 74.6 Mb.
bbox_madrid_city <- st_bbox(madrid_city)

Utilizando el bounding box de Madrid previamente construido y la etiqueta subway_entrance realizaeremos finalmente la consulta. El resultado es un conjunto de puntos ubicados en las entradas de las bocas de metro registradas en la OSM dentro de la capital.

q_metro_madrid_city <- bbox_madrid_city %>%
  opq(timeout = 1000) %>%
  add_osm_feature(key = "railway", value = "subway_entrance")

metro_madrid_city <- osmdata_sf(q_metro_madrid_city)
metro_madrid_city_pts <- metro_madrid_city$osm_points

ggplot() +
  ggspatial::annotation_map_tile(type = "cartolight", zoom = 12) +
  geom_sf(data = metro_madrid_city_pts, 
          color = "#33a02c", size = 2, alpha = 0.6) +
  theme_void()
Zoom: 12
Fetching 30 missing tiles

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |==                                                                    |   3%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |=======                                                               |  10%
  |                                                                            
  |=========                                                             |  13%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |==============                                                        |  20%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |===================                                                   |  27%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |============================                                          |  40%
  |                                                                            
  |==============================                                        |  43%
  |                                                                            
  |=================================                                     |  47%
  |                                                                            
  |===================================                                   |  50%
  |                                                                            
  |=====================================                                 |  53%
  |                                                                            
  |========================================                              |  57%
  |                                                                            
  |==========================================                            |  60%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |===================================================                   |  73%
  |                                                                            
  |======================================================                |  77%
  |                                                                            
  |========================================================              |  80%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |=============================================================         |  87%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |====================================================================  |  97%
  |                                                                            
  |======================================================================| 100%
...complete!

Tratamiento

Empezamos tratando la base de datos agrupando puntos proximos entre si, para asi detectar accesos redundantes del metro. EL parametro eps define la distancia maxima que pueden haber entre dos puntos para considerarlos en la misma estacion. Cada observacion tiene un identificador de cluster para consolidar las entradas repetidas.

coords_metro <- st_coordinates(metro_madrid_city_pts)
set.seed(562)
clusters_metro <- dbscan(coords_metro, eps = 0.0015, minPts = 2)
metro_madrid_city_pts$cluster <- as.factor(clusters_metro$cluster)

En este paso consiladamos los clusters creados en unico punto, se empieza calculando el centroide del conjunto, eliminado los accesos redundantes y manteniendo una sola observacion por grupo espacial. Hemos convertido el objeto resultante en un sf para que se mantenga la estructura espacial.

metro_clustered <- metro_madrid_city_pts %>%
  group_by(cluster) %>%
  summarise(geometry = st_centroid(st_union(geometry))) %>%
  ungroup()
metro_clean <- st_as_sf(metro_clustered)
st_write(metro_clean, "data/metro_clean.gpkg", delete_dsn = TRUE)
Deleting source `data/metro_clean.gpkg' failed
Writing layer `metro_clean' to data source `data/metro_clean.gpkg' using driver `GPKG'
Writing 195 features with 1 fields and geometry type Point.

Output

Se ha obtenido el siguiente resultado tras el proceso de limpieza. Donde encontramos un grafico mucho mas limpio comparado al inicial, es decir, se han quitado con eficacia las estaciones duplicadas, mejorando de esta manera el dataset.

ggplot() +
  ggspatial::annotation_map_tile(type = "cartolight", zoom = 13) +
  geom_sf(data = metro_clean,
          color = "#1E88E5", size = 2, alpha = 0.8) +
  theme_void()
Zoom: 13
Fetching 81 missing tiles

  |                                                                            
  |                                                                      |   0%
  |                                                                            
  |=                                                                     |   1%
  |                                                                            
  |==                                                                    |   2%
  |                                                                            
  |===                                                                   |   4%
  |                                                                            
  |===                                                                   |   5%
  |                                                                            
  |====                                                                  |   6%
  |                                                                            
  |=====                                                                 |   7%
  |                                                                            
  |======                                                                |   9%
  |                                                                            
  |=======                                                               |  10%
  |                                                                            
  |========                                                              |  11%
  |                                                                            
  |=========                                                             |  12%
  |                                                                            
  |==========                                                            |  14%
  |                                                                            
  |==========                                                            |  15%
  |                                                                            
  |===========                                                           |  16%
  |                                                                            
  |============                                                          |  17%
  |                                                                            
  |=============                                                         |  19%
  |                                                                            
  |==============                                                        |  20%
  |                                                                            
  |===============                                                       |  21%
  |                                                                            
  |================                                                      |  22%
  |                                                                            
  |================                                                      |  23%
  |                                                                            
  |=================                                                     |  25%
  |                                                                            
  |==================                                                    |  26%
  |                                                                            
  |===================                                                   |  27%
  |                                                                            
  |====================                                                  |  28%
  |                                                                            
  |=====================                                                 |  30%
  |                                                                            
  |======================                                                |  31%
  |                                                                            
  |======================                                                |  32%
  |                                                                            
  |=======================                                               |  33%
  |                                                                            
  |========================                                              |  35%
  |                                                                            
  |=========================                                             |  36%
  |                                                                            
  |==========================                                            |  37%
  |                                                                            
  |===========================                                           |  38%
  |                                                                            
  |============================                                          |  40%
  |                                                                            
  |=============================                                         |  41%
  |                                                                            
  |=============================                                         |  42%
  |                                                                            
  |==============================                                        |  43%
  |                                                                            
  |===============================                                       |  44%
  |                                                                            
  |================================                                      |  46%
  |                                                                            
  |=================================                                     |  47%
  |                                                                            
  |==================================                                    |  48%
  |                                                                            
  |===================================                                   |  49%
  |                                                                            
  |===================================                                   |  51%
  |                                                                            
  |====================================                                  |  52%
  |                                                                            
  |=====================================                                 |  53%
  |                                                                            
  |======================================                                |  54%
  |                                                                            
  |=======================================                               |  56%
  |                                                                            
  |========================================                              |  57%
  |                                                                            
  |=========================================                             |  58%
  |                                                                            
  |=========================================                             |  59%
  |                                                                            
  |==========================================                            |  60%
  |                                                                            
  |===========================================                           |  62%
  |                                                                            
  |============================================                          |  63%
  |                                                                            
  |=============================================                         |  64%
  |                                                                            
  |==============================================                        |  65%
  |                                                                            
  |===============================================                       |  67%
  |                                                                            
  |================================================                      |  68%
  |                                                                            
  |================================================                      |  69%
  |                                                                            
  |=================================================                     |  70%
  |                                                                            
  |==================================================                    |  72%
  |                                                                            
  |===================================================                   |  73%
  |                                                                            
  |====================================================                  |  74%
  |                                                                            
  |=====================================================                 |  75%
  |                                                                            
  |======================================================                |  77%
  |                                                                            
  |======================================================                |  78%
  |                                                                            
  |=======================================================               |  79%
  |                                                                            
  |========================================================              |  80%
  |                                                                            
  |=========================================================             |  81%
  |                                                                            
  |==========================================================            |  83%
  |                                                                            
  |===========================================================           |  84%
  |                                                                            
  |============================================================          |  85%
  |                                                                            
  |============================================================          |  86%
  |                                                                            
  |=============================================================         |  88%
  |                                                                            
  |==============================================================        |  89%
  |                                                                            
  |===============================================================       |  90%
  |                                                                            
  |================================================================      |  91%
  |                                                                            
  |=================================================================     |  93%
  |                                                                            
  |==================================================================    |  94%
  |                                                                            
  |===================================================================   |  95%
  |                                                                            
  |===================================================================   |  96%
  |                                                                            
  |====================================================================  |  98%
  |                                                                            
  |===================================================================== |  99%
  |                                                                            
  |======================================================================| 100%
...complete!

El/los fichero(s) generados con este procedimiento/técnica/metodología se puede(n) descargar de aquí.



Proyecto de Innovación Educativa Emergente (PIEE-3898312)