[R-es] Obtener valores contaminación a partir mapas formato tif
Carlos Ortega
co| @end|ng |rom qu@||tyexce||ence@e@
Lun Feb 23 09:07:52 CET 2026
Hola Javier,
¿Qué tal?
Pues te diría que simplemente prueba a ver si funciona.
Si no funciona, tendrás que iterar.
Otra alternativa es pasarle el script a otra IA y ver si lo ve bien o te
corrige algo.
Recuerda que Codex de OpenAI o Claude Code es especialmente en todo lo
relativo a código.
Gracias,
Carlos Ortega
www.qualityexcellence.es
El lun, 23 feb 2026 a las 7:27, Javier Gómez Gonzalez (<zaragatan using gmail.com>)
escribió:
> 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]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>
--
Saludos,
Carlos Ortega
www.qualityexcellence.es
[[alternative HTML version deleted]]
Más información sobre la lista de distribución R-help-es