Datos de equipamientos futbolísticos municipales de València geocodificados y validados espacialmente

fútbol
Valencia
geocoding
Autor/a
Afiliación

Hugo Carrasco Romaguera

Universidad de Valencia

Fecha de publicación

1 de abril de 2026

Input

Se ha obtenido un conjunto de datos a partir del portal de datos abiertos del Ayuntamiento de València, concretamente del dataset de equipamientos municipales. Esta fuente reúne información sobre distintos equipamientos y servicios existentes en la ciudad, incluyendo su nombre, equipamiento y localización geográfica.

Para esta práctica, dicho dataset se ha utilizado como punto de partida para identificar equipamientos deportivos relacionados con el fútbol y analizar posteriormente su localización mediante técnicas de geocodificación. La fuente original presenta información espacial de referencia, lo que permite además comparar las coordenadas geocodificadas con las coordenadas originales del portal.

En una primera fase, se descargó e importó el dataset completo en R para inspeccionar su estructura y seleccionar las variables relevantes para el análisis.

El dataset corresponde al ámbito municipal de la ciudad de València.

library(readr)
library(dplyr)
library(tidyr)
library(tidygeocoder)
library(sf)
library(leaflet)


url_csv <- "https://geoportal.valencia.es/apps/OpenData/SociedadBienestar/v_infociudad.csv"
equip <- read_delim(url_csv, delim = ",", show_col_types = FALSE)

Descripción

El dataset original de equipamientos municipales presenta varias limitaciones para su uso en el análisis específico de infraestructuras futbolísticas.

En primer lugar, no existe una variable que identifique de forma explícita los equipamientos relacionados con el fútbol, lo que obliga a realizar un filtrado adicional basado en el contenido textual del nombre del equipamiento. Este proceso introduce cierto grado de incertidumbre, ya que depende de la consistencia del etiquetado.

En segundo lugar, el dataset no incluye coordenadas geográficas en formato latitud/longitud, sino coordenadas proyectadas (x, y), correspondientes a un sistema de referencia espacial (probablemente UTM). Esto implica que, para poder trabajar con localizaciones en un contexto más habitual (por ejemplo, visualización en mapas web o geocodificación), es necesario realizar una transformación previa de dichas coordenadas a un sistema geográfico estándar como WGS84.

Esta decisión se basa en una inferencia razonada y en la comprobación de que, tras la transformación a WGS84, las localizaciones se sitúan correctamente en València.

Por otro lado, el conjunto de datos tampoco dispone de direcciones estructuradas completas, lo que limita la identificación directa de los equipamientos en términos de ubicación postal. Esta limitación resulta relevante, ya que en muchos contextos reales la localización de un elemento debe obtenerse a partir de información textual. Por ello, se plantea la necesidad de simular un escenario de geocodificación, en el que la posición se aproxima a partir del nombre del equipamiento y su localización general.

Por último, se observa que la calidad del proceso de geocodificación puede variar en función del proveedor utilizado, especialmente cuando la entrada no corresponde a una dirección postal completa. Este aspecto justifica la comparación de distintos métodos de geocodificación y la evaluación de su precisión utilizando las coordenadas originales del dataset como referencia.

En conjunto, estas limitaciones hacen necesario un proceso de selección, transformación y validación de los datos que permita obtener un dataset más adecuado para el análisis espacial de equipamientos futbolísticos.

Es importante señalar que el conjunto de datos utilizado no representa un inventario completo de todos los campos de fútbol existentes en el territorio, sino únicamente aquellos equipamientos registrados en el ámbito municipal. Además, la identificación de instalaciones futbolísticas se basa en un filtrado textual del nombre, lo que puede implicar la exclusión de algunos equipamientos relevantes o la inclusión de otros que no respondan exactamente a esta categoría.

# Filtrar instalaciones deportivas
df_futbol <- equip %>%
  filter(grepl("futbol|fútbol", equipamien, ignore.case = TRUE))

# Seleccionar variables clave
df_futbol <- df_futbol %>%
  select(equipamien, idclase, x, y, codvia, numportal)

# Convertir coordenadas UTM a lat/lon reales

df_futbol_sf <- st_as_sf(df_futbol, coords = c("x", "y"), crs = 25830)

df_futbol_ll <- st_transform(df_futbol_sf, crs = 4326)

# Extraer latitud y longitud
coords <- st_coordinates(df_futbol_ll)

df_futbol <- df_futbol_ll %>%
  mutate(
    lon_real = coords[,1],
    lat_real = coords[,2]
  ) %>%
  st_drop_geometry()

# Crear la “dirección”
df_futbol <- df_futbol %>%
  mutate(
    direccion = paste(equipamien, "Valencia, Spain")
  )

Tratamiento

El proceso de mejora del dataset se ha llevado a cabo en varias fases. En primer lugar, se ha construido un campo de dirección a partir del nombre del equipamiento y la referencia geográfica a la ciudad de València. Este paso permite simular un escenario en el que la localización de los elementos debe obtenerse a partir de información textual no estructurada.

A continuación, se ha aplicado un proceso de geocodificación utilizando el paquete tidygeocoder, empleando dos proveedores distintos: OpenStreetMap (OSM) y ArcGIS. Esta doble aproximación permite comparar el comportamiento de ambos servicios en términos de cobertura y precisión.

Posteriormente, las coordenadas obtenidas mediante geocodificación se han comparado con las coordenadas originales del dataset municipal, consideradas como referencia. Para ello, se han transformado las localizaciones a un sistema de referencia proyectado (UTM) con el fin de calcular la distancia en metros entre la posición real y la estimada para cada equipamiento.

Finalmente, se ha construido un dataset enriquecido que incorpora, para cada instalación, las coordenadas originales, las coordenadas geocodificadas por ambos métodos y el error espacial asociado.

# Geocoding con OSM
df_geo <- df_futbol %>%
  geocode(address = direccion,
          method = "osm",
          lat = lat_geo,
          long = lon_geo)
Passing 11 addresses to the Nominatim single address geocoder
Query completed in: 11.2 seconds
# Geocoding con ArcGIS
df_geo_arc <- df_futbol %>%
  geocode(address = direccion,
          method = "arcgis",
          lat = lat_arc,
          long = lon_arc)
Passing 11 addresses to the ArcGIS single address geocoder
Query completed in: 4.7 seconds
# Unir resultados
df_comp <- df_geo %>%
  left_join(
    df_geo_arc %>% select(equipamien, lat_arc, lon_arc),
    by = "equipamien"
  )

# Contar NA's
colSums(is.na(df_comp[, c("lat_geo", "lon_geo", "lat_arc", "lon_arc")]))
lat_geo lon_geo lat_arc lon_arc 
      8       8       0       0 
# Calcular error OSM
osm_ok <- df_comp %>%
  filter(!is.na(lat_geo), !is.na(lon_geo))

real_osm <- st_as_sf(osm_ok, coords = c("lon_real", "lat_real"), crs = 4326)
geo_osm  <- st_as_sf(osm_ok, coords = c("lon_geo", "lat_geo"), crs = 4326)

real_osm <- st_transform(real_osm, 25830)
geo_osm  <- st_transform(geo_osm, 25830)

osm_ok$error_osm_m <- as.numeric(
  st_distance(real_osm, geo_osm, by_element = TRUE)
)
# Calcular error ArcGIS
arc_ok <- df_comp %>%
  filter(!is.na(lat_arc), !is.na(lon_arc))

real_arc <- st_as_sf(arc_ok, coords = c("lon_real", "lat_real"), crs = 4326)
geo_arc  <- st_as_sf(arc_ok, coords = c("lon_arc", "lat_arc"), crs = 4326)

real_arc <- st_transform(real_arc, 25830)
geo_arc  <- st_transform(geo_arc, 25830)

arc_ok$error_arc_m <- as.numeric(
  st_distance(real_arc, geo_arc, by_element = TRUE)
)
# Unir errores
df_final <- df_comp %>%
  left_join(
    osm_ok %>% st_drop_geometry() %>% select(equipamien, error_osm_m),
    by = "equipamien"
  ) %>%
  left_join(
    arc_ok %>% st_drop_geometry() %>% select(equipamien, error_arc_m),
    by = "equipamien"
  )

Output

Como resultado del proceso realizado, se ha obtenido un dataset mejorado de equipamientos futbolísticos municipales de València que incorpora tanto las coordenadas originales como las coordenadas generadas mediante geocodificación con OpenStreetMap y ArcGIS, junto con el error espacial asociado a cada método.

El análisis de los errores espaciales muestra diferencias claras entre ambos proveedores. En el caso de OpenStreetMap, se observa una menor cobertura, con varios equipamientos no resueltos. Sin embargo, en los casos geocodificados, los errores se mantienen en un rango relativamente estable, con valores comprendidos aproximadamente entre 80 y 250 metros y una mediana cercana a los 230 metros. Esto indica un comportamiento consistente, aunque limitado en términos de resolución.

Por el contrario, el servicio ArcGIS logra geocodificar la totalidad de los registros, lo que refleja una mayor capacidad de cobertura. No obstante, los resultados presentan una elevada variabilidad, con una mediana de error en torno a los 540 metros y la presencia de errores extremos que superan los 70 kilómetros. Estos valores indican que, en algunos casos, la localización obtenida no corresponde al equipamiento real, sino a una interpretación incorrecta del texto de entrada.

En conjunto, los resultados evidencian un compromiso entre cobertura y precisión: OpenStreetMap ofrece resultados más estables pero incompletos, mientras que ArcGIS proporciona cobertura total a costa de introducir errores espaciales significativos en determinados casos.

Finalmente, el dataset generado permite no solo disponer de un conjunto de datos mejorado, sino también evaluar de forma crítica el comportamiento de distintos servicios de geocodificación en contextos donde la información de entrada no corresponde a direcciones postales completas.

summary(df_final$error_osm_m)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
   1.490    6.104   10.718  360.994  540.745 1070.773        8 
summary(df_final$error_arc_m)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
   36.58   353.88  6429.89 12641.89 11331.11 74167.59 
osm_map <- df_final %>%
  filter(!is.na(lon_geo), !is.na(lat_geo))

leaflet() %>%
  addProviderTiles("Esri.WorldImagery") %>%
  
  # Coordenadas reales
  addCircleMarkers(
    data = df_final,
    lng = ~lon_real, lat = ~lat_real,
    color = "green",
    radius = 5,
    label = ~equipamien
  ) %>%
  
  # OSM (solo los que resuelve)
  addCircleMarkers(
    data = osm_map,
    lng = ~lon_geo, lat = ~lat_geo,
    color = "blue",
    radius = 4,
    label = ~equipamien
  ) %>%
  
  # ArcGIS
  addCircleMarkers(
    data = df_final,
    lng = ~lon_arc, lat = ~lat_arc,
    color = "red",
    radius = 4,
    label = ~equipamien
  )

En el mapa, las coordenadas originales se representan en color verde, las obtenidas mediante OpenStreetMap en azul y las obtenidas mediante ArcGIS en rojo. Para complementar el análisis numérico, se ha elaborado un mapa interactivo en el que se representan las coordenadas originales del dataset junto con las obtenidas mediante los dos métodos de geocodificación utilizados. Esta visualización permite observar simultáneamente la cobertura de cada proveedor y la proximidad de las localizaciones estimadas respecto a la posición real.
Este caso pone de manifiesto que una mayor cobertura en geocodificación no implica necesariamente una mayor precisión espacial, siendo necesario validar los resultados antes de su uso en análisis geográficos.

write.csv(df_final, "futbol_geocoding_valencia.csv", row.names = FALSE)

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)