Introducción a Google Earth Engine#
Para ejecutar el código:
Cada bloque de código se denomina celda. Para ejecutar una celda, pasa el cursor sobre ella y haz clic en la flecha de la esquina superior izquierda, o haz clic dentro de la celda y presiona Shift + Enter.
Nota: La primera vez que ejecutes un bloque de código, Google Colab mostrará el mensaje Warning: This notebook was not authored by Google. Haz clic en Run Anyway.
Necesitas un proyecto de Google Earth Engine para ejecutar este código. Si todavía no tienes uno, consulta la lección anterior, Obtener Google Earth Engine, para configurar tu proyecto.
Una gran ventaja de Google Colab es que puedes escribir código en Python y ver el resultado directamente en tu navegador. A continuación, repasaremos los conceptos básicos:
import ee
# Autenticar Google Earth Engine
ee.Authenticate()
# Cambia "emerge-lessons" por el ID de tu proyecto si es diferente
ee.Initialize(project="emerge-lessons")
En el código anterior, cambia “emerge-lessons” por el ID de tu propio proyecto. Por ejemplo, si tu ID es “emerge-34956”, puedes modificarlo de la siguiente manera:
ee.Initialize(project="emerge-34956")
Terminología básica: uso de colecciones en GEE#
Los Features (elementos) son objetos geométricos que contienen una lista de propiedades.
ee.Feature
Las Images (imágenes) son similares a los elementos, pero pueden tener varias bandas.
ee.Image
Las Collections (colecciones) son grupos de elementos o imágenes.
ee.FeatureCollection o ee.ImageCollection
En el Catálogo de datos de Earth Engine, al consultar los detalles de un conjunto de datos, puedes encontrar el fragmento de código necesario para importar ese conjunto de datos específico.
En este ejemplo, utilizaremos el conjunto de datos MODIS Terra Land Surface Temperature (LST).
# Importar la colección MODIS de temperatura de la superficie terrestre
lst = ee.ImageCollection('MODIS/061/MOD11A1')
Los conjuntos de datos incluyen distintos tipos de información distribuidos en varias bandas. Algunos contienen imágenes diarias con una resolución de 1 km, como el conjunto de datos MODIS LST que utilizamos, mientras que otros contienen una imagen al año con una resolución de 30 m.
La colección LST utiliza las siguientes bandas:
LST_Day_1km: temperatura diurna de la superficie terrestre
Day_view_time: hora local de la observación diurna
LST_Night_1km: temperatura nocturna de la superficie terrestre
Como la colección contiene tantas imágenes, debemos aplicar filtros. Usa filterDate() para filtrar las imágenes dentro de un intervalo de fechas y select() para elegir variables específicas.
# Fecha inicial de interés (incluida)
i_date = '2024-01-01'
# Fecha final de interés (excluida)
f_date = '2024-01-31'
# Selección de las bandas y fechas correspondientes para LST
lst = lst.select('LST_Day_1km', 'QC_Day').filterDate(i_date, f_date)
A continuación, estableceremos dos puntos de interés (POI) para analizar distintas ubicaciones. Como estamos estudiando la temperatura de la superficie terrestre, compararemos la temperatura de una zona urbana con la de una zona rural.
# Definir la ubicación urbana de interés como un punto cerca de Miami, Florida
urban_lon = -80.196432
urban_lat = 25.779766
urban_poi = ee.Geometry.Point(urban_lon, urban_lat)
# Definir la ubicación rural de interés como un punto alejado de la ciudad, en Homestead, Florida
rural_lon = -80.4998113
rural_lat = 25.3933527
rural_poi = ee.Geometry.Point(rural_lon, rural_lat)
El conjunto de datos MODIS que estamos utilizando debe corregirse con un factor de escala de 0.02 para obtener valores en kelvin. Puedes consultar esta información en el catálogo de Google Earth Engine.
¡Recuerda convertir los valores para obtener la respuesta final!
Necesitamos calcular la temperatura terrestre promedio de los dos puntos de interés que estamos analizando, por lo que utilizaremos mean().
# Escala en metros
scale = 1000
# Función para convertir LST a grados Celsius y obtener el valor promedio
def get_mean_lst(poi, scale):
mean_lst = lst.mean().sample(poi, scale).first().get('LST_Day_1km').getInfo()
return round(mean_lst * 0.02 - 273.15, 2) # Convertir a grados Celsius
# Obtener el valor promedio de LST para los puntos urbano y rural
urban_lst = get_mean_lst(urban_poi, scale)
rural_lst = get_mean_lst(rural_poi, scale)
print("La temperatura promedio de la superficie terrestre en el punto urbano es", urban_lst, "°C")
print("La temperatura promedio de la superficie terrestre en el punto rural es", rural_lst, "°C")
Mapas interactivos#
import folium # Crear mapas interactivos en Python
import geemap # Otra opción para representar datos de Google Earth Engine en mapas
Crea un mapa vacío centrado y ampliado sobre Florida. Puedes hacer clic y arrastrar para desplazarte por el mapa, así como acercar o alejar la vista.
map = folium.Map(location=[28.263363, -83.497652], tiles="Cartodb dark_matter", zoom_start=7)
display(map)
A continuación, definiremos una función, basada en este tutorial, para agregar datos de Google Earth Engine a un mapa y mostrarlos de forma interactiva.
def add_ee_layer(self, ee_image_object, vis_params, name):
"""Agrega un método para mostrar mosaicos de imágenes de Earth Engine en un mapa de folium."""
map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
folium.raster_layers.TileLayer(
tiles=map_id_dict['tile_fetcher'].url_format,
attr='Datos del mapa © <a href="https://earthengine.google.com/">Google Earth Engine</a>',
name=name,
overlay=True,
control=True
).add_to(self)
folium.Map.add_ee_layer = add_ee_layer
# Parámetros de visualización utilizados para definir los colores de los datos
lst_vis = {
'min': 13000.0,
'max': 16500.0,
'palette': [
'040274', '040281', '0502a3', '0502b8', '0502ce', '0502e6',
'0602ff', '235cb1', '307ef3', '269db1', '30c8e2', '32d3ef',
'3be285', '3ff38f', '86e26f', '3ae237', 'b5e22e', 'd6e21f',
'fff705', 'ffd611', 'ffb613', 'ff8b13', 'ff6e08', 'ff500d',
'ff0000', 'de0101', 'c21301', 'a71001', '911003'
],
}
# Agregar los datos al mapa
map.add_ee_layer(lst.mean().select('LST_Day_1km'), lst_vis, "LST")
display(map)
Referencias