Diferencia entre revisiones de «Parque eólico en la provincia de León»
(→Generación del Mapa de Ruido del Parque Eólico de Laciana) |
(→Conclusiones) |
||
| (No se muestran 39 ediciones intermedias del mismo usuario) | |||
| Línea 4: | Línea 4: | ||
<big><big>'''Resumen'''</big></big> | <big><big>'''Resumen'''</big></big> | ||
| − | El | + | El presente trabajo tiene como objetivo identificar la localización más adecuada para la instalación de un parque eólico en la provincia de '''León''' considerando tanto los factores favorables como las restricciones del territorio. Para ello, se ha utilizado el software ''QGIS'', una herramienta de ''Sistemas de Información Geográfica (SIG)'', con el fin de integrar y analizar diversos criterios geoespaciales relevantes. |
| − | Por otro lado, se | + | Entre los factores considerados se incluyen la red eléctrica existente, los usos del suelo, la red de carreteras y otras infraestructuras, los cuales se valoran positivamente por facilitar la construcción, el mantenimiento y la evacuación de la energía generada. Por otro lado, se han identificado elementos restrictivos como zonas de especial protección medioambiental, la proximidad a líneas ferroviarias y las zonas catalogadas como '''Bienes de Interés Cultural (BIC)''', que deben preservarse por su valor patrimonial, legal y ambiental, entre otras zonas. |
| − | + | A partir del análisis espacial, se definieron áreas de exclusión y zonas de influencia en torno a estos elementos, superponiendo capas de información para delimitar las áreas potencialmente aptas para la instalación de aerogeneradores. Asimismo, se incorporaron datos del ''IDAE'' sobre la distribución del viento, considerando una altura de '''80 metros''', y se incluyó un mapa de pendientes para descartar zonas con inclinaciones superiores al '''20%'''. | |
| − | + | Como resultado, se identificaron tres localizaciones viables, las cuales fueron evaluadas desde un enfoque técnico y ambiental. El análisis comparativo entre estas alternativas permitirá seleccionar la opción más adecuada para un desarrollo eólico sostenible y eficiente. | |
| Línea 21: | Línea 21: | ||
'''''León''''' tiene un importante potencial eólico, destacando en la generación de energía renovable. En '''2022''', la provincia produjo '''719.061 MWh''' de energía eólica, contribuyendo al '''16,58%''' del consumo energético provincial. La región cuenta con '''299 aerogeneradores''' distribuidos en '''16 parques eólicos''', sumando una potencia instalada de '''439 MW'''. Además, la provincia lidera en energía renovable, con el '''88,7%''' de su generación eléctrica proveniente de fuentes limpias. | '''''León''''' tiene un importante potencial eólico, destacando en la generación de energía renovable. En '''2022''', la provincia produjo '''719.061 MWh''' de energía eólica, contribuyendo al '''16,58%''' del consumo energético provincial. La región cuenta con '''299 aerogeneradores''' distribuidos en '''16 parques eólicos''', sumando una potencia instalada de '''439 MW'''. Además, la provincia lidera en energía renovable, con el '''88,7%''' de su generación eléctrica proveniente de fuentes limpias. | ||
| + | (Ver [[#anexo1|Anexo 1]]) | ||
== Metodología == | == Metodología == | ||
| Línea 36: | Línea 37: | ||
* '''''Núcleos urbanos''''': asentamientos humanos. | * '''''Núcleos urbanos''''': asentamientos humanos. | ||
* '''''Red eléctrica''''': tendidos eléctricos. | * '''''Red eléctrica''''': tendidos eléctricos. | ||
| + | (Ver [[#anexo2|Anexo 2]]) | ||
| − | Se considera que la red de carreteras y la red eléctrica son factores favorables para la ubicación del parque eólico, mientras que las demás capas representan restricciones o limitaciones en su área de influencia. | + | Se considera que la red de carreteras y la red eléctrica (con sus buffers respectivos, ver [[#anexo3|Anexo 3]] ) son factores favorables para la ubicación del parque eólico, mientras que las demás capas representan restricciones o limitaciones en su área de influencia. |
A continuación, se aplicaron zonas de exclusión mediante la herramienta de '''''buffer''''', estableciendo una distancia mínima de seguridad en torno a cada elemento, según su nivel de sensibilidad o impacto. Las distancias utilizadas fueron: | A continuación, se aplicaron zonas de exclusión mediante la herramienta de '''''buffer''''', estableciendo una distancia mínima de seguridad en torno a cada elemento, según su nivel de sensibilidad o impacto. Las distancias utilizadas fueron: | ||
| Línea 43: | Línea 45: | ||
* '''''Núcleos de población''''': 500m para localidades de menos de 1000 habitantes y 2,5 km para localidades de más de 1000 habitantes. | * '''''Núcleos de población''''': 500m para localidades de menos de 1000 habitantes y 2,5 km para localidades de más de 1000 habitantes. | ||
* '''''Espacios protegidos''''': 1 km | * '''''Espacios protegidos''''': 1 km | ||
| − | + | (Ver [[#anexo4|Anexo 4]]) | |
| − | + | ||
Estas zonas de influencia permitieron delimitar las áreas incompatibles con la instalación del parque eólico. | Estas zonas de influencia permitieron delimitar las áreas incompatibles con la instalación del parque eólico. | ||
| + | |||
| + | También se tuvo en cuanto la media de las rachas de viento histórico de la zona, priorizando las zonas con mejores rachas para una mayor eficiencia generativa. (Ver [[#anexo5|Anexo 5]]) | ||
Mediante la herramienta de intersección se superpusieron las distintas capas de influencia, lo que permitió localizar áreas que cumplían simultáneamente con todos los requisitos. Posteriormente, se empleó la operación de diferencia para refinar aún más las zonas viables, eliminando cualquier solapamiento con elementos no deseados. | Mediante la herramienta de intersección se superpusieron las distintas capas de influencia, lo que permitió localizar áreas que cumplían simultáneamente con todos los requisitos. Posteriormente, se empleó la operación de diferencia para refinar aún más las zonas viables, eliminando cualquier solapamiento con elementos no deseados. | ||
| − | Finalmente, se generó una capa consolidada con tres ubicaciones potenciales para la instalación del parque eólico en León. Estas zonas fueron analizadas teniendo en cuenta la pendiente del terreno, su superficie total, y su cercanía a tendidos eléctricos, carreteras, y núcleos poblacionales entre otras cosas, y, posteriormente, se evaluó su recurso eólico a través del mapa de vientos del '''''IDAE''''' a una altura de 80 metros. Tras comparar las condiciones de cada zona, se seleccionó el punto más adecuado teniendo en cuentas las condiciones expuestas anteriormente. | + | Finalmente, se generó una capa consolidada con tres ubicaciones potenciales para la instalación del parque eólico en León. Estas zonas fueron analizadas teniendo en cuenta la pendiente del terreno, su superficie total, y su cercanía a tendidos eléctricos, carreteras, y núcleos poblacionales entre otras cosas, y, posteriormente, se evaluó su recurso eólico a través del mapa de vientos del '''''IDAE''''' a una altura de 80 metros. Tras comparar las condiciones de cada zona, se seleccionó el punto más adecuado teniendo en cuentas las condiciones expuestas anteriormente. (Ver [[#anexo6|Anexo 6]]) |
| − | |||
| − | + | ==Generación del Mapa de Ruido del Parque Eólico de Laciana== | |
| − | + | ||
| − | + | ||
| − | + | ||
| + | A continuación, se describe detalladamente el proceso seguido para obtener el mapa de ruido total generado por los aerogeneradores proyectados en la zona de Laciana, utilizando herramientas '''SIG en QGIS''', y programación en '''Python'''. | ||
| − | + | ''Las fórmulas empleadas para el cálculo del nivel sonoro y la combinación de múltiples emisores se basan en los principios de propagación esférica en campo libre, con una emisión constante del foco emisor de nivel '''104 dB''', valor que se toma como referencia del ruido generado por un aerogenerador de similares características. '' | |
| + | '''1. Ubicación inicial de los aerogeneradores''' | ||
Los aerogeneradores se colocaron de forma estratégica en zonas elevadas, aprovechando el '''Modelo Digital del Terreno (MDT)''' de la zona como referencia visual. | Los aerogeneradores se colocaron de forma estratégica en zonas elevadas, aprovechando el '''Modelo Digital del Terreno (MDT)''' de la zona como referencia visual. | ||
| Línea 77: | Línea 79: | ||
A partir de una capa vectorial con todos los aerogeneradores '''''(.shp multipunto)''''', se generaron '''22''' capas individuales, una por cada punto. | A partir de una capa vectorial con todos los aerogeneradores '''''(.shp multipunto)''''', se generaron '''22''' capas individuales, una por cada punto. | ||
Esto se hizo para poder realizar el modelado acústico de cada aerogenerador de forma independiente, manteniendo control sobre su emisión individual. | Esto se hizo para poder realizar el modelado acústico de cada aerogenerador de forma independiente, manteniendo control sobre su emisión individual. | ||
| − | + | Esto se podría haber hecho capa por capa, o con capa multipunto para después separarlas, siendo ésta última la más eficiente. | |
| + | Para la separación de las capas, puesto que son 22 y que el tiempo que se tardaría en exportar capa por capa sería muy extenso (y en caso de querer extender el estudio a más aerogeneradores) se ha decidido implementar un código en '''Python''' para automatizar el proceso, pudiendo generar las capas individuales a través de una capa '''.shp multipunto''' y un ejecutable. El código que se utilizó se adjunta: | ||
| − | |||
| + | <div style="font-size: 85%;"> | ||
| + | <syntaxhighlight lang="python"> | ||
| + | import os | ||
| + | # Ruta de salida | ||
| + | output_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores" | ||
| + | # Crear carpeta si no existe | ||
| + | if not os.path.exists(output_folder): | ||
| + | os.makedirs(output_folder) | ||
| − | + | # Obtener la capa por nombre | |
| + | layer = QgsProject.instance().mapLayersByName("aerogeneradores_reproyectado")[0] | ||
| + | if not layer: | ||
| + | print("La capa 'aerogeneradores_reproyectado' no se encontró.") | ||
| + | else: | ||
| + | # Obtener tipo de geometría como texto | ||
| + | geometry_type = layer.wkbType() | ||
| + | geometry_str = layer.geometryType() | ||
| + | |||
| + | if geometry_str == QgsWkbTypes.PointGeometry: | ||
| + | geom_text = "Point" | ||
| + | elif geometry_str == QgsWkbTypes.LineGeometry: | ||
| + | geom_text = "LineString" | ||
| + | elif geometry_str == QgsWkbTypes.PolygonGeometry: | ||
| + | geom_text = "Polygon" | ||
| + | else: | ||
| + | print("Tipo de geometría no soportado.") | ||
| + | geom_text = None | ||
| + | |||
| + | if geom_text: | ||
| + | for i, feature in enumerate(layer.getFeatures(), start=1): | ||
| + | # Crear capa de memoria con el tipo correcto | ||
| + | crs = layer.crs().authid() | ||
| + | temp_layer = QgsVectorLayer(f"{geom_text}?crs={crs}", f"aerogenerador{i}", "memory") | ||
| + | temp_layer_data = temp_layer.dataProvider() | ||
| + | |||
| + | # Copiar campos y agregar la feature | ||
| + | temp_layer_data.addAttributes(layer.fields()) | ||
| + | temp_layer.updateFields() | ||
| + | temp_layer_data.addFeature(feature) | ||
| + | |||
| + | # Definir ruta y opciones de guardado | ||
| + | output_path = os.path.join(output_folder, f"aerogenerador{i}.shp") | ||
| + | options = QgsVectorFileWriter.SaveVectorOptions() | ||
| + | options.driverName = "ESRI Shapefile" | ||
| + | options.fileEncoding = "UTF-8" | ||
| + | |||
| + | result, error_message = QgsVectorFileWriter.writeAsVectorFormatV2( | ||
| + | temp_layer, | ||
| + | output_path, | ||
| + | QgsProject.instance().transformContext(), | ||
| + | options | ||
| + | ) | ||
| + | |||
| + | if result != QgsVectorFileWriter.NoError: | ||
| + | print(f"Error al guardar aerogenerador{i}: {error_message}") | ||
| + | else: | ||
| + | print(f"Guardado: {output_path}") | ||
| + | |||
| + | print("¡Exportación completa!") | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | '''3. Rasterización individual''' | ||
Cada punto se rasterizó de forma que: | Cada punto se rasterizó de forma que: | ||
| Línea 116: | Línea 183: | ||
| − | + | <div style="font-size: 85%;"> | |
| + | <syntaxhighlight lang="python"> | ||
| + | import os | ||
| + | from qgis.core import QgsProject | ||
| + | from qgis import processing | ||
| + | # Carpeta con los shapefiles individuales (aerogeneradores) | ||
| + | input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores" | ||
| + | output_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out" | ||
| + | os.makedirs(output_folder, exist_ok=True) | ||
| + | # Cargar la capa base para usar su extensión (debe estar cargada en QGIS) | ||
| + | base_layer = QgsProject.instance().mapLayersByName("posibles emplazamientos")[0] | ||
| + | extent = base_layer.extent() | ||
| + | extent_str = f"{extent.xMinimum()},{extent.xMaximum()},{extent.yMinimum()},{extent.yMaximum()}" | ||
| + | # Resolución deseada (tamaño del píxel) | ||
| + | res = 50 | ||
| + | # Rasterizar cada shapefile individual con valor 104 | ||
| + | for filename in os.listdir(input_folder): | ||
| + | if filename.endswith(".shp"): | ||
| + | shp_path = os.path.join(input_folder, filename) | ||
| + | name = os.path.splitext(filename)[0] | ||
| − | + | raster_path = os.path.join(output_folder, f"{name}.tif") | |
| + | processing.run("gdal:rasterize", { | ||
| + | 'INPUT': shp_path, | ||
| + | 'FIELD': None, # No usaremos campo | ||
| + | 'BURN': 104, # Valor constante a asignar | ||
| + | 'UNITS': 1, # Unidades georreferenciadas | ||
| + | 'WIDTH': res, | ||
| + | 'HEIGHT': res, | ||
| + | 'EXTENT': extent_str, # Coincide con capa base | ||
| + | 'NODATA': 0, # Valor para píxeles vacíos | ||
| + | 'DATA_TYPE': 5, # Float32 o usa 1 (Byte) si prefieres | ||
| + | 'INIT': None, | ||
| + | 'INVERT': False, | ||
| + | 'EXTRA': '', | ||
| + | 'OUTPUT': raster_path | ||
| + | }) | ||
| + | print(f"Raster guardado: {raster_path}") | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | '''4. Cálculo de la proximidad (distancia)''' | ||
Utilizando el algoritmo '''“Proximidad (distancia)” de GDAL''', se generaron mapas que indican la distancia desde la celda emisora (valor '''104''') al resto del área. | Utilizando el algoritmo '''“Proximidad (distancia)” de GDAL''', se generaron mapas que indican la distancia desde la celda emisora (valor '''104''') al resto del área. | ||
| Línea 141: | Línea 253: | ||
| − | + | <div style="text-align: center;"> | |
'''EJEMPLO DE AEROGENERADOR 1''' | '''EJEMPLO DE AEROGENERADOR 1''' | ||
| − | + | </div> | |
| − | + | ||
[[Archivo:ejemplo_aero1.jpg|150px|centro|Ventana QGis]] | [[Archivo:ejemplo_aero1.jpg|150px|centro|Ventana QGis]] | ||
| Línea 155: | Línea 266: | ||
| − | + | <div style="font-size: 85%;"> | |
| + | <syntaxhighlight lang="python"> | ||
| + | import os | ||
| + | import processing | ||
| + | # Carpeta con los rásteres de entrada | ||
| + | input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out" | ||
| + | output_folder = os.path.join(input_folder, "proximidad") | ||
| + | # Parámetros | ||
| + | valor_central = 104 # el valor que tiene el punto en el centro | ||
| + | max_dist = 5000 # distancia máxima | ||
| + | dist_units = 0 # 0 = metros | ||
| + | # Crear carpeta de salida | ||
| + | if not os.path.exists(output_folder): | ||
| + | os.makedirs(output_folder) | ||
| − | + | # Proximidad desde cada punto | |
| + | for file in os.listdir(input_folder): | ||
| + | if file.endswith(".tif"): | ||
| + | input_path = os.path.join(input_folder, file) | ||
| + | output_path = os.path.join(output_folder, file.replace(".tif", "_prox.tif")) | ||
| + | processing.run("gdal:proximity", { | ||
| + | 'INPUT': input_path, | ||
| + | 'BAND': 1, | ||
| + | 'VALUES': [valor_central], # solo desde el valor 104 | ||
| + | 'DISTUNITS': dist_units, | ||
| + | 'MAXDIST': max_dist, | ||
| + | 'NODATA': 0, | ||
| + | 'REPLACE': 0, | ||
| + | 'OPTIONS': '', | ||
| + | 'EXTRA': '', | ||
| + | 'OUTPUT': output_path | ||
| + | }) | ||
| + | |||
| + | print(f"Proximidad generada: {output_path}") | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | '''5. Cálculo del nivel sonoro individual''' | ||
Se aplicó la fórmula de atenuación acústica por distancia: | Se aplicó la fórmula de atenuación acústica por distancia: | ||
| Línea 184: | Línea 335: | ||
| − | + | <div style="font-size: 85%;"> | |
| + | <syntaxhighlight lang="python"> | ||
| + | import os | ||
| + | from qgis.core import QgsRasterLayer | ||
| + | from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry | ||
| + | # Carpetas | ||
| + | input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out\proximidad " | ||
| + | output_folder = os.path.join(input_folder, "ruido") | ||
| + | # Parámetros | ||
| + | nivel_emision = 104 | ||
| + | crs = 'EPSG:25830' | ||
| − | + | # Crear carpeta de salida | |
| + | if not os.path.exists(output_folder): | ||
| + | os.makedirs(output_folder) | ||
| + | for file in os.listdir(input_folder): | ||
| + | if file.endswith(".tif"): | ||
| + | input_path = os.path.join(input_folder, file) | ||
| + | output_path = os.path.join(output_folder, file.replace(".tif", "_ruido.tif")) | ||
| + | |||
| + | # Cargar capa | ||
| + | layer = QgsRasterLayer(input_path, "distancia") | ||
| + | if not layer.isValid(): | ||
| + | print(f"Error al cargar: {file}") | ||
| + | continue | ||
| + | |||
| + | # Crear entrada para la calculadora | ||
| + | entry = QgsRasterCalculatorEntry() | ||
| + | entry.ref = 'distancia@1' | ||
| + | entry.raster = layer | ||
| + | entry.bandNumber = 1 | ||
| + | |||
| + | # Fórmula con protección para distancias = 0 | ||
| + | formula = f'({nivel_emision} - 20 * log10(distancia@1)) * (distancia@1 > 0)' | ||
| + | |||
| + | # Ejecutar cálculo | ||
| + | calc = QgsRasterCalculator( | ||
| + | formula, | ||
| + | output_path, | ||
| + | 'GTiff', | ||
| + | layer.extent(), | ||
| + | layer.width(), | ||
| + | layer.height(), | ||
| + | [entry] | ||
| + | ) | ||
| + | |||
| + | result = calc.processCalculation() | ||
| + | |||
| + | if result == 0: | ||
| + | print(f"Ruido generado: {output_path}") | ||
| + | else: | ||
| + | print(f"Error al calcular ruido para {file}") | ||
| + | </syntaxhighlight> | ||
| + | </div> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | '''6. Combinación logarítmica del ruido total''' | ||
Finalmente, se generó el mapa de ruido total combinando todos los mapas individuales mediante la fórmula: | Finalmente, se generó el mapa de ruido total combinando todos los mapas individuales mediante la fórmula: | ||
| Línea 203: | Línea 410: | ||
'''7. Visualización y análisis''' | '''7. Visualización y análisis''' | ||
| − | |||
El resultado final es un mapa ráster con valores de nivel sonoro total en '''dB(A)''', que puede ser: | El resultado final es un mapa ráster con valores de nivel sonoro total en '''dB(A)''', que puede ser: | ||
| Línea 216: | Línea 422: | ||
| − | 8. Evaluación progresiva del impacto acústico y reducción del número de aerogeneradores | + | '''8. Evaluación progresiva del impacto acústico y reducción del número de aerogeneradores''' |
| − | + | ||
Una vez obtenido el primer mapa de ruido total del parque eólico con los '''22''' aerogeneradores propuestos inicialmente, se generó una representación gráfica de los niveles de ruido en el territorio mediante curvas de nivel (isófonas) cada '''5 dB(A)'''. | Una vez obtenido el primer mapa de ruido total del parque eólico con los '''22''' aerogeneradores propuestos inicialmente, se generó una representación gráfica de los niveles de ruido en el territorio mediante curvas de nivel (isófonas) cada '''5 dB(A)'''. | ||
| − | Estas isófonas permitieron identificar las zonas más afectadas por el ruido y facilitaban una lectura rápida del alcance espacial del impacto acústico. | + | Estas isófonas permitieron identificar las zonas más afectadas por el ruido y facilitaban una lectura rápida del alcance espacial del impacto acústico. (Ver [[#anexo8|Anexo 8]]) |
A partir de esta base inicial, se procedió a realizar una evaluación progresiva del impacto, descartando determinados aerogeneradores y observando cómo variaba la propagación sonora total. Las etapas fueron las siguientes: | A partir de esta base inicial, se procedió a realizar una evaluación progresiva del impacto, descartando determinados aerogeneradores y observando cómo variaba la propagación sonora total. Las etapas fueron las siguientes: | ||
| Línea 238: | Línea 443: | ||
🔹 Tercera reducción: | 🔹 Tercera reducción: | ||
| − | ::Viendo que los niveles de ruido seguían siendo elevados en ciertas zonas críticas, se eliminaron además los aerogeneradores 1, 2, 12 y 22, resultando en 9 | + | ::Viendo que los niveles de ruido seguían siendo elevados en ciertas zonas críticas, se eliminaron además los aerogeneradores 1, 2, 12 y 22, resultando en 9 aerogeneradores restantes. |
::Se volvió a generar el mapa total y las isófonas para esta configuración. | ::Se volvió a generar el mapa total y las isófonas para esta configuración. | ||
🔹 Estrategia alternativa: eliminación por criterio espacial | 🔹 Estrategia alternativa: eliminación por criterio espacial | ||
| − | ::En paralelo, se propuso una segunda vía de actuación. En lugar de ir eliminando según el nivel sonoro resultante, se atacó el problema desde el planteamiento inicial, | + | ::En paralelo, se propuso una segunda vía de actuación. En lugar de ir eliminando según el nivel sonoro resultante, se atacó el problema desde el planteamiento inicial, retirando directamente los 9 aerogeneradores más periféricos, identificados como los que más extendían la huella acústica. |
| − | Estos fueron: 3, 10, 11, 13, 14, 15, 20, 21 y 22. | + | Estos fueron: 3, 10, 11, 13, 14, 15, 20, 21 y 22. (Ver [[#anexo9|Anexo 9]]) |
| + | |||
| + | |||
| + | Finalmente, se ha optado por ésta última distribución, con un total de 13 aerogeneradores. (Ver [[#anexo10|Anexo 10]]) | ||
== Conclusiones == | == Conclusiones == | ||
| − | |||
| − | + | Tras un análisis exhaustivo con herramientas '''SIG''', se ha identificado una ubicación óptima para el parque eólico en la comarca de ''Laciana'', dentro de la provincia de ''León''. Esta zona fue seleccionada por cumplir con los criterios técnicos, ambientales y logísticos establecidos: se encuentra a menos de '''5 km''' de líneas eléctricas, a una distancia segura de núcleos de población '''(>2,5 km)''' y fuera de áreas de protección ambiental o patrimonial. | |
| + | Entre las tres alternativas analizadas, esta opción '''(92.79 km²)''' presentó la mejor combinación de potencial eólico (más de '''7 m/s a 80 m''' de altura, según datos del ''IDAE''), accesibilidad por carretera, y una pendiente del terreno inferior al '''20%''', facilitando tanto la construcción como el mantenimiento del parque. | ||
| − | + | Además, se realizó un análisis de impacto acústico con una configuración inicial de 22 aerogeneradores '''Vestas V150-4.5 MW'''. Se evidenció un nivel de ruido elevado '''(>50 dB(A))''' en algunas áreas sensibles, por lo que se aplicó una estrategia de reducción progresiva y espacial, resultando en una configuración final de 13 aerogeneradores, que permitió reducir un 35% el área expuesta a niveles críticos de ruido sin comprometer de forma significativa la producción energética, que se estima en ''58,5 MW'' de potencia instalada. | |
| + | En futuras fases se recomienda realizar estudios complementarios de impacto ambiental, análisis geotécnico del terreno y evaluación económica detallada para confirmar la viabilidad completa del proyecto. | ||
| + | == Anejos == | ||
| − | |||
| − | |||
| − | |||
| + | <span id="anexo1"></span> | ||
| + | [[Archivo:mapaeolico.JPEG|thumb|700px|centro|'''Figura 1.''' '''Mapa de la situación inicial del área propuesta para el parque eólico en León.''' | ||
| + | ]] | ||
| − | [[Archivo:mapaeolico2.JPEG|700px|centro| | + | <span id="anexo2"></span> |
| − | '''Figura 2.''' '''Mapa de la red de carreteras y líneas eléctricas en la provincia de León.''' | + | [[Archivo:mapaeolico2.JPEG|thumb|700px|centro|'''Figura 2.''' '''Mapa de la red de carreteras y líneas eléctricas en la provincia de León.''' |
| − | + | ]] | |
| + | <span id="anexo3"></span> | ||
| + | [[Archivo:mapaeolico3.JPEG|thumb|700px|centro|'''Figura 3.''' '''Zonas con potencial atendiendo a la cercanía a la red eléctrica y a la red de carreteras.''' | ||
| + | ]] | ||
| + | |||
| + | |||
| + | |||
| + | <span id="anexo4"></span> | ||
| + | [[Archivo:mapaeolico5.JPEG|thumb|700px|centro|'''Figura 4.''' '''Zonas de exclusión según criterios de restricción normativa y ambiental.''' | ||
| + | ]] | ||
| + | |||
| + | |||
| + | <span id="anexo5"></span> | ||
| + | [[Archivo:mapaeolico66.JPEG|thumb|700px|centro|'''Figura 5.''' '''Mapa del viento en la provincia de León: velocidad media predominante.''' | ||
| + | ]] | ||
| + | |||
| + | |||
| + | <span id="anexo6"></span> | ||
| + | [[Archivo:mapaeolico7.JPEG|thumb|700px|centro|'''Figura 6.''' '''Posibles emplazamientos atendiendo al recurso eólico medio y a la exclusión de zonas conflictivas.''']] | ||
| + | |||
| + | |||
| + | <span id="anexo7"></span> | ||
| + | [[Archivo:mapaeolico8.JPEG|thumb|700px|centro|'''Figura 7.''' '''Mapa detallado de los posibles emplazamientos seleccionados.''' ]] | ||
| + | |||
| + | '''Se ha optado, finalmente, por la opción de mayor extensión superficial.''' | ||
| + | |||
| + | |||
| + | <span id="anexo8"></span> | ||
| + | [[Archivo:parqueeolico22.jpg|thumb|700px|centro|'''Figura 8.''' '''Mapa detallado de ruido de la alternativa de 22 aerogeneradores.''' ]] | ||
| + | |||
| − | |||
| − | |||
| − | |||
| + | <span id="anexo9"></span> | ||
| + | [[Archivo:Parqueeloico13 22.jpg|thumb|700px|centro|'''Figura 9.''' '''Mapa de comparación de las diferentes entre las alternativas de 22 aerogeneradores y la de 13, con su disminución en la afección acústica.''']] | ||
| − | |||
| − | |||
| − | |||
| − | [[Archivo: | + | <span id="anexo10"></span> |
| − | '''Figura | + | [[Archivo:parqueeolico13.jpg|thumb|left|590px|'''Figura 10.''' '''Mapa de ruido de la solución final''']] [[Archivo:Parque final.jpg|thumb|right|590px|'''Figura 11.''' '''Mapa detallado de la solución final.''']] |
| − | ''' | + | |
| Línea 289: | Línea 523: | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
[[Categoría:Sistemas de Información Geográfica Aplicados a la Ingeniería Civil]] | [[Categoría:Sistemas de Información Geográfica Aplicados a la Ingeniería Civil]] | ||
[[Categoría:SIGAIC_24/25]] | [[Categoría:SIGAIC_24/25]] | ||
Revisión actual del 11:40 28 may 2025
| Trabajo sobre SIG | |
|---|---|
| Título | Parque eólico en la provincia de León |
| Autores | Carlos Cerezales García Nacira Faraji Bahja Abdelali Zariohi Boutaleb |
| Asignatura | Sistemas de Información Geográfica Aplicados a la Ingeniería Civil |
| Curso | Curso 24/25 |
| Este artículo ha sido escrito por estudiantes como parte de su evaluación en la asignatura | |
Resumen
El presente trabajo tiene como objetivo identificar la localización más adecuada para la instalación de un parque eólico en la provincia de León considerando tanto los factores favorables como las restricciones del territorio. Para ello, se ha utilizado el software QGIS, una herramienta de Sistemas de Información Geográfica (SIG), con el fin de integrar y analizar diversos criterios geoespaciales relevantes.
Entre los factores considerados se incluyen la red eléctrica existente, los usos del suelo, la red de carreteras y otras infraestructuras, los cuales se valoran positivamente por facilitar la construcción, el mantenimiento y la evacuación de la energía generada. Por otro lado, se han identificado elementos restrictivos como zonas de especial protección medioambiental, la proximidad a líneas ferroviarias y las zonas catalogadas como Bienes de Interés Cultural (BIC), que deben preservarse por su valor patrimonial, legal y ambiental, entre otras zonas.
A partir del análisis espacial, se definieron áreas de exclusión y zonas de influencia en torno a estos elementos, superponiendo capas de información para delimitar las áreas potencialmente aptas para la instalación de aerogeneradores. Asimismo, se incorporaron datos del IDAE sobre la distribución del viento, considerando una altura de 80 metros, y se incluyó un mapa de pendientes para descartar zonas con inclinaciones superiores al 20%.
Como resultado, se identificaron tres localizaciones viables, las cuales fueron evaluadas desde un enfoque técnico y ambiental. El análisis comparativo entre estas alternativas permitirá seleccionar la opción más adecuada para un desarrollo eólico sostenible y eficiente.
Contenido
1 Introducción
La provincia de León, ubicada en el noroeste de Castilla y León, presenta condiciones geográficas y climáticas favorables para el aprovechamiento de la energía eólica. Su orografía, con montañas como los Montes de León y la Cordillera Cantábrica, y grandes llanuras en la Meseta Norte, facilita la instalación de parques eólicos en zonas elevadas donde los vientos son más constantes. El clima continental, con inviernos fríos y veranos calurosos, favorece la presencia de vientos estacionales que pueden ser aprovechados para la generación de energía.
León tiene un importante potencial eólico, destacando en la generación de energía renovable. En 2022, la provincia produjo 719.061 MWh de energía eólica, contribuyendo al 16,58% del consumo energético provincial. La región cuenta con 299 aerogeneradores distribuidos en 16 parques eólicos, sumando una potencia instalada de 439 MW. Además, la provincia lidera en energía renovable, con el 88,7% de su generación eléctrica proveniente de fuentes limpias. (Ver Anexo 1)
2 Metodología
Para determinar las ubicaciones más apropiadas para la instalación de un parque eólico en la provincia de León, se ha llevado a cabo un análisis espacial riguroso con el apoyo de herramientas SIG (Sistemas de Información Geográfica), concretamente utilizando QGIS. El objetivo ha sido identificar zonas libres de conflicto que cumplan con criterios técnicos, ambientales y sociales.
Las capas cartográficas consideradas incluyen: espacios naturales protegidos (parques naturales, paisajes protegidos, monumentos naturales y humedales), zonas de especial protección (ZEC, LIC y ZEPA), núcleos de población, infraestructura viaria (autopistas, autovías y carreteras autonómicas) y líneas eléctricas. Todos estos datos fueron obtenidos a través del Instituto Geográfico Nacional (IGN), en su mayoría en formato vectorial BTN100, salvo el mapa de pendientes, que se utilizó en formato ráster.
En primer lugar, se agruparon las capas con características similares mediante la herramienta de unión, repitiendo el proceso hasta consolidar cuatro grandes categorías temáticas:
- Red de carreteras: autopistas, autovías y carreteras autonómicas y provinciales.
- Red ferroviaria: red de ancho ibérico(1668mm), red de ancho internacional(1435mm) y red de ancho métrico(1000mm).
- Espacios protegidos: paisajes y monumentos naturales, humedales, ZEC, LIC y ZEPA, patrimonio de la humanidad (UNESCO) y zonas BIC (bien de interés cultural).
- Núcleos urbanos: asentamientos humanos.
- Red eléctrica: tendidos eléctricos.
(Ver Anexo 2)
Se considera que la red de carreteras y la red eléctrica (con sus buffers respectivos, ver Anexo 3 ) son factores favorables para la ubicación del parque eólico, mientras que las demás capas representan restricciones o limitaciones en su área de influencia.
A continuación, se aplicaron zonas de exclusión mediante la herramienta de buffer, estableciendo una distancia mínima de seguridad en torno a cada elemento, según su nivel de sensibilidad o impacto. Las distancias utilizadas fueron:
- Núcleos de población: 500m para localidades de menos de 1000 habitantes y 2,5 km para localidades de más de 1000 habitantes.
- Espacios protegidos: 1 km
(Ver Anexo 4)
Estas zonas de influencia permitieron delimitar las áreas incompatibles con la instalación del parque eólico.
También se tuvo en cuanto la media de las rachas de viento histórico de la zona, priorizando las zonas con mejores rachas para una mayor eficiencia generativa. (Ver Anexo 5)
Mediante la herramienta de intersección se superpusieron las distintas capas de influencia, lo que permitió localizar áreas que cumplían simultáneamente con todos los requisitos. Posteriormente, se empleó la operación de diferencia para refinar aún más las zonas viables, eliminando cualquier solapamiento con elementos no deseados.
Finalmente, se generó una capa consolidada con tres ubicaciones potenciales para la instalación del parque eólico en León. Estas zonas fueron analizadas teniendo en cuenta la pendiente del terreno, su superficie total, y su cercanía a tendidos eléctricos, carreteras, y núcleos poblacionales entre otras cosas, y, posteriormente, se evaluó su recurso eólico a través del mapa de vientos del IDAE a una altura de 80 metros. Tras comparar las condiciones de cada zona, se seleccionó el punto más adecuado teniendo en cuentas las condiciones expuestas anteriormente. (Ver Anexo 6)
3 Generación del Mapa de Ruido del Parque Eólico de Laciana
A continuación, se describe detalladamente el proceso seguido para obtener el mapa de ruido total generado por los aerogeneradores proyectados en la zona de Laciana, utilizando herramientas SIG en QGIS, y programación en Python.
Las fórmulas empleadas para el cálculo del nivel sonoro y la combinación de múltiples emisores se basan en los principios de propagación esférica en campo libre, con una emisión constante del foco emisor de nivel 104 dB, valor que se toma como referencia del ruido generado por un aerogenerador de similares características.
1. Ubicación inicial de los aerogeneradores
Los aerogeneradores se colocaron de forma estratégica en zonas elevadas, aprovechando el Modelo Digital del Terreno (MDT) de la zona como referencia visual. En esta etapa no se ha considerado la dirección dominante del viento, por tratarse de una localización preliminar enfocada en la generación del modelo acústico.
2. Separación de la capa de aerogeneradores
A partir de una capa vectorial con todos los aerogeneradores (.shp multipunto), se generaron 22 capas individuales, una por cada punto. Esto se hizo para poder realizar el modelado acústico de cada aerogenerador de forma independiente, manteniendo control sobre su emisión individual. Esto se podría haber hecho capa por capa, o con capa multipunto para después separarlas, siendo ésta última la más eficiente.
Para la separación de las capas, puesto que son 22 y que el tiempo que se tardaría en exportar capa por capa sería muy extenso (y en caso de querer extender el estudio a más aerogeneradores) se ha decidido implementar un código en Python para automatizar el proceso, pudiendo generar las capas individuales a través de una capa .shp multipunto y un ejecutable. El código que se utilizó se adjunta:
import os
# Ruta de salida
output_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores"
# Crear carpeta si no existe
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# Obtener la capa por nombre
layer = QgsProject.instance().mapLayersByName("aerogeneradores_reproyectado")[0]
if not layer:
print("La capa 'aerogeneradores_reproyectado' no se encontró.")
else:
# Obtener tipo de geometría como texto
geometry_type = layer.wkbType()
geometry_str = layer.geometryType()
if geometry_str == QgsWkbTypes.PointGeometry:
geom_text = "Point"
elif geometry_str == QgsWkbTypes.LineGeometry:
geom_text = "LineString"
elif geometry_str == QgsWkbTypes.PolygonGeometry:
geom_text = "Polygon"
else:
print("Tipo de geometría no soportado.")
geom_text = None
if geom_text:
for i, feature in enumerate(layer.getFeatures(), start=1):
# Crear capa de memoria con el tipo correcto
crs = layer.crs().authid()
temp_layer = QgsVectorLayer(f"{geom_text}?crs={crs}", f"aerogenerador{i}", "memory")
temp_layer_data = temp_layer.dataProvider()
# Copiar campos y agregar la feature
temp_layer_data.addAttributes(layer.fields())
temp_layer.updateFields()
temp_layer_data.addFeature(feature)
# Definir ruta y opciones de guardado
output_path = os.path.join(output_folder, f"aerogenerador{i}.shp")
options = QgsVectorFileWriter.SaveVectorOptions()
options.driverName = "ESRI Shapefile"
options.fileEncoding = "UTF-8"
result, error_message = QgsVectorFileWriter.writeAsVectorFormatV2(
temp_layer,
output_path,
QgsProject.instance().transformContext(),
options
)
if result != QgsVectorFileWriter.NoError:
print(f"Error al guardar aerogenerador{i}: {error_message}")
else:
print(f"Guardado: {output_path}")
print("¡Exportación completa!")
3. Rasterización individual
Cada punto se rasterizó de forma que:
- • Se asignó un valor 104 dB solo a la celda que contiene el punto
- • El resto del raster permanece como NoData
- • Todos los rásteres se generaron con la misma extensión, resolución y proyección, tomando como referencia una capa de delimitación (delimitacion.shp) del área de estudio.
Esto asegura una correcta alineación entre todos los rásteres para su posterior procesamiento conjunto.
Para la rasterización también se utilizó un código de Python para llevarlo a cabo más ágilmente:
import os
from qgis.core import QgsProject
from qgis import processing
# Carpeta con los shapefiles individuales (aerogeneradores)
input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores"
output_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out"
os.makedirs(output_folder, exist_ok=True)
# Cargar la capa base para usar su extensión (debe estar cargada en QGIS)
base_layer = QgsProject.instance().mapLayersByName("posibles emplazamientos")[0]
extent = base_layer.extent()
extent_str = f"{extent.xMinimum()},{extent.xMaximum()},{extent.yMinimum()},{extent.yMaximum()}"
# Resolución deseada (tamaño del píxel)
res = 50
# Rasterizar cada shapefile individual con valor 104
for filename in os.listdir(input_folder):
if filename.endswith(".shp"):
shp_path = os.path.join(input_folder, filename)
name = os.path.splitext(filename)[0]
raster_path = os.path.join(output_folder, f"{name}.tif")
processing.run("gdal:rasterize", {
'INPUT': shp_path,
'FIELD': None, # No usaremos campo
'BURN': 104, # Valor constante a asignar
'UNITS': 1, # Unidades georreferenciadas
'WIDTH': res,
'HEIGHT': res,
'EXTENT': extent_str, # Coincide con capa base
'NODATA': 0, # Valor para píxeles vacíos
'DATA_TYPE': 5, # Float32 o usa 1 (Byte) si prefieres
'INIT': None,
'INVERT': False,
'EXTRA': '',
'OUTPUT': raster_path
})
print(f"Raster guardado: {raster_path}")
4. Cálculo de la proximidad (distancia)
Utilizando el algoritmo “Proximidad (distancia)” de GDAL, se generaron mapas que indican la distancia desde la celda emisora (valor 104) al resto del área.
- • Se estableció un radio máximo de 5000 metros
- • La unidad fue el metro
- • El resultado son rásteres con valores de distancia georreferenciada desde cada aerogenerador al resto del territorio
EJEMPLO DE AEROGENERADOR 1
También se hizo este paso con programas de Python, código que abajo se detalla:
import os
import processing
# Carpeta con los rásteres de entrada
input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out"
output_folder = os.path.join(input_folder, "proximidad")
# Parámetros
valor_central = 104 # el valor que tiene el punto en el centro
max_dist = 5000 # distancia máxima
dist_units = 0 # 0 = metros
# Crear carpeta de salida
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# Proximidad desde cada punto
for file in os.listdir(input_folder):
if file.endswith(".tif"):
input_path = os.path.join(input_folder, file)
output_path = os.path.join(output_folder, file.replace(".tif", "_prox.tif"))
processing.run("gdal:proximity", {
'INPUT': input_path,
'BAND': 1,
'VALUES': [valor_central], # solo desde el valor 104
'DISTUNITS': dist_units,
'MAXDIST': max_dist,
'NODATA': 0,
'REPLACE': 0,
'OPTIONS': '',
'EXTRA': '',
'OUTPUT': output_path
})
print(f"Proximidad generada: {output_path}")
5. Cálculo del nivel sonoro individual
Se aplicó la fórmula de atenuación acústica por distancia:
Esta operación se realizó en QGIS mediante la calculadora raster, utilizando el ráster de distancia como entrada (d).
El resultado es un mapa por aerogenerador con el nivel sonoro en dB(A) para cada celda, considerando su distancia al foco emisor.
El cálculo del ruido también se llevó a cabo con un código de Python, que abajo se detalla
import os
from qgis.core import QgsRasterLayer
from qgis.analysis import QgsRasterCalculator, QgsRasterCalculatorEntry
# Carpetas
input_folder = r"D:\QGIS Trabajo SIG\qgis\Nuevo\aerogeneradores\raster_out\proximidad "
output_folder = os.path.join(input_folder, "ruido")
# Parámetros
nivel_emision = 104
crs = 'EPSG:25830'
# Crear carpeta de salida
if not os.path.exists(output_folder):
os.makedirs(output_folder)
for file in os.listdir(input_folder):
if file.endswith(".tif"):
input_path = os.path.join(input_folder, file)
output_path = os.path.join(output_folder, file.replace(".tif", "_ruido.tif"))
# Cargar capa
layer = QgsRasterLayer(input_path, "distancia")
if not layer.isValid():
print(f"Error al cargar: {file}")
continue
# Crear entrada para la calculadora
entry = QgsRasterCalculatorEntry()
entry.ref = 'distancia@1'
entry.raster = layer
entry.bandNumber = 1
# Fórmula con protección para distancias = 0
formula = f'({nivel_emision} - 20 * log10(distancia@1)) * (distancia@1 > 0)'
# Ejecutar cálculo
calc = QgsRasterCalculator(
formula,
output_path,
'GTiff',
layer.extent(),
layer.width(),
layer.height(),
[entry]
)
result = calc.processCalculation()
if result == 0:
print(f"Ruido generado: {output_path}")
else:
print(f"Error al calcular ruido para {file}")
6. Combinación logarítmica del ruido total
Finalmente, se generó el mapa de ruido total combinando todos los mapas individuales mediante la fórmula:
7. Visualización y análisis
El resultado final es un mapa ráster con valores de nivel sonoro total en dB(A), que puede ser:
- • Clasificado por intervalos de ruido
- • Convertido en curvas de nivel (isófonas)
- • Superpuesto con núcleos urbanos o usos del suelo para evaluar su impacto
8. Evaluación progresiva del impacto acústico y reducción del número de aerogeneradores
Una vez obtenido el primer mapa de ruido total del parque eólico con los 22 aerogeneradores propuestos inicialmente, se generó una representación gráfica de los niveles de ruido en el territorio mediante curvas de nivel (isófonas) cada 5 dB(A). Estas isófonas permitieron identificar las zonas más afectadas por el ruido y facilitaban una lectura rápida del alcance espacial del impacto acústico. (Ver Anexo 8)
A partir de esta base inicial, se procedió a realizar una evaluación progresiva del impacto, descartando determinados aerogeneradores y observando cómo variaba la propagación sonora total. Las etapas fueron las siguientes:
🔹Primera reducción:
- Se eliminaron 4 aerogeneradores: el 5, 6, 13 y 19, por su proximidad a zonas más sensibles.
- Se recalculó el mapa de ruido total y sus correspondientes isófonas cada 5 dB(A).
🔹 Segunda reducción:
- A los anteriores se les sumaron otros 5 aerogeneradores: el 4, 11, 15, 17 y 21.
- Con ello, el parque quedó reducido a 13 aerogeneradores activos. Se observó una mejora considerable en la extensión de las zonas superiores a 45–50 dB.
🔹 Tercera reducción:
- Viendo que los niveles de ruido seguían siendo elevados en ciertas zonas críticas, se eliminaron además los aerogeneradores 1, 2, 12 y 22, resultando en 9 aerogeneradores restantes.
- Se volvió a generar el mapa total y las isófonas para esta configuración.
🔹 Estrategia alternativa: eliminación por criterio espacial
- En paralelo, se propuso una segunda vía de actuación. En lugar de ir eliminando según el nivel sonoro resultante, se atacó el problema desde el planteamiento inicial, retirando directamente los 9 aerogeneradores más periféricos, identificados como los que más extendían la huella acústica.
Estos fueron: 3, 10, 11, 13, 14, 15, 20, 21 y 22. (Ver Anexo 9)
Finalmente, se ha optado por ésta última distribución, con un total de 13 aerogeneradores. (Ver Anexo 10)
4 Conclusiones
Tras un análisis exhaustivo con herramientas SIG, se ha identificado una ubicación óptima para el parque eólico en la comarca de Laciana, dentro de la provincia de León. Esta zona fue seleccionada por cumplir con los criterios técnicos, ambientales y logísticos establecidos: se encuentra a menos de 5 km de líneas eléctricas, a una distancia segura de núcleos de población (>2,5 km) y fuera de áreas de protección ambiental o patrimonial.
Entre las tres alternativas analizadas, esta opción (92.79 km²) presentó la mejor combinación de potencial eólico (más de 7 m/s a 80 m de altura, según datos del IDAE), accesibilidad por carretera, y una pendiente del terreno inferior al 20%, facilitando tanto la construcción como el mantenimiento del parque.
Además, se realizó un análisis de impacto acústico con una configuración inicial de 22 aerogeneradores Vestas V150-4.5 MW. Se evidenció un nivel de ruido elevado (>50 dB(A)) en algunas áreas sensibles, por lo que se aplicó una estrategia de reducción progresiva y espacial, resultando en una configuración final de 13 aerogeneradores, que permitió reducir un 35% el área expuesta a niveles críticos de ruido sin comprometer de forma significativa la producción energética, que se estima en 58,5 MW de potencia instalada.
En futuras fases se recomienda realizar estudios complementarios de impacto ambiental, análisis geotécnico del terreno y evaluación económica detallada para confirmar la viabilidad completa del proyecto.
5 Anejos
Se ha optado, finalmente, por la opción de mayor extensión superficial.

