Manejar datos vectoriales en R para delimitar áreas forestales

El cursor parpadea justo debajo de st_read(), y aprieto enter conteniendo la respiración: la última vez este mismo comando me tiró un error tan largo que tuve que hacer scroll para leerlo completo. Esta vez el polígono aparece de inmediato, bien plantado sobre el borde del bosque nativo camino a Corral, frente a la bahía de Valdivia, el mismo que quiero delimitar con datos vectoriales sin que se mueva ni un metro de donde debería estar.

Y aquí va lo que casi nadie te explica cuando recién empiezas: un archivo vectorial no es un dibujo que se abre como una foto. Es una tabla de datos amarrada a una geometría, y esa diferencia es la que separa a quien pelea a ciegas con R de quien entiende por qué el programa se está quejando.

El archivo vectorial: más que un dibujo bonito

La confusión es súper común, y a mí también me agarró desprevenida las primeras veces. Uno ve el polígono verde sobre el mapa y piensa que ahí se acaba la historia, como si fuera un dibujo hecho con el mouse. Pero detrás de esa forma hay filas y columnas, igual que en una planilla: cada polígono tiene atributos, nombre, superficie, algún código de clasificación. Delimitar el bosque nativo no es trazar una línea que se vea bien, es armar una tabla que sabe exactamente dónde está parada cada cosa.

La familia de archivos que viaja junta, o nada funciona

Por eso un Shapefile nunca es un solo archivo, aunque el ícono en la carpeta lo haga parecer así. Es más bien una familia que no se puede separar: el .shp guarda la geometría, el .dbf trae la tabla de atributos, el .shx hace de índice. Moví solo el .shp a otra carpeta más de una vez sin darme cuenta, y R, con toda razón, se negaba a leer nada.

El paquete que uso para todo esto se llama sf (de Simple Features), y fue lo que realmente me hizo entender la teledetección de otra manera: trata los mapas como si fueran tablas normales de R, así que puedo filtrar un polígono igual que filtraría una columna en una planilla. Todo se sostiene en un estándar que se llama ISO 19125, que básicamente obliga a que distintos programas guarden las formas geométricas de la misma manera. Cómo llegué a entender todo esto sin venir de la programación ni de la geografía es otra historia, que ya conté en otro rincón de este mismo blog.

Primer plano de RStudio con el paquete sf de R cargando datos vectoriales del bosque nativo con éxito

Tengo una amiga que sale a remar en kayak por el río Cruces cada vez que para de llover, y cuando le muestro el mapa en la pantalla me dice que se parece a mirar el bosque desde el agua: se nota la forma, pero no lo que hay debajo. A mí me pasó algo parecido cuando quise cruzar mi polígono con una imagen satelital, después de pasar varias tardes aprendiendo a crear composiciones de color en RStudio para ver el bosque nativo: ahí aprendí, a las malas, que bajar escenas Landsat en formato TIFF no sirve de nada si no tienes un programa especializado para siquiera abrirlas, porque eso ya es terreno de raster, no de vectores. La proyección o CRS de cada capa es otro tema con tela de sobra para cortar por sí solo, así que hoy solo diré que existe y que conviene revisarlo antes de cruzar cualquier cosa.

Cambiar el hábito: adiós Shapefile, hola GeoPackage

Este es el error técnico en el que caen casi todos los que recién empiezan: quedarse pegados al Shapefile solo porque es el que más aparece en los tutoriales. Es un formato viejo, con límites que hoy parecen absurdos. Los nombres de columna no pueden pasar de diez caracteres, así que algo como 'superficie_hectareas' termina cortado a la fuerza, y basta con perder uno de los archivos acompañantes para que todo el conjunto quede inservible.

Cada vez que puedo, guardo mis delimitaciones forestales directamente en formato GeoPackage. Es un solo archivo que junta la geometría, los datos y hasta los metadatos, y no depende de que cuatro o cinco archivitos viajen siempre pegados unos a otros. La regla que me sirve, y que le paso a cualquiera que me pregunte, es simple: en vez de terminar un análisis con st_write(mi_bosque, 'mi_bosque.shp'), cambia esa última parte a .gpkg desde el principio, aunque el tutorial que estés siguiendo diga lo contrario.

Con el polígono ya guardado como corresponde, lo que sigue es cruzarlo con otras capas: recortar una imagen satelital justo por ese borde, calcular un índice como el NDVI con sus propias bandas espectrales, o incluso armar una serie de tiempo para ver cómo ha cambiado el bosque año a año — todo eso es otro proceso aparte, con sus propios dolores de cabeza. Antes de llegar a delimitar bien el polígono, a mí me sirvió mucho revisar cómo otras personas hacían la clasificación de coberturas vegetales en R paso a paso, porque ahí se entiende cómo el vector y el raster terminan trabajando juntos.

Cuaderno con anotaciones comparando GeoPackage y Shapefile para guardar datos vectoriales en R

El polígono no se mueve solo, aunque a veces lo parezca

Ya ni sé cuándo dejé de cerrar RStudio entre una sesión y otra: en algún momento me fijé que tenía media docena de bandas de Sentinel-2 abiertas al mismo tiempo, sin haber reiniciado el computador ni una vez, y el programa seguía andando tranquilo. Antes eso me habría dado pánico. Ahora ni lo pesco.

Lo que quiero que te quede de todo esto, si estás por delimitar tu primer polígono forestal, es simple: revisa que tus archivos vengan completos antes de culpar a R, y si puedes elegir, parte derecho en GeoPackage y ahórrate el drama del Shapefile a medio armar. Qué paquete de R conviene más para cada tipo de imagen satelital, cómo sacarle las nubes a una escena de Sentinel-2, o cómo usar este mismo polígono para modelar dónde podría estar viviendo tal o cual especie son historias completamente aparte, que ya andan rondando por otras entradas de este blog. Por ahora, con el bosque nativo bien delimitado y sus archivos guardados donde corresponde, me basta para seguir mirando, mapa tras mapa, cuánto terreno le va quedando al bosque frente a las plantaciones.

Artículos relacionados