Introducción

El análisis de radiación solar es esencial para proyectos de energías renovables, agricultura de precisión, planificación territorial y estudios climáticos. QGIS ofrece herramientas poderosas mediante los complementos GRASS y SAGA GIS para estimar y mapear la radiación solar potencial.

En este blog aprenderás a:

  1. Preparar los datos necesarios.

  2. Ejecutar el análisis de radiación solar.

  3. Interpretar los resultados.

  4. Recalificar y vectorizar los datos.

  5. Automatizar el flujo de trabajo con PyQGIS.


Requisitos

  • QGIS 3.42 o superior

  • Complementos instalados: GRASS GIS, SAGA GIS

  • Un Modelo Digital de Elevación (DEM)


Parte 1: Análisis en QGIS con SAGA

Paso 1: Cargar el DEM

Carga tu DEM en QGIS (por ejemplo: dem.tif).

Paso 2: Ejecutar el Módulo de Radiación

Ve a la Caja de herramientas de procesos > SAGA Next Gen > Terrain Analysis - Lighting > Potential incoming solar radiation.

Parámetros sugeridos:

  • DEM: tu archivo .tif

  • Linke Turbidity Coefficient: 3.0 (valor estándar)

  • Solar Constant: 1367 W/m² (valor estándar)

Ejecuta el análisis. Se generarán varias capas raster:

  • Duration of Insolation

  • Total Insolation

  • Direct Insolation

  • Diffuse Insolation

  • Compare to Flat Terrain

  • Sunrise

  • Sunset

  • Direct to Diffuse Ratio


Parte 2: Interpretación de Resultados

1. Duration of Insolation (duración de insolación, en horas)

  • Rango: 0.5 a 13.5 horas

  • Mayor duración = mayor potencial solar

  • Reclasificación sugerida:

    • Bajo: <6 h

    • Medio: 6–10 h

    • Alto: >10 h

2. Total Insolation (kWh/m²)

  • Energía total combinada directa y difusa.

  • Rango: 0.42 a 7.54

  • Reclasificación:

    • Bajo: <2.5

    • Medio: 2.5–5.0

    • Alto: >5.0

3. Direct Insolation

  • Rango: 0 a 6.98

  • Reclasificación:

    • Bajo: <2.0

    • Medio: 2.0–4.0

    • Alto: >4.0

4. Diffuse Insolation

  • Rango: 0.42 a 0.71

  • Reclasificación:

    • Bajo: <0.5

    • Medio: 0.5–0.6

    • Alto: >0.6

5. Compare to Flat Terrain

  • Relación de radiación comparada con un terreno plano

  • Rango: 0.12 a 1.39

  • 1 = más favorable que plano

6. Sunrise y Sunset (horas)

  • Útiles para evaluar horas de exposición solar.

  • Rango Sunrise: 5.5 a 18.5

  • Rango Sunset: 8 a 18.5

7. Direct to Diffuse Ratio

  • Relación entre radiación directa y difusa

  • Rango: 0 a 13.6


Parte 3: Recalificación y Vectorización

Recalificación en QGIS

  1. Usar Raster Calculator para reclasificar cada capa.

    "Total Insolation" > 5 → 3
    "Total Insolation" BETWEEN 2.5 AND 5 → 2
    "Total Insolation" < 2.5 → 1
    
  2. Aplicar simbología con 3 clases: Bajo (1), Medio (2), Alto (3).

Vectorización

  1. Convertir raster reclasificado a polígono:

    • Herramienta: Raster > Conversion > Polygonize (Raster to Vector)

  2. Crear la leyenda de interpretación:

    • Clase 1 (Bajo): color rojo

    • Clase 2 (Medio): amarillo

    • Clase 3 (Alto): verde


Parte 4: Automatización con PyQGIS

from qgis.core import QgsRasterLayer, QgsProject
from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry
import os

# Configuración de rutas
folder = r'D:/2025/mayo/'
raster_files = {
    'direct_insolation': 'Direct Insolation.tif',
    'diffuse_insolation': 'Diffuse Insolation.tif'
}

# Cargar capas raster
raster_layers = {}
for key, filename in raster_files.items():
    file_path = os.path.join(folder, filename)
    layer = QgsRasterLayer(file_path, key)
    
    if layer.isValid():
        raster_layers[key] = layer
        QgsProject.instance().addMapLayer(layer)
        print(f"✅ Capa cargada: {key}")
    else:
        print(f"❌ Error al cargar: {filename}")

# Verificar capas necesarias
if not all(layer in raster_layers for layer in raster_files.keys()):
    raise Exception("Error: Faltan capas requeridas")

# Configurar entradas del cálculo
entries = []
for name, layer in raster_layers.items():
    entry = QgsRasterCalculatorEntry()
    entry.ref = f'{name}@1'  # Formato requerido: nombre@banda
    entry.raster = layer
    entry.bandNumber = 1
    entries.append(entry)

# Configurar fórmula y parámetros
formula = '"direct_insolation@1" + "diffuse_insolation@1"'
output_path = os.path.join(folder, 'Insolacion_Combinada.tif')
ref_layer = raster_layers['direct_insolation']

# Crear calculadora
calc = QgsRasterCalculator(
    formula,
    output_path,
    'GTiff',
    ref_layer.extent(),
    ref_layer.width(),
    ref_layer.height(),
    entries,
    transformContext=QgsProject.instance().transformContext()
)

# Ejecutar cálculo
result = calc.processCalculation()

# Resultados
if result == 0:
    print(f"✅ Archivo generado: {output_path}")
    # Cargar resultado
    result_layer = QgsRasterLayer(output_path, 'Insolación Total')
    QgsProject.instance().addMapLayer(result_layer)
else:
    print("❌ Error en el cálculo. Verifica:")
    print("- Mismo sistema de coordenadas en ambas capas")
    print("- Mismo tamaño y resolución de píxeles")
    print("- Permisos de escritura en la carpeta")

Conclusión

como resultado se tiene: Los valores de insolación que obtuviste (entre 0.42 y 7) requieren una interpretación en contexto. Te explico cómo analizarlos:

1. Unidades de medida (clave):

  • Valores típicos en archivos de insolación se expresan en:

    • kWh/m²/día (kilowatt-hora por metro cuadrado por día)

    • MJ/m²/día (Megajoules por metro cuadrado por día)

2. Conversión básica:

  • 1 kWh/m²/día = 3.6 MJ/m²/día

  • Ejemplo: 7 kWh/m²/día ≈ 25.2 MJ/m²/día

3. Interpretación práctica:

Valor (kWh/m²/día)Significado
0.42Día muy nublado o zona con sombra
3-5Día promedio en zonas templadas
7Día muy soleado (zonas desérticas/tropicales)

 Este flujo de trabajo te permite generar un análisis completo de radiación solar en QGIS. Puedes usar esta información para identificar zonas óptimas para instalaciones solares, agricultura, y planificación ambiental.