Datos de Hoteles en Santa Cruz de Tenerife

Santa Cruz de Tenerife
Hoteles
GPKG
Autor/a
Afiliación

Carmen Valero Canal

Universtat de València

Fecha de publicación

30 de marzo de 2025

Input

Obtenemos el conjunto de datos geoespaciales sobre hoteles en Santa Cruz de Tenerife mediante OpenStreetMap (OSM), un proyecto colaborativo que proporciona un mapa libre y editable del mundo. OSM permite a los usuarios visualizar, editar y utilizar datos geográficos de cualquier parte del globo. Toda la información puede consultarse en la wiki de OpenStreetMap.

Otras informaciones de interés:

  • Licencia de uso: Los datos obtenidos de OSM están sujetos a la Open Database License (ODbL), que permite su uso y distribución con ciertas condiciones, como el reconocimiento de la fuente y la compartición de modificaciones realizadas.

  • Formatos: Los conjuntos de datos de OpenStreetMap pueden exportarse en varios formatos según el método de extracción, incluyendo GeoJSON, Shapefile, KML y CSV.

Descripción

bbox_santacruz_tenerife <- c(-18.4, 27.5, -16.0, 29.5) 
hoteles <- bbox_santacruz_tenerife %>%  # Utiliza el bounding box de la provincia
  opq() %>%  # Crea una consulta a OpenStreetMap
  add_osm_feature(key = "tourism", value = "hotel") %>%  # Filtra tipo "hotel"
  osmdata_sf() %>%  # formato sf
  .$osm_points  # Extrae 
hoteles_sf <- st_as_sf(hoteles)

Se trata de un objeto sf con 6294 observaciones y 92 variables

class(hoteles_sf)
[1] "sf"         "data.frame"
dim(hoteles_sf)
[1] 6552   92

Cambiamos el CRS para poder representarlo gráficamente con leaflet:

hoteles_sf <- sf::st_transform(hoteles_sf, crs=4326)
hoteles_sf %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles()

Al ampliar el mapa, podemos notar que, debido a ciertos errores en los datos, algunos hoteles aparecen duplicados o incluso triplicados en determinadas zonas geográficas. Para corregir este problema, aplicamos el siguiente comando, agrupando las ubicaciones en un cluster para mejorar la visualización y precisión de la información.

Tratamiento


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

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

hoteles_final <- hoteles_sf %>%
  group_by(cluster) %>%
  summarise(geometry = st_centroid(st_combine(geometry)))

Aplicamos el algoritmo DBSCAN para agrupar hoteles duplicados o muy cercanos y representar cada grupo mediante su centroide, mejorando así la visualización y precisión de los datos. Primero, hemos extraído las coordenadas de los hoteles con st_coordinates(), y luego hemos utilizado dbscan() con un radio de vecindad (eps = 0.001) (equivale a una distancia de aproximadamente 110 metros) y un mínimo de puntos por cluster (minPts = 1), lo que permite agrupar hoteles cercanos en un mismo grupo.

Posteriormente, asignamos a cada hotel su respectivo cluster y hemos combinado las geometrías dentro de cada grupo y calculado su centroide con st_centroid(st_combine(geometry)), generando así un dataset limpio y sin duplicados.

Output

Verificamos el resultado con class() y dim(), asegurándonos de que el objeto final mantiene su estructura espacial y de que la cantidad de hoteles ha disminuido tras la agrupación (de 6294 a 325 observaciones). Esto nos permite eliminar redundancias, mejorar la precisión geográfica y optimizar la visualización en mapas.

class(hoteles_final)
[1] "sf"         "tbl_df"     "tbl"        "data.frame"
dim(hoteles_final)
[1] 324   2
hoteles_final %>%
  leaflet::leaflet() %>%
  leaflet::addTiles() %>%
  leaflet::addCircles()

Ahora, al hacer zoom en el mapa, observamos que el problema de duplicados ha sido corregido, ya que cada grupo de hoteles cercanos se ha representado mediante un único punto en su centroide. Esto nos permite una visualización más precisa y limpia de los datos, evitando errores y redundancias en la representación geográfica.

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

sf::st_write(hoteles_final, "hoteles.gpkg", delete_dsn = TRUE)



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