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:
-
Preparar los datos necesarios.
-
Ejecutar el análisis de radiación solar.
-
Interpretar los resultados.
-
Recalificar y vectorizar los datos.
-
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
-
Usar
Raster Calculatorpara reclasificar cada capa."Total Insolation" > 5 → 3 "Total Insolation" BETWEEN 2.5 AND 5 → 2 "Total Insolation" < 2.5 → 1 -
Aplicar simbología con 3 clases: Bajo (1), Medio (2), Alto (3).
Vectorización
-
Convertir raster reclasificado a polígono:
-
Herramienta:
Raster > Conversion > Polygonize (Raster to Vector)
-
-
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.42 | Día muy nublado o zona con sombra |
| 3-5 | Día promedio en zonas templadas |
| 7 | Dí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.
