☰
1981-2021全球逐月太阳辐射GIS数据生产链路与光伏选址实践
2026/10/15 17:28:09 网站建设 项目流程

简介:本资源提供1981–2021年全球逐月太阳辐射GIS空间分布数据,面向气象、能源、遥感及环境科学领域的科研人员与GIS应用开发者,支撑太阳能潜力评估、气候模型验证与可再生能源选址分析等关键任务。数据为气候平均值,覆盖41年共12个月份加全年均值,以0.5°×0.5°分辨率的GeoTIFF格式存储,单位统一为kWh/m²/day,并附带完整地理参考(tfw)、元数据(xml)、金字塔(ovr)及预览图(jpg),另含数据来源说明文本,共66个文件,压缩包仅10.83MB,轻量易用。已有936人学习下载,资源结构规范、命名清晰、即开即用——所有月份及全年数据均独立成图,配套辅助文件齐全,无需额外配置即可直接导入ArcGIS、QGIS或Python rasterio等平台开展空间分析与可视化。 做光伏项目前期评估时,开发商最常问的一句话就是“这片地的太阳能资源到底行不行”。嘴上说“光照充足”没有说服力,必须拿出几十年的逐月辐射数据,做成图、做成表,别人才能信服。我前后整理过一套1981-2021全球逐月太阳辐射GIS空间分布数据,覆盖41年、逐月连续、全球范围,主体数据来自NASA POWER再分析产品,经过清洗、单位换算、栅格化、投影处理后形成可直接落地的GIS图层。下面把数据源怎么选、下载怎么搞、单位换算怎么避坑、以及我实际用这套数据做光伏潜力评估时踩过的坑一次性讲清楚,给同样在做相关事情的朋友参考。

先说明,这不是复制一个“现成下载链接”就完事,而是尽量把从原始数据到最终GIS图层的完整生产链路说透。看完之后,你可以自己搭建一套从1981年到现在逐月更新的太阳辐射空间数据集,也可以直接拿我这里的处理思路去套自己的区域数据。

1. 41年逐月太阳辐射数据:到底能应用在哪些场景

1.1 光伏与风电选址:资源地图是第一步

光伏选址看上去是“跟着好地走”,实际上首先找的就是高辐射区。年水平面总辐射(GHI)低于一定阈值的区域,无论土地成本多低,都不值得投入。可问题是,单个年份的光照会波动,只拿一年的数据说话很容易被偶然性误导。1981到2021这四十多年的逐月数据,一方面可以算出多年平均的年总辐射,另一方面可以算逐年波动幅度,判断一个地方的太阳能资源是稳定型还是“看天吃饭”型。

这套数据的空间覆盖是全球范围,意味着可以抹平地区差异,在同一个坐标系下横向比较不同区域的资源禀赋。做全国或者全球尺度选址时,这一点尤其重要,因为不同区域的当地气象站密度不同,实测数据的可比性很差,而基于再分析模型输出、经过统一处理的栅格数据,天然提供了“同一把尺子”的便利。

1.2 农业与生态:从“看天吃饭”到“看数据安排生产”

太阳能辐射不只是光伏的原料,它还是作物光合作用、地表蒸散发、碳循环模型的直接驱动变量。农业气候区划里常用生长季内的累积辐射来评估一个区域适合种什么、产量潜力大概在什么水平。有了1981-2021的逐月序列,就能按作物生长季灵活切片,比如算3月到9月的辐射累积在几十年里的变化趋势,比单看年平均更贴合农学需求。

生态学模型同样需要长时序辐射驱动。比如用光能利用率模型估算植被总初级生产力(GPP)时,入射光合有效辐射(PAR)就是核心输入之一。实测站点数据稀疏,而逐月全球栅格正好补上网格化驱动数据这个缺口,配合气象插值结果,可以跑出时间序列比较完整的区域碳循环模拟。

1.3 建筑能耗与城市设计:决策越来越依赖长时序辐射数据

建筑节能计算里,逐月太阳辐射是围护结构热工设计、太阳能热水系统容量、光伏幕墙发电量估算的基础参数。以前很多设计师直接翻手册查“典型气象年”数据,但典型气象年只有一个“平均状态”,无法反映辐射量在年际间的波动。有了41年月尺度序列,可以自己做一套用于极端年份校核的输入条件,看看建筑系统在最差辐照年份是否还能维持设计目标。城市设计里的日照分析、街区太阳能潜力评估,也都可以直接从这套数据裁出目标区域。

一句话总结这章:凡是需要“长时间、空间化、逐月”辐射输入的生产决策,这套数据都是现成的基础设施。没有它之前我自己也做过很多临时抓数据的活,有了统一数据集之后,整个决策链条会顺很多。

2. 数据源选型对比:为什么我长期选用NASA POWER这条链路

2.1 主流公开辐射数据产品横向对比

做太阳辐射空间数据,第一步必须先回答“用谁的数据”。很多人一上来就搜“太阳辐射数据下载”,结果下载了一堆来源不一、格式混乱、时间基不同的文件,最后做出来的图层根本没法用。我这里直接列一下我熟悉的几个主流公开数据源。

数据源时间范围时间分辨率空间分辨率覆盖范围适合场景
NASA POWER1981年至今逐日/逐月0.5° × 0.625°全球长时序资源评估、光伏选址、农业气候
ERA5再分析1940年至今逐小时可聚合约0.25°(31km)全球更精细的科研再分析,但辐射需要额外后处理
CAMS辐射服务2004年至今逐日/逐月约0.03°全球近20年高分辨率辐射监测,长时序不足
NSRDB1998年至今(不同区域起始不同)逐时/逐日约4km以美洲为主高分辨率发电量模拟,但全球覆盖不完整
Global Solar Atlas基于约10年的平均气候态平均,非逐月约1km全球看长期平均资源,不看年际变化

单看表格就明白,要做到“1981-2021、全球、逐月”这个组合,NASA POWER几乎是唯一免费且稳定可达成的方案。ERA5虽然时间更长、分辨率更高,但它的辐射变量是再分析模型输出的短波辐射通量,直接拿来当月均值没问题,问题在于不少用户并不熟悉NetCDF和CF变量命名,后处理门槛偏高。CAMS分辨率最高,但2004年之前没有数据,无法对齐从1981年开始的长序列。NSRDB覆盖地区有限,不能作为全球统一底图。Global Solar Atlas没有逐月时间序列,做不了年际变化分析。

2.2 变量选择:GHI、DNI、DIF别一开始就搞混

在POWER数据集中,太阳辐射相关的变量名是几个“缩写+编号”,第一次接触很容易选错。我建议记住核心的三个:

  • ALLSKY_SFC_SW_DWN:地表水平面总辐射,即GHI,对应太阳能光伏平板组件最常参考的入射能量。
  • ALLSKY_SFC_SW_DNI:地表法向直接辐射,即DNI,做聚光式光热、跟踪式光伏时用。
  • ALLSKY_SFC_SW_DIF:地表散射辐射,即DIF。

还有一个前缀CLRSKY的系列(如CLRSKY_SFC_SW_DWN)表示晴空辐射,它不考虑云层影响,更像是理论天花板,一般不直接用于资源评估,但可以用来对比评估云对辐射的削减程度。

我实际做光伏选址时,主力变量就是ALLSKY_SFC_SW_DWN。理由是普通固定式光伏电站的发电量主要由水平面总辐射决定,而POWER的GHI在再分析产品里精度相对稳定,长时序一致性也优于部分派生变量。只有在做聚光光热项目预可行性时我才会额外拉DNI。

选好数据源和变量之后,接下来才是真正的体力活:把全球数据拉到本地,变成GIS能直接使用的图层。

3. 从NASA POWER到GIS图层的完整生产工序

3.1 网络请求:区域、参数、时间范围

POWER提供HTTP API,可以按点、也可以按矩形区域返回数据。我们做全球逐月数据,最稳的方式是直接用它的区域NetCDF接口,一次性拉取所有经纬度格点和时间范围。

一个典型的请求类似于:

https://power.larc.nasa.gov/api/temporal/monthly/regional?parameters=ALLSKY_SFC_SW_DWN&community=RE&longitude-min=-180&longitude-max=180&latitude-min=-90&latitude-max=90&start=1981&end=2021&format=NetCDF

这里community=RE代表可再生能源社区,返回的参数单位是kWh/m²/day;如果把community改成AG,主要用于农业应用,但辐射相关变量基本一致。需要注意,全球范围数据量不小,API响应时间较长,我一般把请求拆成几个纬带分别下载,比如每30度一个块,这样即使某一段下载失败,也不会导致整个任务重来。下载完成后检查文件大小是否合理,避免因为网络中断拿到半个响应文件。

如果服务器端不支持一次性返回超大区域,也可以退而求其次,用点列表批量请求。方法是在本地生成等间距经纬度格点,逐点请求JSON数据,再在本地栅格化。速度慢一些,但思路清晰,也方便做残差检查。

3.2 用xarray解析NetCDF并输出GeoTIFF

POWER区域接口返回的是NetCDF文件,用Python的xarray打开非常方便:

import xarray as xr import rioxarray ds = xr.open_dataset('POWER_monthly_1981_2021.nc') ds = ds.rename({'lon': 'x', 'lat': 'y'}) ds = ds.rio.set_crs('EPSG:4326') ghi = ds['ALLSKY_SFC_SW_DWN'] print(ghi.shape, ghi.attrs['units'])

这里两个惯用操作很重要:一是把lon/lat坐标改名为x/y,rioxarray才能识别空间维度;二是显式设置坐标系为EPSG:4326,因为POWER的NetCDF本身可能不携带完整的CRS描述,ArcGIS或QGIS直接加载时容易报“未知坐标系”。顺手把坐标轴名为x/y之后,后续写GeoTIFF就顺理成章:

import os os.makedirs('output_tif', exist_ok=True) for i in range(ghi.shape[0]): time_str = str(ghi.time[i].values)[:7].replace('-', '_') out_path = f'output_tif/GHI_{time_str}.tif' ghi.isel(time=i).rio.to_raster( out_path, dtype='float32', nodata=-9999 )

上面这段代码会把每个月输出成一个单波段GeoTIFF,文件名形如GHI_1981_01.tif。一个41年的全球逐月序列,最终就是492个文件(41×12),配合一个栅格目录或者影像栈,就完成了从NetCDF到GIS基础图层的转换。

3.3 单位换算:kWh/m²/day与年累计的正确算法

POWER返回的月均辐射单位是kWh/m²/day,注意,这是“每天平均”而不是“整月累计”。很多初学者直接拿这个值当“月值”,结果做年累计时少了几个数量级,或者反过来乘错。

正确的处理方式是在计算月总量时考虑每个月的天数:

days_in_month = ghi.time.dt.days_in_month monthly_total = ghi * days_in_month # 单位变为 kWh/m²/month annual_total = monthly_total.sum('time')

如果只是想看多年平均的月变化,直接用原来的日均值即可;但如果要做年总辐射、季度累计,就必须按上述方式换算。另外,最终结果如果要以瓦/平方米为单位,可以用1 kWh/m² = 3.6 MJ/m² = 1000 Wh/m²的关系做转换,先想清楚自己需要什么单位,再动手,避免事后返工。

这里我自己的习惯是:所有中间处理保留原始单位kWh/m²/day,只在最终输出业务图层时才换算成kWh/m²/year或W/m²。因为中间步骤一旦换算过,再叠加、再裁切时很容易出现单位记忆混乱,排查问题耗时又头疼。

3.4 重投影、重采样与栅格栈管理

全球数据的原始网格在经纬度坐标系下呈现“高纬度像元面积收缩”的特性。在ArcGIS或QGIS中直接显示没问题,但做面积统计、叠加分析时必须警惕。比如用原始经纬网格统计各气候区总辐射,高纬度的每个像元实际面积被高估,结果会偏大。正确做法是先把栅格投影到等面积坐标系,比如Mollweide(EPSG:54009)或Equal Earth(EPSG:8857),再做统计。

用GDAL命令完成重投影非常简单:

gdalwarp -t_srs EPSG:6933 -tr 50000 50000 -r bilinear GHI_1981_01.tif GHI_1981_01_aea.tif

重采样到50公里分辨率,是为了让后续统计计算速度更快,如果你需要更高精度,可以换成10公里或保持原始分辨率,具体取决于下游应用的要求。

文件管理上,我强烈建议用一个标准命名规范,比如“变量_年份_月份.tif”,然后配合一个CSV索引表记录每个文件的路径、空间范围、投影坐标系、数据源版本。这看起来有点“笨”,但41年492个月文件一旦堆积起来,没有索引表基本等于数据灾难。我自己踩过这个坑,后来才补上这份元数据表。

4. 实战案例:用这套数据做全国光伏潜力快速筛查

4.1 先算年总辐射与变异系数两个核心指标

有了逐月栅格,光伏潜力筛查的第一步不是叠各种图层,而是先算两个最基础的指标:多年平均年总辐射,以及年际变异系数。前者决定资源下限,后者决定收益稳定性。

把492个逐月栅格先按年份聚合成41个年总辐射栅格,再在每个像元上计算均值与标准差,最后得到变异系数。

import xarray as xr # 读取之前处理的逐月栅格堆叠成一个DataArray da = xr.open_mfdataset('output_tif/GHI_*.tif', combine='by_coords') # 按年份分组并乘以每月天数后求和 years = da.time.dt.year monthly_total = da['ALLSKY_SFC_SW_DWN'] * da.time.dt.days_in_month annual_total = monthly_total.groupby(years).sum('time') # 多年均值与变异系数 mean_annual = annual_total.mean('year') std_annual = annual_total.std('year') cv = std_annual / mean_annual # 输出结果 mean_annual.rio.to_raster('GHI_mean_annual_kwhm2.tif', dtype='float32') cv.rio.to_raster('GHI_cv.tif', dtype='float32')

实际落地时,我会先用“年总辐射≥1400 kWh/m²”筛掉资源不足区,再用“变异系数≤0.15”筛掉波动过大的区域,两个条件叠加后,光伏开发的“优先区”就初步显现了。这个阈值不是拍脑袋,而是参考公开电站运营数据后取的保守值。

4.2 叠加地形、土地利用和电网距离做多因子筛选

太阳辐射只是“天时”,光伏落地还要看“地利”。在辐射栅格之上,我通常叠加三类数据:坡度坡向、土地利用现状、电网接网距离。

坡度超过一定角度、坡向朝北较多的区域,即便是高辐射区,实际开发成本也会陡增;土地利用现状则决定了征地难度。把辐射结果和这些因子用栅格计算器做加权打分,最后划出“潜力高、建设条件好”的区块。

这里有个容易忽略的细节:做多图层叠加前,所有栅格必须统一到相同的投影、像元大小和像元对齐方式。否则ArcGIS里看上去对齐了,实际上每个像元边缘差几百米,统计结果会失真。我一般在ArcGIS Pro里用“栅格投影”工具把所有图层重新采样到同一个参考栅格,而不是直接拿原始文件做运算。

4.3 结果验证:和已知电站实测数据对比

任何模型数据都必须跟实测对账。我在实际项目中会把筛选出来的高潜力区块和已知电站的位置做空间连接,查看它们附近的年均GHI是否和设计文件里用的辐照量相吻合。如果发现有电站落在模型预测的低值区,我就会优先排查这个区域的数据质量,看看是不是云处理参数、地形遮蔽等因素造成的偏差。

这种“预测—实测”对账的工作量不大,但非常值得做。因为它不单是验证结果,还能帮你反向发现数据生产链路里系统性的偏移,比如某个经纬度范围在POWER里长期被云覆盖模型高估,如果不知道这一点,后面的专业分析都会建在沙地上。

5. 踩坑记录:坐标、闰月、基准期和单位这几道坎

5.1 NetCDF变量名和时间维度的“命名玄机”

POWER返回的NetCDF里,时间维度的坐标名通常是time,数值是自某参考日期起算的天数,但也有可能用“days since 1900-01-01”这样的表述。用xarray打开后直接打印time坐标,如果看到一堆“天数值”而不是日期字符串,别慌,用pandas或cftime解析即可。还有一种情况:坐标名不是lon/lat而是longitude/latitude,所以打开文件后先打印全部坐标名,再决定是否需要rename。我见过不少同事因为跳过这一步,后面所有代码都在报“坐标不存在”,白白浪费半天。

5.2 闰年二月:月度平均与月度总量的换算陷阱

如果处理的是日值数据,闰年二月有29天,非闰年28天,这个问题大家多少有意识。但月度平均数据也一样有陷阱:月度平均辐射是“每日平均”的值,计算二月总辐射时,闰年要乘29,平年乘28,不能统一按30天算。我的经验是,直接使用xarray的days_in_month方法获取每个时点对应的实际天数,避免手工维护月份天数表。代码上只是多了一行,却能避免一些“只有2月才出现”的奇怪误差。

5.3 经纬度网格下的面积失真与投影选择

全球逐月太阳辐射原始文件是经纬度等距网格,纬度越高,单个像元的实际面积越小。如果直接用原始网格做“全球总辐射量”之类的统计,等于默认为每个像元面积相同,在高纬度区域会产生显著偏差。处理方法是把栅格重投影到等面积投影后再做统计。我因为这个问题在北极圈附近区域吃过亏,当时统计结果比预想高出一截,排查半天才发现是面积权重搞错了。

5.4 产品版本升级后连续性问题

NASA POWER会不定期更新算法和版本,同一坐标、同一变量,新版本可能和旧版本有数值偏移。如果做1981-2021连续序列,虽然POWER整体一致性还不错,但遇到版本更新,最好检查更新时间点前后是否有数值跳变。做法是:把更新时间点前后各12个月的数据画成时间序列曲线,看有没有突兀的台阶。如果有,就要考虑在年际变化分析里做标记,或者用重叠期数据做校正,否则趋势分析会得出错误的结论。

5.5 在ArcGIS / QGIS里加载GeoTIFF显示异常怎么办

这是GIS操作里最常被问的问题。用rasterio输出的GeoTIFF如果没设置nodata,ArcGIS里可能把无效区域显示为黑色或全图显示异常;如果出现了“未知坐标系”的提示,很可能就是导入时没有调用rio.set_crs。另外,POWER数据里海洋区域在我实际操作中也有值,不是没值,所以如果要分析陆地,记得用陆地掩膜把海洋区裁掉,不然统计区域会掺入大量无效信息。具体操作:在ArcGIS Pro里用“按掩膜提取”或QGIS里用Clip by mask,设置好陆地边界shp即可。

6. 顺手再分享几个扩展用法,以及我现在的常规处理习惯

数据整理好之后,不只是放在硬盘里吃灰。我现在处理这类长时序太阳辐射数据时,已经形成了一套固定的工作习惯,在这里顺手分享。

第一,关注Google Earth Engine上的现成集合。GEE里可以直接调用NASA POWER再分析产品或者ERA5的辐射变量,很多简单分析可以不用下载数据,在云端直接跑。1981-2021的逐月波动分析、不同年份对比图,在GEE里用几行代码就能出结果。这个思路特别适合快速验证“某个区域辐射异常”是不是局部现象,省掉大量本地文件管理成本。

第二,把辐射数据和气温、降水、风速放在一起做气候要素综合评估。太阳辐射不是孤立要素,比如光伏选址时,高温会让组件效率下降,大风会增加支架成本,把它们统一纳入一个多要素评估框架,结论会更有说服力。我一般会把同源气象变量一起下载,共用一个时间轴,形成标准化数据桶。

第三,建立自动化更新流水线。POWER数据每月都会更新,我的目标是让“1981至今”的序列始终保持最新。做法很简单:写一个定时脚本,每月自动拉取上个月的区域NetCDF,追加更新到年度栅格栈,并重新生成累计图层。这套流程跑起来后,我就不再需要每年年底“闭关”整理数据了。

如果你在QGIS里做时间序列展示,可以加载带time维度的NetCDF或者命名规范的GeoTIFF,配合QGIS时间控制器按月份轮播,对非专业观众解释辐射季节变化特别直观。我做汇报时经常用这个功能,效果比静态图好很多。

最后说说我的体会。做太阳辐射空间数据,最不缺的就是“数据源”,最缺的是把一个数据源吃透、把处理流程固化成习惯的耐心。NASA POWER不是万能的,分辨率也有局限,但对于1981到2021这个量级的长时序逐月全球分析,它确实是性价比最高的起点。真正决定项目成败的,往往不是选哪个数据源,而是有没有把单位换算清楚、把坐标基准立住、把版本变化记在脑子里。这些坑我都替你踩过一轮了,希望你能少走一点弯路。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询