PROGRAMACIÓN
GEOESPACIAL:
HERRAMIENTAS
PARA LA INNOVACIÓN
Especialización en Gestión de
Geoinformación con mención
en Proyectos de Ingeniería

SEMANA 7

Unidad 4 - Manejo de datos ráster

Unidad 4: Manejo de datos raster (2da. parte)

Profesor: Ing. Santiago Quiñones

Docente Investigador

Departamento de Ingeniería Civil

Contenidos

4.4 Reclasificar ráster

🗂️ Reclasificar Ráster

🗂️ Reclasificar Ráster

🎯 ¿Por qué reclasificar un 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.

❓ ¿Qué es la reclasificación?

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()

Podemos utilizar la librería rasterio y numpy para reclasificar valores dentro de un archivo ráster.

🧭 Aplicaciones de la Reclasificación Ráster

🛠️ Aplicaciones comunes:

  • 🌱 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.

Recomendaciones:

  • 📊 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.

📌 ¿Cuándo cortar un ráster?

  • 🗺️ 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 

📌 ¿Qué es el NDVI?

 

🔺 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

🔎 ¿Cómo se calcula?

📷 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

🔢 Principales índices y fórmulas:

  • 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.

S7 - Unidad 4: Manejo de datos raster

By Santiago Quiñones Cuenca

S7 - Unidad 4: Manejo de datos raster

Unidad 4: Manejo de datos raster

  • 31