Datos de ambulancias en Valencia

Valencia
Ambulancias
GPKG
Autor/a
Afiliación

Carla Ferrándiz Montesinos

Universidad de Valencia

Fecha de publicación

29 de marzo de 2025

Input

Obtenemos el conjunto de datos sobre las estaciones de ambulancia en la provincia de Valencia a través de OpenStreetMap (OSM), proyecto colaborativo que proporciona un mapa libre y editable.

Es importante tener en cuenta que, debido a la naturaleza colaborativa de OSM, la precisión de los datos puede variar. Por ello, se recomienda contrastar la información obtenida de OSM con fuentes oficiales para garantizar su fiabilidad. En este caso, aunque ya lo veremos más adelante, los datos sobre ambulancias en la provincia de Valencia son escasos.

Descripción

valencia <- osmdata::getbb("Valencia") #dimensiones de Valencia

ambulancias <- valencia %>%
  opq() %>%
  add_osm_feature(key = "emergency", value = "ambulance_station") %>%
  osmdata_sf()
print(ambulancias$osm_points) # Puntos
Simple feature collection with 17 features and 4 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -0.4108939 ymin: 39.35338 xmax: -0.3240723 ymax: 39.48115
Geodetic CRS:  WGS 84
First 10 features:
                 osm_id  name         emergency entrance
4098321734   4098321734  <NA> ambulance_station     <NA>
5302159276   5302159276 SAMUR ambulance_station     <NA>
7551384864   7551384864  <NA>              <NA>     <NA>
7551384865   7551384865  <NA>              <NA>     <NA>
7551384867   7551384867  <NA>              <NA>     <NA>
7551384868   7551384868  <NA>              <NA>     <NA>
7551384869   7551384869  <NA>              <NA>     <NA>
7551384870   7551384870  <NA>              <NA>     <NA>
11766630406 11766630406  <NA>              <NA>     <NA>
11766630407 11766630407  <NA>              <NA>     <NA>
                               geometry
4098321734  POINT (-0.3240723 39.37971)
5302159276  POINT (-0.4108939 39.35338)
7551384864  POINT (-0.3805211 39.48102)
7551384865  POINT (-0.3806073 39.48101)
7551384867  POINT (-0.3803297 39.48104)
7551384868  POINT (-0.3803424 39.48115)
7551384869  POINT (-0.3806205 39.48114)
7551384870  POINT (-0.3806459 39.48113)
11766630406 POINT (-0.3806257 39.48112)
11766630407 POINT (-0.3806144 39.48109)
ambulancias_sf <- st_as_sf(ambulancias$osm_points)

class(ambulancias_sf)
[1] "sf"         "data.frame"
dim(ambulancias_sf)
[1] 17  5
#Mostrar el mapa con leaflet
ambulancias_sf <- sf::st_transform(ambulancias_sf, crs=4326)
ambulancias_sf %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles()
dim(ambulancias_sf)
[1] 17  5

A primera vista, el mapa muestra solo tres ubicaciones de estaciones de ambulancias en la provincia de Valencia. Sin embargo, al ampliar la vista en la ciudad de Valencia, se revela que estos tres puntos representan, en realidad, quince estaciones distintas agrupadas en la misma área geográfica.

Tratamiento

Para depurar y optimizar la representación de las ubicaciones de ambulancias en Valencia, se implementó el algoritmo DBSCAN, diseñado para identificar y consolidar puntos geográficos redundantes o excesivamente cercanos. Este proceso mejora la claridad y exactitud de la visualización de los datos. Inicialmente, se extraen las coordenadas precisas de cada ambulancia mediante la función ‘st_coordinates()’. Posteriormente, se aplica el algoritmo ‘dbscan()’, configurado con un radio de proximidad (eps=0.001), (aprox 110 metros), y un umbral mínimo de puntos por agrupación. Estos parámetros permitieron agrupar las ubicaciones de ambulancias que se encontraban dentro de esta distancia, considerándolas como un único punto.

A continuación, se asigna a cada ubicación de ambulancia su correspondiente cluster o grupo. Para simplificar la representación, se combinan las geometrías de las ubicaciones dentro de cada cluster y se calcula su centroide utilizando la función st_centroid(st_combine(geometry)).

if (!requireNamespace("dbscan", quietly = TRUE)) {
  install.packages("dbscan")  
}
library(dbscan)  

Adjuntando el paquete: 'dbscan'
The following object is masked from 'package:stats':

    as.dendrogram
coords <- sf::st_coordinates(ambulancias_sf)
r <- dbscan(coords, eps = 0.001, minPts = 1) 
ambulancias_sf$cluster <- data.frame(r$cluster)

ambulancias_2 <- ambulancias_sf %>%
  group_by(cluster) %>%
  summarise(geometry = st_centroid(st_combine(geometry)))

Output

#Comprobamos
class(ambulancias_2)
[1] "sf"         "tbl_df"     "tbl"        "data.frame"
dim(ambulancias_2)
[1] 3 2
#Comparamos con los datos anteriores
dim(ambulancias_sf)
[1] 17  6
ambulancias_2 %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles()

Pasamos de 17 puntos en el mapa (supuestas 17 estaciones de ambulancias) a únicamente 3 puntos (los que a simple vista se observaban). Gracias a la depuración se garantiza más precisión y eficiencia al eliminar redundancias y errores, permitiendo un análisis y visualización fiables.

sf::st_write(ambulancias_2, "ambulancias.gpkg", delete_dsn = TRUE)

El fichero generado con este procedimiento se puede descargar de aquí.



Proyectos de Innovación Educativa Emergente PIEE-2737007 y PIEE-3325394