Script en R para abrir archivos HDF5 del producto VIIRS VNP46A1 (Black Marble), extraer la banda de radiancia nocturna (DNB At-Sensor Radiance) y exportarla como GeoTIFF georreferenciado.
El producto VNP46A1 es un dato diario de radiancias nocturnas del sensor VIIRS (Visible Infrared Imaging Radiometer Suite) a bordo del satélite Suomi NPP. Forma parte de la suite Black Marble de NASA, útil para estudios de iluminación artificial, actividad económica, consumo energético y urbanización.
Los archivos se distribuyen en formato HDF5 con proyección sinusoidal y tiles del sistema de grilla MODIS (ej. h12v12).
- Inspecciona el archivo HDF5 con
gdalinfopara obtener metadatos (extensión geográfica, subdatasets disponibles). - Extrae la subdataset de interés (
DNB_At_Sensor_Radiance_500m, posición 5) usandogdal_translate. - Asigna el CRS (WGS84) y la extensión geográfica leída de los metadatos del HDF5.
- Marca los valores de relleno (65535) como NA.
- Exporta el resultado como GeoTIFF.
VIIRS/
├── data/
│ ├── raw/ # Colocar aquí los archivos .h5 descargados
│ └── processed/ # GeoTIFFs de salida
├── R/
│ └── viirs_open.R # Script principal
├── output/ # Figuras (opcional)
├── .gitignore
└── README.md
- R ≥ 4.0
- GDAL instalado en el sistema con soporte para HDF5
- Paquetes R:
gdalUtils,raster,rgdal
install.packages(c("gdalUtils", "raster", "rgdal"))Nota sobre paquetes deprecados:
rgdalyrasterfueron retirados de CRAN en 2023. Las alternativas modernas sonterraysf. Ver la sección Migración a terra más abajo.
library(gdalUtils)
gdal_setInstallation(verbose = TRUE)
gdal_chooseInstallation(hasDrivers = "HDF5")- Descargar un archivo VNP46A1 desde LAADS DAAC (requiere cuenta Earthdata).
- Colocarlo en
data/raw/. - Editar las rutas en
R/viirs_open.Ro — mejor — usar los paths relativos que ya apuntan adata/raw/ydata/processed/.
source("R/viirs_open.R")El script genera un GeoTIFF en data/processed/.
El script funciona con cualquier producto HDF5 de la familia VIIRS/MODIS. Para adaptarlo:
- Cambiar el índice de subdataset en
get_subdatasets()(ej. posición 5 → la banda que necesites). Podés inspeccionar las bandas disponibles congdalinfo(filename). - Ajustar el valor NA si es distinto a 65535 (consultar la guía de usuario del producto).
- Para productos con otra proyección nativa, verificar los metadatos de extensión y CRS.
El paquete terra reemplaza a raster + rgdal y simplifica mucho la lectura de HDF5:
library(terra)
r <- rast("data/raw/VNP46A1.A2020285.h12v12.001.2020286073702.h5",
subds = 5)
NAflag(r) <- 65535
writeRaster(r, "data/processed/DNB_Sensor_Radiance.tif", overwrite = TRUE)Con terra ya no es necesario extraer manualmente la extensión de los metadatos. Los jóvenes la tienen más sencillo.
Los archivos HDF5 de VIIRS pesan entre 10–50 MB por tile, por lo que no se incluyen en el repositorio. Para descargar un archivo de prueba:
- Ir a LAADS DAAC.
- Buscar el producto VNP46A1.
- Seleccionar una fecha y tile (ej. h12v12 para Buenos Aires).
- Guardar en
data/raw/.
- Black Marble User Guide v1.0
- Tutorial: Working with Daily NASA VIIRS Surface Reflectance Data
- VNP13 Vegetation Index User Guide & ATBD
Sol Represa — Trabajo desarrollado como parte de su investigación doctoral.