ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

1981-2021全球逐月太阳辐射GIS数据生产链路与光伏选址实践

2026/8/31 16:42:11 拓冰建站 浏览量
1981-2021全球逐月太阳辐射GIS数据生产链路与光伏选址实践 简介本资源提供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?parametersALLSKY_SFC_SW_DWNcommunityRElongitude-min-180longitude-max180latitude-min-90latitude-max90start1981end2021formatNetCDF这里communityRE代表可再生能源社区返回的参数单位是kWh/m²/day如果把community改成AG主要用于农业应用但辐射相关变量基本一致。需要注意全球范围数据量不小API响应时间较长我一般把请求拆成几个纬带分别下载比如每30度一个块这样即使某一段下载失败也不会导致整个任务重来。下载完成后检查文件大小是否合理避免因为网络中断拿到半个响应文件。如果服务器端不支持一次性返回超大区域也可以退而求其次用点列表批量请求。方法是在本地生成等间距经纬度格点逐点请求JSON数据再在本地栅格化。速度慢一些但思路清晰也方便做残差检查。3.2 用xarray解析NetCDF并输出GeoTIFFPOWER区域接口返回的是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/yrioxarray才能识别空间维度二是显式设置坐标系为EPSG:4326因为POWER的NetCDF本身可能不携带完整的CRS描述ArcGIS或QGIS直接加载时容易报“未知坐标系”。顺手把坐标轴名为x/y之后后续写GeoTIFF就顺理成章import os os.makedirs(output_tif, exist_okTrue) for i in range(ghi.shape[0]): time_str str(ghi.time[i].values)[:7].replace(-, _) out_path foutput_tif/GHI_{time_str}.tif ghi.isel(timei).rio.to_raster( out_path, dtypefloat32, 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中直接显示没问题但做面积统计、叠加分析时必须警惕。比如用原始经纬网格统计各气候区总辐射高纬度的每个像元实际面积被高估结果会偏大。正确做法是先把栅格投影到等面积坐标系比如MollweideEPSG:54009或Equal EarthEPSG: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, combineby_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, dtypefloat32) cv.rio.to_raster(GHI_cv.tif, dtypefloat32)实际落地时我会先用“年总辐射≥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如果没设置nodataArcGIS里可能把无效区域显示为黑色或全图显示异常如果出现了“未知坐标系”的提示很可能就是导入时没有调用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这个量级的长时序逐月全球分析它确实是性价比最高的起点。真正决定项目成败的往往不是选哪个数据源而是有没有把单位换算清楚、把坐标基准立住、把版本变化记在脑子里。这些坑我都替你踩过一轮了希望你能少走一点弯路。本文还有配套的精品资源点击获取