[R-es] Obtener valores contaminación a partir mapas formato tif

Javier Gómez Gonzalez z@r@g@t@n @end|ng |rom gm@||@com
Lun Feb 23 07:24:59 CET 2026


Hola a todos:

Quiero hacer un mapa de contaminación atmosférica para Granada utilizando
los archivos en formato .tif proporcionados por la Agencia Europea de Medio
Ambiente, que contienen datos interpolados en cuadrículas de 1 km²
(European Air Quality Data – Interpolated Data Series).

https://sdi.eea.europa.eu/catalogue/datahub/eng/catalog.search#/metadata/82700fbd-2953-467b-be0a-78a520c3a7ef

Al no saber como hacerlo he utilizado Gemini de Google. Mi pregunta es si
es correcto el script que me ha proporcionado o alucina. El archivo tif del
script se puede descargar de este enlace

https://sdi.eea.europa.eu/data/a62eab17-056b-46d5-ae42-d84b92a74628
==============================================================================
MAPA
DE CALIDAD DEL AIRE (PM10) - GRANADA 2006 Configuración: Coordenadas UTM y
Escala discreta unidad a unidad
==============================================================================
1.
CARGA DE LIBRERÍAS

if (!require("pacman")) install.packages("pacman") pacman::p_load(sf,
terra, leaflet, htmlwidgets, osmdata, viridis, dplyr)
2. OBTENER CONTORNO OFICIAL DE GRANADA (OSM)

granada_osm <- opq(bbox = 'Granada, Spain') %>% add_osm_feature(key =
'admin_level', value = '8') %>% add_osm_feature(key = 'name', value =
'Granada') %>% osmdata_sf()
Guardar el contorno oficial de Granada

saveRDS(granada_osm, "granada_osm_data.rds")

granada_poly <- granada_osm$osm_multipolygons %>% st_make_valid()
%>% st_union() %>% st_as_sf()
3. PROCESAMIENTO DEL RASTER

raster_raw <- rast("PM10 archivos
tif/EEA_1kmgrid_2006_pm10_avg.tif") granada_proj <-
st_transform(granada_poly, crs(raster_raw))

raster_suave <- crop(raster_raw, granada_proj, mask = TRUE) %>% disagg(fact
= 10, method = "bilinear") %>% terra::mask(vect(granada_proj))

raster_web <- project(raster_suave, "EPSG:4326")
4. CONFIGURAR ESTACIONES CON COORDENADAS UTM OFICIALES

estaciones_utm <- data.frame( nombre = c("Granada Norte", "Palacio de
Congresos"), x = c(445628, 446721), y = c(4116803, 4113421) )

puntos_sf_utm <- st_as_sf(estaciones_utm, coords = c("x", "y"), crs =
25830) puntos_para_extraer <- st_transform(puntos_sf_utm,
crs(raster_suave)) valores_extraidos <- terra::extract(raster_suave,
vect(puntos_para_extraer))

puntos_leaflet <- st_transform(puntos_sf_utm, 4326) coords_finales <-
st_coordinates(puntos_leaflet)

estaciones <- data.frame( nombre = estaciones_utm$nombre, lng =
coords_finales[,1], lat = coords_finales[,2], concentracion =
round(valores_extraidos[,2], 1) )
5. DEFINIR ESCALA DISCRETA

vals <- values(raster_web, na.rm = TRUE) v_min <- floor(min(vals, na.rm =
TRUE)) v_max <- ceiling(max(vals, na.rm = TRUE)) pasos <- seq(v_min, v_max,
by = 1)

pal_discreta <- colorBin( palette = viridis(length(pasos), option =
"magma"), domain = vals, bins = pasos, na.color = "transparent" )
6. CONSTRUCCIÓN DEL MAPA INTERACTIVO

mapa_final <- leaflet(options = leafletOptions(zoomSnap = 0.5))
%>% addProviderTiles(providers$CartoDB.Positron)
%>% addRasterImage(raster_web, colors = pal_discreta, opacity = 0.8, method
= "ngb") %>% addPolygons(data = st_transform(granada_poly, 4326), fill =
FALSE, color = "#2c3e50", weight = 2) %>% addCircleMarkers( data =
estaciones, lat = ~lat, lng = ~lng, radius = 7, color = "white", fillColor
= "#e67e22", fillOpacity = 1, weight = 2, label = ~paste0(nombre, ": ",
concentracion, " µg/m³"), labelOptions = labelOptions( noHide = TRUE,
direction = "top", textOnly = TRUE, style = list( "color" =
"#2c3e50", "font-weight" = "bold", "text-shadow" = "1px 1px 2px
white", "font-family" = "sans-serif" ) ) ) %>% addLegend( pal =
pal_discreta, values = vals, title = "PM10 (µg/m³)", position =
"bottomright", opacity = 0.8 ) %>% addControl( html = '  Concentración
media anual PM10 - Granada 2006

', position = "topright" ) %>% addControl( html = paste0( '

', '*Rango:* ', v_min, ' - ', v_max, ' µg/m³ (Escala 1:1)
', '*Fuente:* *AEMA*
<https://www.eea.europa.eu/en/datahub/datahubitem-view/abc66a42-b595-4e0f-9772-b862dc454e9f>
', '*Autor:* Javier Gómez González
', '*Herramienta:* IA Gemini (Google, 2026) - Sujeto verificación', '

' ), position = "bottomleft" )
7. EXPORTACIÓN

nombre_carpeta <- "Mapas calor PM10 Granada" if
(!dir.exists(nombre_carpeta)) dir.create(nombre_carpeta)

ruta_archivo <- file.path(nombre_carpeta,
"mapa_calor_pm10_Granada_2006.html") saveWidget(mapa_final, file =
ruta_archivo, selfcontained = TRUE)

cat(paste0("\n--- PROCESO COMPLETADO ---", "\nConfiguración final aplicada:
Título y Leyenda a 15.5px", "\nArchivo generado: '", ruta_archivo, "'\n"))



                               Javier Gómez González

	[[alternative HTML version deleted]]



Más información sobre la lista de distribución R-help-es