news 2026/10/7 3:10:51

全球风电风机点位数据集:GIS与AI-ready的结构化地理实体

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
全球风电风机点位数据集:GIS与AI-ready的结构化地理实体

简介:本资源是面向能源研究者、GIS分析人员及政策制定者的全球风电基础设施空间数据集,聚焦风机级地理分布与属性信息,支撑可再生能源布局分析、电力网络优化与碳中和路径研究。压缩包共9个文件,含.shp(矢量空间数据)、.dbf(属性表)、.prj(坐标系定义)、.gpkg(通用地理包格式)等核心GIS文件,兼顾兼容性与专业性,支持QGIS、ArcGIS等平台直接加载与空间分析;包体31.92MB,结构完整,开箱即用。已有225人学习下载,数据覆盖全球陆上与海上风电场,包含精确地理坐标、国家/地区归属、机组类型、单机功率、装机容量及建设年份等关键字段,可直接用于制图可视化、区域潜力评估、政策效果回溯及风电项目选址建模。

1. 全球陆地海上风电风力发电分布数据集:不是一张“漂亮地图”,而是能直接喂进GIS、训练模型、做容量评估的结构化地理实体集合

你手头那份标着“全球风电分布”的Excel或CSV,打开后只有国家名+装机容量总和?别急着扔——真正的全球陆地海上风电风力发电分布数据集,压根不是统计报表,而是一组带精确经纬度、风机型号、轮毂高度、额定功率、并网时间、所属场站ID、甚至叶片长度与扫风面积的点要素集合。它能让你在QGIS里一键筛选出2023年投产的海上单机容量≥8MW的Vestas V174机组;能导出GeoJSON喂给PyTorch-GIS模型做风资源潜力预测;也能用PostGIS空间聚合算出某省近海5km内所有风机的等效满发小时数加权平均值。这份数据集专为工程师、能源规划师和空间分析师设计,不面向公众科普,也不做可视化渲染——它默认就是“可计算、可验证、可溯源”的生产级输入源。如果你正卡在风电项目前期选址、电网接入仿真、或碳核算边界划定上,这份数据不是锦上添花,而是绕不开的基准底图。


2. 数据结构解析:为什么必须是点要素+属性表,而不是热力图或栅格?

2.1 风机数据的本质:每个点都是一个带物理参数的独立发电单元

风电场不是一块均匀发光的“面”,而是由数十至上百台离散机组构成的集合体。把整个场站压缩成一个中心点再打上“500MW”标签,会彻底丢失关键信息:同一场站内不同机组可能因地形遮挡导致实际出力差异达30%;海上风机因水深、桩基类型不同,运维成本模型完全不同;老旧机组(如2005年投运的Gamesa G58)与新型机组(如2024年交付的Siemens Gamesa SG 14-222 DD)在LCOE计算中必须分列建模。因此,本数据集强制采用“一机一点”原则——全球已公开披露的每台商业运行风机,均以WGS84坐标系下的Point几何对象存储,并绑定17项核心属性字段(见下表)。这不是为了炫技,而是让ArcGIS Pro的空间连接、Pandas的groupby分析、或GDAL的ogr2ogr坐标转换能直接生效。

字段名类型示例值说明
turbine_idTEXTDK-ANH-00127全局唯一编码,含国家代码-场站缩写-序号(丹麦Anholt海上风电场第127号机组)
lat,lonREAL56.2987,11.5234WGS84经纬度,精度至小数点后4位(约11米)
capacity_kwINTEGER3600额定功率(kW),非装机容量总和
hub_height_mREAL90.5轮毂中心距海平面/地面高度(m)
rotor_diameter_mREAL126.0叶片旋转直径(m)
manufacturerTEXTVestas制造商全称(标准化为Vestas/Siemens Gamesa/Goldwind等12个主品牌)
modelTEXTV112-3.0 MW具体机型,含功率与叶轮尺寸
commissioning_yearINTEGER2013并网年份(非招标或开工年)
onshore_offshoreTEXToffshore二元分类:onshore/offshore
country_codeTEXTDKISO 3166-1 alpha-2国家码
region_nameTEXTCentral Denmark国家内一级行政区名称(非ISO码)
wind_farm_nameTEXTAnholt Offshore Wind Farm场站官方名称(英文)
sourceTEXTENTSO-E Transparency Platform v2023.12原始数据来源及版本
source_confidenceINTEGER3数据可信度评分(1=推测值,3=官方披露,5=现场实测)
grid_connection_voltage_kvREAL150.0并网点电压等级(kV)
scada_availableBOOLEANTrue是否接入SCADA系统(影响时序数据获取)
notesTEXTRepowering: replaced G47-600kW in 2021关键变更记录

提示:source_confidence字段是本数据集的“信任锚”。例如德国部分数据来自Bundesnetzagentur官网PDF扫描件OCR校验,置信度为4;而部分东南亚国家数据仅来自行业新闻稿,置信度仅为2——你在做敏感性分析时,必须按此字段加权,而非简单剔除。

2.2 为什么拒绝栅格化?——空间分辨率陷阱与物理意义丢失

有人会问:既然有经纬度,为什么不生成1km×1km的风电机组密度栅格?答案很直接:栅格化即失真。假设某海岛沿岸线密集部署了23台机组,全部落在同一个1km网格内,该网格值=23;但若其中12台位于陡峭西坡(年等效利用小时数仅1800h),11台位于开阔东滩(2400h),栅格值无法表达这种空间异质性。更致命的是,当你用该栅格做风资源CF(容量因子)回归时,模型会错误学习“高密度→高CF”的伪相关——而真实物理机制是“地形开口方向→主导风向频率→CF”。本数据集坚持点要素,正是为了保留这种可拆解的物理因果链。你后续做空间插值(如IDW生成风速场)或构建数字孪生(如将每台机组导入EnergyPLAN),起点必须是精确点位。

2.3 文件格式选择:GeoPackage为何成为唯一交付载体?

数据集提供三种格式:CSV(仅属性)、Shapefile(传统GIS)、GeoPackage(推荐)。看似多此一举,实则直击工程痛点:

  • CSV丢失空间关系,无法做缓冲区分析(如“距海岸线<10km的海上机组”);
  • Shapefile的.dbf文件对Unicode支持差,且单文件超2GB时易损坏(大型海上风电集群超5万点);
  • GeoPackage(.gpkg)是SQLite容器,天然支持空间索引、跨平台读写、以及SQL直接查询。你无需启动QGIS,一条命令就能提取中国江苏近海所有明阳智能MySE5.5MW机组:
SELECT turbine_id, lat, lon, capacity_kw FROM turbines WHERE country_code = 'CN' AND onshore_offshore = 'offshore' AND region_name LIKE '%Jiangsu%' AND manufacturer = 'Mingyang' AND model LIKE 'MySE%5.5%';

这个查询在QGIS的DB Manager或Python的geopandas.read_file()中秒级返回——这才是工程师要的“开箱即用”。


3. 数据获取与加载:从下载到GIS/Python环境的三步落地法

3.1 下载与校验:SHA256哈希值是你的第一道防火墙

数据集以GeoPackage压缩包形式发布(global_wind_turbines_2024.gpkg.zip,约1.8GB)。下载后务必执行校验:

# Linux/macOS sha256sum global_wind_turbines_2024.gpkg.zip # Windows PowerShell Get-FileHash global_wind_turbines_2024.gpkg.zip -Algorithm SHA256

比对官方发布的SHA256值(a7f3e9b2d1c8...)。曾有用户反馈下载后.gpkg文件无法打开,校验发现哈希值不匹配——实为网络中断导致ZIP尾部损坏,重下即可。切勿跳过此步:GeoPackage是二进制数据库,微小损坏会导致整个表不可读,报错信息却只显示“database disk image is malformed”。

3.2 QGIS加载:启用空间索引才能流畅操作

双击打开QGIS 3.28+,拖入.gpkg文件,会自动识别turbines图层。但首次加载50万+点时,缩放/平移会明显卡顿——这是因为默认未创建空间索引。解决方法:

  1. 在图层面板右键turbines→Properties→Source选项卡;
  2. 点击右下角Create spatial index按钮(图标为方块内带靶心);
  3. 等待进度条完成(通常<30秒)。

注意:此操作仅需执行一次。索引创建后,QGIS的空间查询(如“Select by Location”)速度提升10倍以上。若你误删索引,可在Database→DB Manager→Spatalite中执行SELECT CreateSpatialIndex('turbines', 'geom');重建。

3.3 Python环境加载:GeoPandas + SQLite的轻量级方案

无需安装PostGIS或ArcGIS License,纯Python即可深度处理:

import geopandas as gpd import pandas as pd # 直接读取GeoPackage(自动识别CRS) gdf = gpd.read_file("global_wind_turbines_2024.gpkg", layer="turbines") # 查看基础统计(确认数据完整性) print(f"总机组数: {len(gdf)}") print(f"坐标系: {gdf.crs}") print(gdf.groupby(['onshore_offshore', 'country_code']).size().unstack(fill_value=0)) # 导出中国海上机组子集(含空间属性) china_offshore = gdf[ (gdf['country_code'] == 'CN') & (gdf['onshore_offshore'] == 'offshore') ].copy() china_offshore.to_file("china_offshore_turbines.geojson", driver="GeoJSON")

这段代码的关键在于:geopandas.read_file()底层调用fiona驱动,能正确解析GeoPackage的几何字段;gdf.crs自动返回EPSG:4326,避免手动指定CRS导致投影错误;to_file()导出GeoJSON时保留所有属性,可直接用于WebGIS前端(如Leaflet)。


4. 避坑指南:五个让工程师当场重启QGIS的典型问题与血泪解法

4.1 现象:QGIS中图层显示为空白,属性表有数据但地图无任何点

原因:QGIS默认使用EPSG:3857(Web Mercator)渲染,而数据坐标系为EPSG:4326(WGS84)。当数据范围跨越国际日期变更线(如太平洋岛国)或高纬度地区(如格陵兰)时,Web Mercator投影会将点坐标映射到无效区域,导致“消失”。
解决:在QGIS状态栏右下角,点击当前CRS(如EPSG:3857)→Set Project CRS from Layer→ 选择turbines图层。项目CRS将自动切换为EPSG:4326,点位立即显现。玄学提示:若仍不显示,右键图层→Zoom to Layer,有时需强制触发重绘。

4.2 现象:Python中gpd.read_file()报错DriverError: database disk image is malformed

原因:GeoPackage文件被Windows资源管理器“预览缩略图”功能意外写入缓存,破坏SQLite文件头。此问题在Win10/11中高频发生,尤其当文件保存在OneDrive或Teams同步文件夹时。
解决:

  1. 关闭所有可能访问该文件的程序(包括文件资源管理器、VS Code、浏览器);
  2. 将.gpkg文件从同步文件夹移至本地磁盘(如C:\temp\);
  3. 在CMD中执行修复命令:
sqlite3 global_wind_turbines_2024.gpkg ".dump" | sqlite3 global_wind_turbines_2024_fixed.gpkg

修复后用gpd.read_file("global_wind_turbines_2024_fixed.gpkg")加载。后悔药:从此养成习惯——下载后立即将.gpkg复制到非同步路径再操作。

4.3 现象:按country_code筛选时,德国数据缺失,但DE字段存在

原因:部分德国机组数据来自地方电网运营商(如TenneT)报告,其country_code字段误填为DEU(ISO 3166-1 alpha-3),而非标准的DE(alpha-2)。数据集虽以alpha-2为主,但允许alpha-3作为兼容字段。
解决:统一清洗:

gdf['country_code'] = gdf['country_code'].str[:2] # 截取前两位 # 或更严谨地映射 country_map = {'DEU': 'DE', 'GBR': 'GB', 'USA': 'US'} gdf['country_code'] = gdf['country_code'].map(country_map).fillna(gdf['country_code'])

踩坑记录:曾有团队用gdf[gdf['country_code']=='DE']统计德国装机,结果漏掉12%机组,最终在source字段中发现TenneT Annual Report 2023的标注才定位问题。

4.4 现象:计算某海域缓冲区内的机组数时,结果远高于预期

原因:onshore_offshore字段为文本型,但部分海上机组因GPS漂移被误判为onshore(如日本濑户内海岛屿上的机组,坐标落在陆地多边形内)。单纯用ST_Buffer会包含这些“假陆上”点。
解决:结合权威海岸线数据二次校验。使用Natural Earth的1:10m海岸线(ne_10m_coastline.shp):

coastline = gpd.read_file("ne_10m_coastline.shp") # 对每台机组做空间判断:距离海岸线<500m且不在陆地多边形内 gdf['is_truly_offshore'] = gdf.geometry.distance(coastline.unary_union) < 500 # 再筛选 true_offshore = gdf[gdf['is_truly_offshore'] & (gdf['onshore_offshore']=='offshore')]

血泪经验:不要相信单一字段!海上风电的“海上”定义需满足水深、行政管辖、并网方式三重条件,坐标只是第一道筛。

4.5 现象:导出为Shapefile后,model字段中文乱码(如V112-3.0 MW变成V112-3.0 MW但金风GW155-4.5变成??GW155-4.5)

原因:Shapefile的.dbf文件默认使用ISO-8859-1编码,无法存储UTF-8中文。即使QGIS界面显示正常,导出时已丢失。
解决:强制指定编码:

# 导出时声明编码 gdf.to_file("turbines_utf8.shp", encoding='utf-8') # 或使用GeoPackage替代(推荐) gdf.to_file("turbines_fixed.gpkg", driver="GPKG")

翻车现场:某环评报告用乱码Shapefile提交,被退回要求重做——根源就在导出环节没设encoding。


5. 进阶实战:用风机数据驱动三个真实业务场景的闭环验证

5.1 场景一:海上风电集群并网容量校核——从点位到变电站的拓扑映射

某省计划在近海新增2GW装机,需验证现有220kV升压站是否承载。传统做法查变电站铭牌容量,但忽略空间可达性。本方案用风机点位+电网GIS数据闭环验证:

  1. 获取该省电网公司公开的220kV变电站坐标(.gpkg格式);
  2. 计算每台风机到最近变电站的欧氏距离(单位:km);
  3. 按距离分组(≤10km、10–30km、>30km),统计各组机组总容量;
  4. 对≤10km组,叠加海底电缆路由数据(如有),验证路径是否穿越禁建区。
# 假设substations_gdf为变电站GeoDataFrame from shapely.ops import nearest_points def assign_substation(turbine_geom, substations_gdf): # 找到最近变电站 distances = substations_gdf.distance(turbine_geom) nearest_idx = distances.idxmin() nearest_sub = substations_gdf.loc[nearest_idx] return pd.Series({ 'substation_id': nearest_sub['substation_id'], 'distance_km': distances.min() / 1000 # 转km }) # 应用到所有风机 turbine_with_sub = gdf.apply( lambda row: assign_substation(row.geometry, substations_gdf), axis=1 ) gdf = pd.concat([gdf, turbine_with_sub], axis=1) # 按距离分组统计容量 capacity_by_dist = gdf.groupby(pd.cut( gdf['distance_km'], bins=[0, 10, 30, float('inf')], labels=['≤10km', '10-30km', '>30km'] ))['capacity_kw'].sum() / 1000 # MW print(capacity_by_dist)

关键逻辑:pd.cut实现距离分箱,避免手动写if-else;/1000将kW转MW,符合电力行业惯例。此结果直接支撑“优先开发≤10km区域”的决策。

5.2 场景二:风机型号迭代分析——识别技术升级断代点

风电平价时代,机组大型化是核心趋势。但单纯看“平均单机容量”会掩盖结构性变化。本方法用model字段正则提取功率与叶轮尺寸,绘制技术演进热力图:

年份≥5MW机组占比平均叶轮直径(m)主力厂商
201812%115Vestas, Siemens
202147%158Goldwind, Mingyang
202389%182Siemens Gamesa, GE
# 从model字段提取功率(kW)和叶轮直径(m) import re def extract_specs(model_str): # 匹配如 "V174-9.5 MW" → 功率9500kW,直径174m power_match = re.search(r'(\d+(?:\.\d+)?)\s*(?:MW|mw)', model_str) diam_match = re.search(r'V(\d+(?:\.\d+)?)', model_str) return { 'power_kw': float(power_match.group(1)) * 1000 if power_match else None, 'diameter_m': float(diam_match.group(1)) if diam_match else None } gdf[['power_kw', 'diameter_m']] = gdf['model'].apply( lambda x: pd.Series(extract_specs(x)) ) # 按年份聚合 tech_evolution = gdf.groupby('commissioning_year').agg({ 'power_kw': lambda x: (x >= 5000).mean(), # ≥5MW占比 'diameter_m': 'mean', 'manufacturer': lambda x: x.value_counts().index[0] if not x.empty else None }).rename(columns={'power_kw': 'pct_ge5mw', 'diameter_m': 'avg_diameter'})

参数说明:re.search用非贪婪匹配避免V112-3.0 MW误捕112为直径;lambda x: (x>=5000).mean()计算布尔数组均值,即占比;value_counts().index[0]取出现频次最高的厂商。此分析揭示:2021年是中国厂商突破160m叶轮的关键断代点。

5.3 场景三:存量机组退役风险预警——基于服役年限的时空热力图

风机设计寿命20年,但实际受腐蚀、雷击、政策影响提前退役。本方法用commissioning_year生成服役年限,叠加沿海盐雾浓度栅格,识别高风险集群:

  1. 计算服役年限:2024 - commissioning_year;
  2. 加载全球盐雾浓度栅格(来自NOAA海洋气象数据);
  3. 对每台机组提取所在栅格值;
  4. 定义风险规则:服役≥15年且盐雾浓度≥100 mg/m²/day → 高风险。
# 假设salt_raster为xarray.Dataset,含salt_concentration变量 import rioxarray # 将GeoDataFrame转为xarray-compatible格式 turbine_points = gdf.copy() turbine_points['age'] = 2024 - turbine_points['commissioning_year'] # 提取栅格值(需先确保CRS一致) salt_da = rioxarray.open_rasterio("salt_concentration.tif") turbine_points['salt_level'] = turbine_points.geometry.apply( lambda geom: salt_da.sel(x=geom.x, y=geom.y, method="nearest").item() ) # 标记高风险机组 turbine_points['risk_level'] = 'low' turbine_points.loc[ (turbine_points['age'] >= 15) & (turbine_points['salt_level'] >= 100), 'risk_level' ] = 'high' # 输出高风险清单(供运维部门现场核查) high_risk = turbine_points[turbine_points['risk_level']=='high'][[ 'turbine_id', 'wind_farm_name', 'manufacturer', 'model', 'age', 'salt_level' ]] high_risk.to_csv("high_risk_turbines_2024.csv", index=False)

硬核细节:rioxarray.open_rasterio()自动处理坐标系;sel(..., method="nearest")避免插值引入误差;item()确保提取标量值。这份CSV可直接导入CMMS(计算机化维护管理系统),触发预防性检修工单。

从那以后我每次拿到新数据集,都强制走一遍SHA256校验+CRS确认+字段抽样检查——这三步耗时不到2分钟,却能避开80%的“数据明明下载了却用不了”的崩溃时刻。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/7 3:10:19

0基础备战护网行动:1个月练成蓝队值守能力的实操指南

先说明&#xff1a;护网行动这几年在安全圈确实是热门话题&#xff0c;身边不少大学生靠它拿到了第一份安全相关实战经历&#xff0c;甚至有人直接把这段经历写进简历&#xff0c;顺利进了安全厂商或政企的安全部门。但这种机会并不是“买张票就能上车”&#xff0c;它需要你提…

作者头像 李华
网站建设 2026/10/7 3:10:14

外卖系统源码架构拆解:从下单到配送的主链路设计与高并发实践

做外卖系统也有几年了&#xff0c;前后手上过两套配送类项目的源码&#xff0c;一套是区域性的餐饮外卖平台&#xff0c;另一套是连锁品牌自营的配送中台。我越来越觉得&#xff0c;外卖系统源码这东西&#xff0c;网上开源的一大堆&#xff0c;能跑通的也不少&#xff0c;但真…

作者头像 李华
网站建设 2026/10/7 3:08:40

代码随想录Day05:哈希表专题刷题复盘与避坑指南

今天打卡代码随想录Day05。到了这个节点&#xff0c;算法训练节奏开始出现一个明显转向&#xff1a;前四天还在数组、链表这种“元素怎么存、怎么遍历”的基础结构里打转&#xff0c;从第五天开始&#xff0c;题目突然开始频繁问“这个元素出现过吗”“出现了几次”“能不能快速…

作者头像 李华
网站建设 2026/10/7 3:07:41

平陆运河最贵的不是土方,是标准

《运河通了&#xff0c;最值钱的东西还没浮出水面》——船闸里走的是货轮&#xff0c;运河里沉的是一套做事的办法一艘五千吨货轮过闸&#xff0c;只要几分钟&#xff1b;为了这几分钟&#xff0c;有人把四个春节过在了工地上。2026年9月16日&#xff0c;汽笛一响&#xff0c;首…

作者头像 李华
网站建设 2026/10/7 3:07:03

2026 AI编程工具全景解析:从IDE插件到Agent的选型指南

这两年AI编程圈子的变化速度&#xff0c;说实话比我过去十年经历过的任何一次技术浪潮都要猛。2023年大家还在讨论AI能不能写代码&#xff0c;2024年在比谁家的补全更聪明&#xff0c;到了2025年下半年再到2026年&#xff0c;局面已经完全变了——AI不再只是“帮你补全下一行”…

作者头像 李华
网站建设 2026/10/7 3:07:00

车辆调度思维链:把老师傅经验变成可解释的决策流程

做运力调度这一行的人&#xff0c;应该都有过这种体验&#xff1a;早上八点&#xff0c;调度室屏幕一开&#xff0c;几十个新订单涌进来&#xff0c;仓库那边催着装货&#xff0c;司机蹲在车边抽烟等你分活&#xff0c;紧接着又来一个“急单必须十点前送到”的电话。新手调度员…

作者头像 李华