Santiago Quiñones Cuenca
Software Developer and Educator, Master in Software Engineering, Research UTPL {Loja, Ecuador} Repositories: http://github.com/lsantiago
SEMANA 7
Unidad 4 - Manejo de datos ráster
4.4 Reclasificar ráster
🗂️ Reclasificar Ráster
🗂️ Reclasificar Ráster
✅ Facilita la interpretación de datos.
➖ Reduce la cantidad de clases o valores únicos.
🔧 Prepara los datos para modelos de análisis geoespacial.
🏷️ Asigna nuevas categorías o clases de valores.
Es una técnica del análisis geoespacial que permite reasignar valores dentro de un ráster, con el fin de agrupar categorías, simplificar datos o resaltar áreas específicas.
🗂️ Ejemplo de reclasificación
import rasterio
import numpy as np
import matplotlib.pyplot as plt
# Cargar el archivo ráster
with rasterio.open("dem.tif") as src:
raster = src.read(1, masked=True) # Usar masked para manejar valores nodata
profile = src.profile
# Definir rangos de elevación y sus valores correspondientes usando np.select
elevation_ranges = [
(raster < 500),
(raster >= 500) & (raster < 1000),
(raster >= 1000) & (raster < 1500),
(raster >= 1500)
]
values = [1, 2, 3, 4]
# Usar np.select en lugar de np.where anidados, default=0 especifica qué valor se debe asignar a los píxeles que no cumplen con ninguna de las condiciones definidas en elevation_ranges
reclasificado = np.select(elevation_ranges, values, default=0)
# Actualizar el perfil para el archivo de salida
profile.update(
dtype=rasterio.uint8, # Cambiar a uint8 es suficiente para 4 clases
nodata=0 # Establecer 0 como valor nodata
)
# Guardar el ráster reclasificado (1 es el número de banda)
with rasterio.open("dem_reclasificado.tif", "w", **profile) as dst:
dst.write(reclasificado, 1)
# Mostrar la imagen original y reclasificada (código original sin cambios)
fig, ax = plt.subplots(1, 2, figsize=(12, 6))
ax[0].imshow(raster, cmap="gray")
ax[0].set_title("Ráster Original")
ax[1].imshow(reclasificado, cmap="viridis")
ax[1].set_title("Ráster Reclasificado")
plt.show()
🧭 Aplicaciones de la Reclasificación Ráster
🌱 Modelado de idoneidad: identifica áreas aptas para agricultura, construcción o conservación.
🌊 Análisis de riesgos: evalúa zonas propensas a inundaciones, incendios o deslizamientos.
🗺️ Clasificación de cobertura del suelo: agrupa valores de uso de suelo en categorías más manejables.
📊 Analiza la distribución de valores del ráster con histogramas antes de reclasificar.
💾 Guarda correctamente los metadatos para asegurar la integridad del archivo.
4.5 Cortar archivos ráster
✂️ Cortar Archivos Ráster
✂️ Cortar Archivos Ráster
En el análisis geoespacial, frecuentemente se requiere trabajar con una región específica de un archivo ráster.
El proceso de corte (clip) permite extraer una porción del ráster con base en una extensión geográfica o un polígono definido.
🗺️ Cuando se necesita trabajar con una región puntual en un proyecto SIG.
💾 Para reducir el tamaño del archivo y mejorar el rendimiento.
📐 Para extraer datos de una zona de interés delimitada por un polígono.
Cortar un ráster usando una extensión geográfica
import rasterio
from rasterio.mask import mask
from shapely.geometry import box
import geopandas as gpd
# Abrir el archivo ráster
with rasterio.open("imagen_raster.tif") as src:
bbox = box(minx, miny, maxx, maxy) # Definir la caja de corte
geo = gpd.GeoDataFrame({'geometry': [bbox]}, crs=src.crs) # Crear GeoDataFrame
out_image, out_transform = mask(src, geo.geometry, crop=True)
# Guardar el ráster cortado
out_meta = src.meta.copy()
out_meta.update({"driver": "GTiff", "height": out_image.shape[1],
"width": out_image.shape[2], "transform": out_transform})
with rasterio.open("raster_cortado.tif", "w", **out_meta) as dest:
dest.write(out_image)
Cortar un ráster usando un polígono
import geopandas
from rasterio.mask import mask
data_file = r"C:\0_MRH\MDT_data\procesados\DEM.tif"
# 1 - Abrir un conjunto de datos mediante el gestor contextual
with rasterio.open(data_file) as src:
# 2 - Leer y transformar el conjunto de datos mediante recorte
out_image, out_transform = mask(src, canton_loja.geometry, crop=True)
# 3 - Actualizar los metadatos/perfiles espaciales del conjunto de datos
loja_dem_profile = src.profile
loja_dem_profile.update({"height": out_image.shape[1],
"width": out_image.shape[2],
"transform": out_transform})
# 4 - Save the new data set with the updated metadata/profile
with rasterio.open(r"C:\0_MRH\MDT_data\procesados\DEM_Loja.tif", "w", **loja_dem_profile) as dest:
dest.write(out_image)
es una función de rasterio que recorta un raster basándose en geometrías vectoriales
indica que se debe recortar el raster al tamaño exacto de la geometría
4.5 Índices de vegetación de banda ancha
🌿 Índices de vegetación
Los índices de vegetación son ampliamente utilizados en teledetección para:
✅ Monitorear la salud de la vegetación (ej. sequías, deforestación).
✅ Distinguir vegetación de áreas no vegetadas.
✅ Apoyar la agricultura de precisión, silvicultura y monitoreo ambiental.
También se aplican en la gestión de desastres y seguridad, especialmente para evaluar:
🌊 Inundaciones
🔥 Incendios
🌾 Sequías
⛰️ Deslizamientos de tierra
⚠️ Y otros peligros naturales
🌿 Índices de vegetación
🔺 El NDVI (Normalized Difference Vegetation Index) es el índice de vegetación más utilizado. Sus valores van de -1 a +1:
✅ NDVI > 0.5 → Vegetación saludable
⚠️ NDVI ≈ 0 → Suelo desnudo o vegetación escasa
❌ NDVI < 0 → Agua o áreas sin vegetación
📷 Se obtiene usando:
Banda 8 (NIR) y Banda 4 (Rojo) del satélite Sentinel-2
📈 Interpretación:
Valores cercanos a +1 → Alta actividad fotosintética
Valores negativos → Zonas urbanas o cuerpos de agua
🌿 Índices de vegetación avanzados
SAVI (Índice de Vegetación Ajustado al Suelo):
SAVI = ((NIR - RED) / (NIR + RED + L)) * (1 + L)
➤ Corrige la influencia del suelo (L = 0.5 en cobertura intermedia)
EVI (Índice de Vegetación Mejorado):
EVI = 2.5 * (NIR - RED) / (NIR + 6 * RED - 7.5 * BLUE + 1)
➤ Mejora la sensibilidad en zonas de vegetación densa
NMDI (Índice Normalizado de Estrés Hídrico):
NMDI = (NIR - (SWIR1 - SWIR2)) / (NIR + (SWIR1 - SWIR2))
➤ Detecta contenido de agua en la vegetación
RDI (Índice de Diferencia de Clorofila Rojo):
RDI = (NIR - RED) / (NIR + RED + GREEN)
➤ Estima el contenido de clorofila en plantas
📈 Aplicaciones clave:
🚜 Monitoreo agrícola: estrés hídrico y rendimiento de cultivos
🌳 Gestión de ecosistemas: cambios en la cobertura vegetal
🪵 Control de deforestación: detección de áreas afectadas
💧 Gestión del agua: evaluación de humedad en vegetación
📈 Índices utilizados en seguridad y gestión de desastres
¿Tienes más preguntas sobre la temática?
Seleccione el componente Programación Geoespacial
y consulta lo que quieras saber.
By Santiago Quiñones Cuenca
Unidad 4: Manejo de datos raster
Software Developer and Educator, Master in Software Engineering, Research UTPL {Loja, Ecuador} Repositories: http://github.com/lsantiago