Índices de vegetación y agua#
¿Está verde? ¿Está húmedo? En esta lección calcularemos y visualizaremos el Índice de Vegetación de Diferencia Normalizada (NDVI) y el Índice de Agua de Diferencia Normalizada (NDWI) a partir de imágenes satelitales.
import folium
import ee
import geemap
from datetime import datetime, timedelta
# Autenticar tu cuenta de Google con Earth Engine
ee.Authenticate()
# Escribe aquí el ID de tu proyecto, entre comillas
ee.Initialize(project="emerge-lessons")
def add_ee_layer(self, ee_image_object, vis_params, name):
"""
Agrega a un mapa de Folium una capa de teselas
procedente de una imagen de Earth Engine.
"""
map_id_dict = ee.Image(ee_image_object).getMapId(vis_params)
folium.raster_layers.TileLayer(
tiles=map_id_dict["tile_fetcher"].url_format,
attr=(
'Map Data © '
'<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
Dibuja un círculo alrededor de un punto de entrada. Esta región se utilizará para recortar la imagen satelital.
# Región de interés
point = ee.Geometry.Point(-81.660044, 28.473813)
region = point.buffer(distance=100000)
Obtén imágenes del satélite Sentinel-2 que coincidan con nuestra ubicación y el intervalo de fechas, con menos de un 10 % de cobertura de nubes.
collection = (
ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
.filterBounds(region)
.filterDate("2024-04-01", "2024-06-01")
.filter(
ee.Filter.lte("CLOUDY_PIXEL_PERCENTAGE", 10)
)
)
Calcula el valor mediano de las imágenes de la colección. Esto ayuda a eliminar datos no deseados, como las nubes.
image = collection.median().clip(region)
Calcula el NDVI, o Índice de Vegetación de Diferencia Normalizada, a partir de la imagen. Este índice ayuda a mostrar el estado y la densidad de la vegetación.
Un NDVI alto indica una mayor presencia de vegetación verde.
Fórmula:
(NIR - RED) / (NIR + RED)
ndvi = image.normalizedDifference(
["B8", "B4"]
).rename("NDVI")
Calcula el NDWI, o Índice de Agua de Diferencia Normalizada, a partir de la imagen. Este índice ayuda a identificar la presencia de agua.
Un NDWI alto indica una mayor presencia de agua.
Fórmula:
(GREEN - NIR) / (GREEN + NIR)
ndwi = image.normalizedDifference(
["B3", "B8"]
).rename("NDWI")
Configura un mapa interactivo y céntralo sobre Florida.
map = folium.Map(
location=[28.473813, -81.660044],
tiles="Cartodb dark_matter",
zoom_start=8
)
Agrega al mapa la capa de NDVI, que representa la vegetación. Los valores altos se mostrarán en verde.
map.add_ee_layer(
ndvi,
{
"min": 0,
"max": 1,
"palette": ["white", "green"]
},
"NDVI"
)
Agrega al mapa la capa de NDWI, que representa el agua. Los valores altos se mostrarán en azul.
map.add_ee_layer(
ndwi,
{
"min": -1,
"max": 1,
"palette": ["white", "blue"]
},
"NDWI"
)
Muestra el mapa con un control de capas en la esquina superior derecha. Este control permite mostrar u ocultar cada capa.
folium.LayerControl(
collapsed=False
).add_to(map)
display(map)
En el mapa interactivo, haz clic en la casilla junto a NDWI para ocultar esa capa y ver el NDVI que se encuentra debajo. Vuelve a hacer clic en la casilla para mostrar nuevamente el NDWI.