Google Earth Engine agricultura es hoy la plataforma más accesible para monitorear cultivos colombianos desde el espacio de forma gratuita. En GEOSAT usamos GEE a diario para análisis de café en Huila, palma africana en el Meta, caña de azúcar en el Valle del Cauca y arroz en el Tolima. En este artículo compartimos cinco scripts JavaScript funcionales que puede copiar, ajustar a su geometría y ejecutar hoy mismo en el Code Editor de GEE — sin pagar un peso.
Qué es Google Earth Engine y por qué es relevante para la agricultura colombiana
Google Earth Engine es una plataforma de computación geoespacial en la nube que almacena más de 80 petabytes de imágenes satelitales y datos geoespaciales. Lo que la hace especial para el sector agrícola colombiano es la combinación de tres factores: acceso gratuito para investigación y educación, un catálogo con toda la historia de Sentinel-2 (desde 2017) y Landsat (desde 1984), y la capacidad de procesar miles de imágenes sin descargarlas ni tener un servidor propio.
Para un agrónomo, ingeniero catastral o funcionario de la UPRA que necesita entender la dinámica de cobertura de un municipio, GEE elimina la barrera de los costos de procesamiento. Colombia tiene una diversidad de cultivos y zonas climáticas que hace muy difícil el monitoreo con visitas de campo periódicas: más de 4,7 millones de hectáreas en uso agrícola según el IGAC, distribuidas desde el nivel del mar hasta los 3.000 m.s.n.m. en los Andes. Los satélites de la constelación Copernicus (Sentinel-2) cubren el territorio nacional cada 5 días con una resolución de 10 metros, lo que permite detectar cambios en la cobertura vegetal que serían invisibles desde el suelo.
Cómo acceder a Google Earth Engine
El acceso a GEE es gratuito para uso no comercial — investigadores, universidades, entidades públicas y ONGs. El proceso es simple:
- Vaya a earthengine.google.com y haga clic en Get Started.
- Solicite acceso con una cuenta de Google (institucional o personal). Para entidades del gobierno colombiano como alcaldías, gobernaciones o entidades adscritas al MADR, el acceso educativo se aprueba en 24–48 horas.
- Una vez aprobado, acceda al Code Editor en code.earthengine.google.com. El entorno incluye un editor JavaScript, un mapa interactivo y una consola de resultados.
Para uso comercial (empresas privadas que presten servicios con GEE como insumo), Google tiene planes de pago a través de Google Cloud. En GEOSAT operamos bajo un plan comercial cuando los análisis hacen parte de un producto entregable a terceros.
Script 1 — NDVI mensual con Sentinel-2 para cultivo de palma africana
Este script calcula el NDVI promedio mensual sobre un polígono de palma en el Meta. El resultado se visualiza en el mapa y se imprime en consola para cada mes del año.
// Script 1: NDVI mensual Sentinel-2 para palma africana
// Reemplaza la geometría con las coordenadas de tu predio
var predio = ee.Geometry.Polygon([[
[-73.45, 3.82],
[-73.42, 3.82],
[-73.42, 3.79],
[-73.45, 3.79],
[-73.45, 3.82]
]]);
// Función para calcular NDVI
var calcNDVI = function(img) {
var ndvi = img.normalizedDifference(['B8', 'B4']).rename('NDVI');
return img.addBands(ndvi);
};
// Filtro base: año 2025, nubosidad < 20%
var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(predio)
.filterDate('2025-01-01', '2025-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.map(calcNDVI);
// Iterar por mes y calcular NDVI promedio
var meses = ee.List.sequence(1, 12);
var serieNDVI = meses.map(function(m) {
var inicio = ee.Date.fromYMD(2025, m, 1);
var fin = inicio.advance(1, 'month');
var promedio = s2.filterDate(inicio, fin)
.select('NDVI')
.mean()
.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: predio,
scale: 10,
maxPixels: 1e9
});
return ee.Feature(null, promedio.set('mes', m));
});
print('NDVI mensual palma:', ee.FeatureCollection(serieNDVI));
// Visualización en mapa (último compuesto disponible)
var ndviVis = s2.select('NDVI').median().clip(predio);
Map.centerObject(predio, 14);
Map.addLayer(ndviVis, {min: 0, max: 1, palette: ['red', 'yellow', 'green']}, 'NDVI Palma');
Qué hace este script: filtra imágenes Sentinel-2 con menos del 20 % de nubosidad, calcula el NDVI normalizado usando las bandas NIR (B8) y Rojo (B4), y agrega el promedio mensual por polígono. Es útil para detectar meses de estrés hídrico o fenómenos de marchitez letal en palma.
Script 2 — Detección de estrés hídrico con NDWI en arrozales
El Índice de Agua de Diferencia Normalizada (NDWI) es más sensible al contenido de agua en la hoja que el NDVI. Para cultivos de arroz en el Tolima o el Huila, donde el manejo del riego es crítico, NDWI permite identificar parcelas con déficit antes de que los síntomas sean visibles.
// Script 2: NDWI para detección de estrés hídrico en arroz
// Área de ejemplo: arrozales en el Tolima
var zona_arroz = ee.Geometry.Rectangle([-75.30, 4.10, -75.15, 4.25]);
// Función NDWI: usa banda Verde (B3) y NIR (B8)
var calcNDWI = function(img) {
var ndwi = img.normalizedDifference(['B3', 'B8']).rename('NDWI');
return img.addBands(ndwi).copyProperties(img, ['system:time_start']);
};
var coleccion = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(zona_arroz)
.filterDate('2025-03-01', '2025-06-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 15))
.map(calcNDWI);
// Imagen compuesta: mediana del período
var compuesto = coleccion.select('NDWI').median().clip(zona_arroz);
// Clasificar estrés: valores NDWI < -0.2 indican déficit hídrico
var estres = compuesto.lt(-0.2).selfMask();
Map.centerObject(zona_arroz, 12);
Map.addLayer(compuesto, {min: -0.5, max: 0.5, palette: ['brown', 'white', 'blue']}, 'NDWI Arroz');
Map.addLayer(estres, {palette: ['red']}, 'Zonas con estrés hídrico');
// Calcular área con estrés
var areaEstres = estres.multiply(ee.Image.pixelArea()).reduceRegion({
reducer: ee.Reducer.sum(),
geometry: zona_arroz,
scale: 10,
maxPixels: 1e9
});
print('Área con estrés hídrico (m²):', areaEstres);
Interpretación: valores NDWI negativos (inferiores a −0,2) en cultivos de arroz durante la fase vegetativa sugieren déficit de riego o problemas de distribución de agua. Este script genera además el área total afectada en metros cuadrados — dato útil para un informe técnico al distrito de riego o a la CRA respectiva.
Script 3 — Serie de tiempo NDVI anual para caña de azúcar
El Valle del Cauca concentra más de 240.000 hectáreas de caña de azúcar. El NDVI a lo largo de un año completo permite identificar el ciclo de cosecha, comparar lotes y detectar focos de roya naranja o carbón antes de que se propaguen.
// Script 3: Serie de tiempo NDVI anual - Caña de azúcar Valle del Cauca
// Genera un chart de NDVI vs tiempo en el Code Editor
var lote_cana = ee.Geometry.Polygon([[
[-76.55, 3.65],
[-76.52, 3.65],
[-76.52, 3.62],
[-76.55, 3.62],
[-76.55, 3.65]
]]);
var calcNDVI = function(img) {
return img
.addBands(img.normalizedDifference(['B8', 'B4']).rename('NDVI'))
.copyProperties(img, ['system:time_start']);
};
var serie = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(lote_cana)
.filterDate('2025-01-01', '2025-12-31')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 25))
.map(calcNDVI)
.select('NDVI');
// Graficar la serie de tiempo directamente en el editor
var chart = ui.Chart.image.series({
imageCollection: serie,
region: lote_cana,
reducer: ee.Reducer.mean(),
scale: 10,
xProperty: 'system:time_start'
}).setOptions({
title: 'Serie NDVI anual - Caña de azúcar',
hAxis: {title: 'Fecha'},
vAxis: {title: 'NDVI', minValue: 0, maxValue: 1},
lineWidth: 2,
pointSize: 4,
colors: ['#5A8A3A']
});
print(chart);
Por qué es útil: la caña en Colombia tiene ciclos de 12 a 18 meses. Un pico alto de NDVI seguido de una caída brusca indica cosecha mecánica. Si el NDVI no recupera a los 60–90 días, puede haber problema de rebrote o manejo deficiente del suelo. Azúcar y etanol certificadores como Cenicaña ya usan este tipo de análisis para validar áreas de sus proveedores.
Script 4 — Comparación before/after de cobertura vegetal post-tala
Este script es especialmente útil para funcionarios del IDEAM, las CAR y el SIAC que necesitan documentar cambios de cobertura para informes de deforestación o para procesos de denuncia y seguimiento ambiental.
// Script 4: Comparación de cobertura vegetal antes y después de intervención
// Útil para monitoreo de deforestación y cambio de uso del suelo
var area_interes = ee.Geometry.Polygon([[
[-74.80, 1.50],
[-74.75, 1.50],
[-74.75, 1.45],
[-74.80, 1.45],
[-74.80, 1.50]
]]);
var calcNDVI = function(img) {
return img.addBands(
img.normalizedDifference(['B8', 'B4']).rename('NDVI')
);
};
// Imagen "antes" — primer semestre 2023
var antes = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(area_interes)
.filterDate('2023-01-01', '2023-06-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.map(calcNDVI)
.select('NDVI')
.median()
.clip(area_interes);
// Imagen "después" — primer semestre 2025
var despues = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(area_interes)
.filterDate('2025-01-01', '2025-06-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.map(calcNDVI)
.select('NDVI')
.median()
.clip(area_interes);
// Diferencia: valores negativos = pérdida de vegetación
var diferencia = despues.subtract(antes).rename('DeltaNDVI');
// Visualización comparativa
var ndviVis = {min: 0, max: 1, palette: ['red', 'yellow', 'green']};
var difVis = {min: -0.5, max: 0.5, palette: ['red', 'white', 'darkgreen']};
Map.centerObject(area_interes, 13);
Map.addLayer(antes, ndviVis, 'NDVI Antes (2023)');
Map.addLayer(despues, ndviVis, 'NDVI Después (2025)');
Map.addLayer(diferencia, difVis, 'Cambio de cobertura');
print('NDVI promedio antes:', antes.reduceRegion({reducer: ee.Reducer.mean(), geometry: area_interes, scale: 10}));
print('NDVI promedio después:', despues.reduceRegion({reducer: ee.Reducer.mean(), geometry: area_interes, scale: 10}));
Nota regulatoria: los análisis de cambio de cobertura generados con GEE pueden ser usados como evidencia complementaria en procesos ante la Fiscalía o las CAR, pero no reemplazan un levantamiento certificado por un profesional habilitado. Para procesos legales, en GEOSAT generamos el análisis satelital como insumo y lo acompañamos de un informe técnico firmado.
Script 5 — Exportar mapa de índices a Google Drive en formato GeoTIFF
Los cinco scripts anteriores visualizan resultados en el navegador, pero para entregar un producto a un cliente o importarlo en QGIS o ArcGIS necesita exportar el archivo. Este script muestra cómo exportar cualquier imagen de GEE a Google Drive.
// Script 5: Exportar índice NDVI a Google Drive como GeoTIFF
// Compatible con QGIS, ArcGIS y cualquier SIG de escritorio
var predio = ee.Geometry.Polygon([[
[-73.45, 3.82],
[-73.42, 3.82],
[-73.42, 3.79],
[-73.45, 3.79],
[-73.45, 3.82]
]]);
var calcNDVI = function(img) {
return img.addBands(img.normalizedDifference(['B8', 'B4']).rename('NDVI'));
};
var ndvi_final = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(predio)
.filterDate('2025-01-01', '2025-06-30')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
.map(calcNDVI)
.select('NDVI')
.median()
.clip(predio);
// Exportar a Google Drive
Export.image.toDrive({
image: ndvi_final,
description: 'NDVI_Palma_Primer_Semestre_2025',
folder: 'GEE_Exportaciones',
fileNamePrefix: 'ndvi_palma_2025_s1',
region: predio,
scale: 10, // Resolución 10 m (Sentinel-2)
crs: 'EPSG:4326', // WGS84 — cambie a EPSG:9377 si necesita MAGNA-SIRGAS
maxPixels: 1e10,
fileFormat: 'GeoTIFF'
});
print('Exportación iniciada. Revise la pestaña Tasks y haga clic en Run.');
Sistema de referencia: si el GeoTIFF va a integrarse con capas catastrales del IGAC o con cartografía oficial de Colombia, cambie el parámetro crs a 'EPSG:9377' (MAGNA-SIRGAS / Colombia Bogota Zone), que es el sistema oficial adoptado por la Resolución 529 de 2020. La exportación en WGS84 (EPSG:4326) es adecuada para visualización general y compatibilidad con plataformas como Google Maps o AGOL.
Limitaciones de GEE para uso operacional
GEE es una herramienta poderosa, pero tiene límites reales que hay que conocer antes de incorporarla en flujos de trabajo profesionales:
- Requiere programar en JavaScript o Python. No hay interfaz de apuntar y hacer clic para análisis avanzados. Un agrónomo sin experiencia en código tendrá una curva de aprendizaje de 2–4 semanas para scripts básicos.
- Sin soporte técnico para usuarios gratuitos. Si un script falla o una colección de imágenes cambia de estructura, el usuario debe resolver el problema en foros comunitarios.
- La nubosidad en Colombia es un problema real. En regiones como el Chocó, el Putumayo o la vertiente amazónica, conseguir una sola imagen sin nubes por mes puede ser imposible durante la temporada de lluvias. GEE no genera imágenes — trabaja con lo que los satélites captaron.
- Resolución de 10 metros para Sentinel-2. Para cultivos de menos de una hectárea o para detectar malezas puntuales, 10 m puede ser insuficiente.
- No entrega cartografía certificada. Los mapas generados en GEE son insumos analíticos, no productos cartográficos formales para planos de licitación o trámites ante el IGAC.
Cuándo GEE no es suficiente — y cuándo GEOSAT puede ayudar
GEE cubre muy bien el monitoreo periódico a escala media y grande. Pero hay escenarios donde la plataforma llega a su límite y se necesita un proveedor especializado:
| Necesidad | GEE | GEOSAT | |-----------|-----|--------| | Monitoreo periódico de 500+ ha | ✓ | ✓ | | Resolución < 10 m (3 cm con drone) | ✗ | ✓ | | Producto cartográfico con firma para licitación | ✗ | ✓ | | Entrega urgente en 24–48 horas | ✗ | ✓ | | Análisis multitemporal histórico | ✓ | ✓ | | Detección de plagas a nivel de planta | ✗ | ✓ con drone + multispectral | | Soporte técnico continuo | ✗ | ✓ |
En GEOSAT hemos procesado imágenes sobre más de 800.000 hectáreas agrícolas en Colombia usando una combinación de GEE para el análisis satelital de escala y drones con sensores multiespectrales para la validación a nivel de lote. Si su proyecto necesita ir más allá de lo que un script puede ofrecer — ya sea una cartografía formal, un informe técnico para una licitación o un monitoreo con entregable mensual — podemos diseñar una solución completa.
Preguntas frecuentes
¿Puedo usar GEE de forma gratuita para proyectos de una empresa privada?
No directamente. El acceso gratuito de Google Earth Engine está restringido a uso no comercial: investigación académica, entidades públicas y ONGs. Si usa GEE como insumo para prestar servicios a terceros o dentro de un contrato comercial, debe tener una licencia de uso comercial a través de Google Cloud. Las multas por uso no autorizado pueden ser significativas. En GEOSAT operamos con licencia comercial y podemos incluir el análisis de GEE como parte de los entregables contratados.
¿Qué tan actualizado está el catálogo de Sentinel-2 en GEE?
La colección COPERNICUS/S2_SR_HARMONIZED normalmente tiene un rezago de 3 a 5 días respecto a la toma de la imagen. Para Colombia, el satélite pasa aproximadamente cada 5 días sobre la misma área. Esto significa que en condiciones de cielo despejado puede obtener imágenes con menos de una semana de antigüedad. En la práctica, la nubosidad reduce significativamente la disponibilidad de imágenes útiles en regiones andinas y pacíficas.
¿Puedo usar estos scripts con Landsat en lugar de Sentinel-2?
Sí. Landsat 8 y 9 (colección LANDSAT/LC08/C02/T1_L2 y LANDSAT/LC09/C02/T1_L2) tienen una resolución de 30 metros, lo que los hace menos adecuados para análisis de lotes pequeños, pero son útiles para series históricas largas (desde 1984 con Landsat 5). Para adaptar los scripts, cambie los nombres de las bandas: el NIR en Landsat 8/9 es SR_B5 y el Rojo es SR_B4. También debe aplicar los factores de escala de reflectancia: multiplique por 0,0000275 y sume −0,2 para obtener reflectancias correctas.