Pasos para exportar un raster de R a formato GeoTIFF sin errores

Un raster que se ve perfecto en RStudio puede terminar flotando en medio del Pacífico apenas lo abres en otro programa. Llevo casi dos años metida en esto de la teledetección por mi cuenta, de a poco, en los ratos que me deja libre el trabajo de oficina, y esa pregunta todavía me hace apretar los dientes cada vez que exporto un archivo nuevo con el paquete terra. Tengo el monitor prestado al lado de la laptop, la ventana del patio empañada porque el frío se cuela apenas dejo la rendija abierta, y un olor a madera mojada que igual entra aunque cierre bien. Pasar de un raster bonito en R a un GeoTIFF que cualquier programa entienda suena, en la teoría, como apretar un botón. En la práctica, para alguien que aprendió esto sola y de cero, es justo ahí donde se pierde el trabajo de toda una tarde.

La respuesta corta, la que a mí nadie me dio de entrada, es que un raster no sale de R sabiendo solo dónde queda parado en el mundo: hay que decírselo. Si no le pones esa etiqueta de forma explícita antes de guardar, el archivo la pierde apenas cambia de programa, y ahí es cuando el mapa aparece donde no corresponde. Antes de exportar cualquier cosa reviso tres detalles nomás: que el objeto tenga su sistema de referencia asignado, con qué tipo de dato se va a guardar, y si conviene comprimirlo. Ese fue el criterio que me costó como todo un invierno entender, y ahora lo aplico casi sin pensar.

El mapa se pierde en medio del océano

Me acuerdo de una tarde de mucha lluvia, bien entrado el invierno pasado, terminando de procesar una imagen de esa franja de bosque nativo que se ve cruzando la bahía, camino a Corral. Los colores habían quedado preciosos, justo marcando donde yo sabía que había renovales más viejos. Todo se veía perfecto en R. Pero apenas usé una función cualquiera para guardar el archivo y se lo mandé a Isidora, una compañera de este mismo camino de aprender sola con la que empecé a escribirme después de notar que comentábamos los mismos tutoriales en inglés en YouTube, la cosa se puso fea: el archivo pesaba una barbaridad para lo que era, y cuando por fin le cargó en su pantalla, el mapa aparecía flotando en medio del océano, lejísimos de Chile. Nada que ver.

Lo que me pasaba, aunque me costó caer en la cuenta, es que un raster no es una foto cualquiera: es una matriz de números que necesita cargar consigo la etiqueta de en qué parte del mundo está. Esa etiqueta tiene nombre técnico, el CRS, y si no se la dejas puesta al archivo antes de guardar, se pierde apenas cambia de programa. Es como mandar una carta sin dirección: el programa que la recibe la deja donde le queda más cómodo, que en este caso resultó ser la nada misma.

Código en RStudio usando la función writeRaster del paquete terra para exportar a GeoTIFF sin errores

La función writeRaster y el paquete terra

Al principio usaba el paquete 'raster', que es el de siempre, pero después alguien del mismo grupo de aprendizaje me contó que existe uno más nuevo y más rápido llamado terra (hay varios paquetes espaciales dando vueltas en R, cada uno con su nicho, pero ese repaso da para un texto aparte). Con terra, la función que hace toda la magia es writeRaster. La trampa de principiante está aquí, y eso que ya me habían advertido en un tutorial: si solo le pones el nombre del archivo y nada más, R toma decisiones por su cuenta que no siempre convienen, y aun sabiéndolo caí igual las primeras veces, con el resultado pesadísimo o con colores raros.

Para que un GeoTIFF salga impecable hay que hablarle claro a la función. Especifico el formato ('GTiff') y, sobre todo, el tipo de dato. Normalmente ando sacando el NDVI del bosque a partir de las bandas de Sentinel-2 para comparar cómo se ve de una temporada a otra, y en esos casos lo normal es usar una profundidad de 16 bits, o INT2U en el código de R. Si dejas que R lo guarde como decimales sin necesitarlo, el archivo crece como pan con levadura y te quedas sin espacio en el disco en un abrir y cerrar de ojos.

Comprimir el GeoTIFF sin perder un solo píxel

Otro hallazgo de mis fines de semana de estudio fue la compresión. Se puede achicar el archivo sin perder ni un dato: ahora siempre agrego la opción 'LZW', un método sin pérdida que hace que ese archivo pesadísimo que me asustó aquel invierno termine ocupando bastante menos espacio y siendo mucho más fácil de manejar después. Ya no me da miedo que el computador se me quede pegado por falta de memoria a mitad de un análisis.

Antes de llegar a este punto probé aprender QGIS por mi cuenta, siguiendo un tutorial que encontré en internet, y me perdí en los menús desde el primer paso: ni siquiera entendía dónde se suponía que tenía que hacer clic para abrir una capa. Así que ahora lo uso solo para lo justo y necesario, como programa de verificación: abro ahí el GeoTIFF que acabo de exportar desde R nada más para confirmar que el mapa aparece donde corresponde y con los colores bien puestos, sin meterme a explorar todo lo demás que tiene el programa.

Lo que cambió después de varios domingos de práctica

A Raimundo, un conocido de las salidas de senderismo que fotografía hongos, le tocó escuchar buena parte de este enredo en el auto, de vuelta de una caminata. Quería entender si se podían notar cambios en el bosque con el tiempo, y tiene una paciencia infinita para esperar la luz perfecta entre los árboles, aunque apenas le muestro un mensaje de error en la pantalla se desespera al tiro (ahí nos reímos, porque a mí me pasa exactamente al revés). Le conté que si algún día quiere ir más allá y probar algo como modelar dónde puede seguir viviendo tal o cual especie con Maxent, va a tener que pasar antes por este mismo trámite aburrido de guardar bien los archivos, porque ningún modelo sirve de nada si el mapa de entrada quedó mal exportado.

No soy programadora ni geógrafa, y cada término nuevo sigue siendo, para mí, un cerro que subo despacio, los fines de semana. Ya para la séptima semana de este invierno podía abrir varias bandas de Sentinel-2 seguidas, una tras otra, directo en RStudio, sin que el programa se cerrara ni tuviera que reiniciar nada. Me quedé mirando la consola un rato, casi esperando que algo fallara. No falló nada. Isidora, que anota cada cosa que aprende en un cuaderno de papel para después escanearlo, me contó que a ella le había pasado algo parecido esa misma semana con sus propias imágenes para la tesis.

Mis pasos antes de guardar cualquier raster

Para que no se me olvide (y para que a ti tampoco te pase lo mismo), este es el orden mental que sigo cada vez que voy a exportar un trabajo. Primero reviso que el objeto en R tenga su sistema de referencia asignado, sin dar nada por sentado. Después elijo el nombre del archivo terminado siempre en ".tif". Luego defino el tipo de dato correcto, INT2U si son imágenes de 16 bits o FLT4S si de verdad necesito decimales, algo parecido a lo que tuve que aprender cuando andaba viendo cómo recortar un raster con un shapefile en RStudio fácilmente, porque ahí también hay que pensar en qué formato le conviene más al archivo final. No me olvido de agregar la compresión LZW para no llenar el disco duro de archivos gigantes. Y por último, sí o sí, abro el resultado en otro programa para confirmar que el mapa no está "volando" en ningún océano.

A veces pienso en que todo lo relacionado con cómo hacer una clasificación de coberturas vegetales en R paso a paso depende, en el fondo, de que este paso de exportar salga bien, igual que visualizar series temporales de satélite en R para cambios forestales tampoco sirve de nada si cada imagen de la serie quedó guardada de manera distinta. Si el archivo base está mal exportado, todo el análisis que construyas encima, por sofisticado que parezca, va a arrastrar ese mismo error. Es como levantar una casa sobre cimientos de barro: por bonita que quede la pintura, en el primer temporal se agrieta entera. Y aquí en el sur sabemos harto de temporales.

Este invierno ha sido bastante menos desesperante que el anterior. La lección que me llevo, más allá de los códigos y los paquetes, es que guardar bien un archivo no es el paso aburrido después del trabajo de verdad: es lo que decide si ese trabajo le va a servir a alguien más adelante, aunque esa persona sea yo misma dentro de unos meses. Ahora cierro RStudio con la conciencia tranquila, me quedo escuchando la lluvia contra el techo, y sé que mis mapas están ahí, bien guardados, esperando a que el sol se asome un rato y me den ganas de seguir comparando cómo cambia el verde al otro lado de la bahía.

Artículos relacionados