FEATURED · 精选文章

1981-2021全球逐月太阳辐射栅格数据处理与GIS分析实战

发布时间 / 2026/8/31 16:23:57
来源 / 创域科博编辑部
栏目 / 资讯中心
1981-2021全球逐月太阳辐射栅格数据处理与GIS分析实战 简介本资源为1981–2021年全球逐月太阳辐射GIS空间分布数据集面向气象、能源、地理信息及可再生能源规划领域的科研人员与GIS应用开发者用于太阳能资源评估、光伏潜力建模、气候趋势分析等关键任务。数据以0.5°×0.5°空间分辨率提供41年共12个月份及全年平均值单位统一为kWh/m²/day所有栅格文件均为标准GeoTIFF格式并配套tfw地理配准、xml元数据、ovr金字塔、jpg可视化预览及说明文本结构完整、开箱即用。压缩包含66个文件总大小10.83MB轻量高效适配ArcGIS、QGIS及Python rasterio/xarray等主流平台。目前已有936人学习下载用户可直接加载分析各月辐射空间格局快速生成区域统计图表或叠加地形、土地利用数据开展综合评估显著降低太阳辐射基础数据获取与预处理门槛。 做GIS搞气象、能源、农业这类方向的朋友应该都有过找太阳辐射数据的痛苦经历。要么只有年平均值精度粗糙到没法用要么时间序列断断续续做不了连续分析要么数据格式乱七八糟下载回来一堆二进制连头都看不懂。今天这篇博文我就以“1981-2021全球逐月太阳辐射GIS空间分布数据”这套数据集为主线把我实际处理这类栅格数据的完整思路、操作流程、踩坑记录都摊开讲一遍希望能帮你少走点弯路。这套数据的核心价值在于时间跨度长达41年1981-2021分辨率到逐月空间范围覆盖全球并且以标准GIS栅格格式典型如GeoTIFF组织可以直接放进ArcGIS、QGIS、Python的rasterio、geopandas等环境里处理。对于做光伏选址、农业气候区划、建筑能耗模拟、生态模型驱动的研究者来说这是非常难得的“开箱即用”型长序列数据。文章会围绕数据理解、预处理、统计计算、可视化、常见问题排查、应用场景六个方面展开既有原理分析也有可直接复制的实操步骤。1. 先搞懂这套太阳辐射数据到底能用在哪1.1 数据本身长什么样从命名就能看出来这套数据有三个关键维度时间1981到2021、粒度逐月、空间全球。对应到GIS数据层面最典型的组织方式就是一堆GeoTIFF文件文件命名通常类似global_solar_radiation_1981_01.tif一个文件代表一个月份的全球太阳辐射空间分布。空间分辨率方面常见的公开全球辐射数据集一般在0.1度到0.25度之间。以0.25度为例换算成公里数赤道附近大约单个像元对应27.8公里左右。不同来源的数据分辨率差异很大我接触过的就有0.1度约11公里的GLASS产品、0.25度的ERA5衍生数据、以及1公里级别的WorldClim插值产品。做研究前一定要先读元数据确认分辨率和单位这直接影响后续所有计算的准确性。太阳辐射的单位也很关键。有些数据集给的是MJ/m2/day兆焦每平米每天有些给的是W/m2瓦每平米通常是日均值或瞬时值还有一些给的是kWh/m2千瓦时每平米。单位换算错一位数字差好几倍后面所有统计就全废了。这套数据如果按常见惯例多数是用MJ/m2/day或者kWh/m2来组织具体以你拿到的文件为准。1.2 能解决什么实际问题过去做规划选址想查一个区域30年内的太阳能资源变化趋势最头疼的就是数据口径不统一。今天找到一个气象站点的年总辐射明天找到另一个机构的卫星反演月均产品两者波长定义、时间口径都不一样根本没法串成连续序列。这套逐月栅格数据的好处就在于时间连续且均匀1981到2021每个月都有适合做30-40年的气候趋势分析、波动分析。空间连续全球范围以规则网格组织不需要插值就能覆盖无气象站区域。尺度一致41年数据的空间分辨率、投影、格式统一方便用GIS的栅格计算器或Python做批量时间序列处理。所以它的典型应用场景包括区域太阳能资源评估与光伏电站选址、农业种植区划中的光照适宜性分析、生态模型中光合有效辐射驱动、建筑能耗设计中太阳得热分析等。1.3 适合谁来用空间分析工程师/科研人员需要逐月太阳辐射数据做模型输入需要在GIS里做裁切、重采样、分区统计。能源规划从业者做光伏电站初步选址、区域太阳能开发潜力计算。GIS学习者想找一份真实、连续、有研究价值的数据练手把栅格数据处理的流程完整跑通。农林生态研究者把太阳辐射作为气候变量之一参与作物模型或生态模型驱动。不管你现在是刚接触栅格数据的新手还是已有几年经验的GIS老用户这套数据都能作为很好的练习和实战材料。2. 数据获取与预处理从原始文件到可用栅格2.1 数据源选择与下载渠道当初我找全球长序列太阳辐射数据时试过不少渠道。常见的几个公开来源包括NASA的CERES云与辐射产品、ECMWF的ERA5再分析数据虽然主要是气象变量但包含向下短波辐射、国家青藏高原科学数据中心发布的GLASS全球陆表特征参量产品、以及WorldClim的月气候平均值但是它的时间粒度通常只有12个月平均不够长。对于1981-2021、逐月、全球这三个条件组合比较稳妥的方案是优先考虑GLASS和CERES。GLASS的时空连续性好时间跨度长分辨率能到0.05度甚至更高但数据量特别大下载和存储要注意CERES则更适合研究辐射平衡但产品格式经常是HDF需要额外转换。下载的时候要特别注意版本说明和readme把坐标参考信息、填充值NoData值、比例因子scale factor都记下来。比例因子这个东西特别坑比如原始数据存储为整型真实值存储值×0.01你如果漏了这步导出来的数全错。2.2 原始格式转换与批处理重投影拿到数据之后最常见的麻烦是格式不统一。HDF、NetCDF、TIFF混在一起EPSG投影五花八门。我的习惯是先把全部数据统一处理成WGS84坐标系下的GeoTIFF统一单位统一NoData值然后才进入正式分析。如果你手头有一批NetCDF文件想转成TIFF可以用ArcGIS Pro的“NetCDF转栅格”工具也可以直接用Python的xarray加rasterioimport xarray as xr import rioxarray ds xr.open_dataset(solar_1981_2021.nc) # 这里假设变量名是 ssrd太阳辐射且已经正确处理了时间维度 data ds[ssrd] # 设置空间坐标 data data.rio.set_spatial_dims(x_dimlon, y_dimlat) data.rio.write_crs(EPSG:4326, inplaceTrue) # 输出为GeoTIFF按月份循环取出数据 for t_idx in range(len(data.time)): month_data data.isel(timet_idx) month_data.rio.to_raster(fsolar_{t_idx1:04d}.tif)不过要注意NetCDF文件里的时间维度和空间维度命名不统一lon/lat也可能写成longitude/latitude读数据前先打印ds确认别闭着眼睛写。2.3 裁剪、重采样与单位换算全球范围的栅格文件通常很大。如果研究区是中国某省或某个流域建议第一步就裁剪别整天扛着几十GB的全球数据跑统计。ArcGIS里用“按掩膜提取”工具或者Python里用rasterio的窗口读取效率差别很大。裁剪之前先想清楚研究区在哪个投影带下面积最准确如果做面积统计建议投影到Albers等积投影或UTM投影如果只是看空间分布和提取点值WGS84经纬度坐标也可以用。重采样也要注意方法选择。如果是从0.25度重采样到0.1度属于升采样建议使用双线性插值或三次卷积避免最近邻法造成方块效应如果是从高分辨率降尺度到低分辨率则应该使用聚合方法比如像元平均值这样可以消除锯齿。单位换算建议统一在预处理阶段完成。常见的几个换算关系转换公式备注W/m2 转 MJ/m2/dayMJ/m2/day W/m2 × 0.08641天86400秒1MJ1e6 JMJ/m2/day 转 kWh/m2/daykWh/m2/day MJ/m2/day ÷ 3.61kWh3.6MJ月总量转年总量逐月累计求和注意各月天数不同我过去吃过一次亏数据给的是日均W/m2我直接用栅格计算器把所有月份相加得出一个“年总量”结果比实际值大了365倍。后来做项目汇报时被问住才发现单位没有换算整组结果推倒重来。说实话这种错误特别蠢但真的很常见。3. 核心分析实操逐月数据怎么算、怎么提、怎么看3.1 ArcGIS Pro环境下的导入与基础查看拿到标准化后的TIFF文件第一步是创建一个地图工程把所有月份数据加入场景。ArcGIS Pro对栅格数据支持比较友好直接把文件拖进去就能显示。但这里有个问题如果492个月41年×12个月全部加入图层列表界面会卡到怀疑人生图层管理也非常混乱。我建议用Mosaic Dataset镶嵌数据集或者直接用多维栅格Multidimensional Raster来组织时间序列。ArcGIS Pro支持把多年的逐月栅格构建为一个多维栅格数据这样在“时间滑块”里可以一个图层滑动浏览492个月的动态变化非常直观。具体操作在目录窗格中新建镶嵌数据集然后右键选择“添加栅格”一次性把492个文件都导进去。之后在图层属性里激活“时间”属性设置每个栅格对应的日期字段时间滑块就出来了。3.2 用分区统计计算区域月均值与年总量太阳辐射数据在项目里最常用的操作之一是算一个行政区域或流域范围内的平均太阳辐射值。这里的“平均”不是把所有像元直接相加而是把研究区范围内的栅格像元取均值或者按面积加权。ArcGIS中的“分区统计”工具Zonal Statistics as Table就是干这个用的。举个例子我想算全国每个省份2020年各月的平均太阳辐射需要准备两个输入一个是省份面图层一个是2020年12个月的栅格数据集。在ArcGIS Pro的“分区统计”工具中输入栅格或要素区域数据省份面区域字段省名称字段输入值栅格2020年1月辐射栅格统计类型MEAN或者SUM如果要算区域总辐射能量设置完成后跑一次就得到一张表格每一行是一个省一列是1月的平均辐射。但是12个月就要跑12次手动操作太蠢了。这时候可以用“模型构建器”或者ArcPy批量循环import arcpy from arcpy.sa import * arcpy.env.workspace rD:\solar_data arcpy.env.overwriteOutput True zones rD:\china_admin\province.shp out_gdb rD:\result.gdb for month in range(1, 13): ras fsolar_2020_{month:02d}.tif out_table f{out_gdb}\\zonal_2020_{month:02d} arcpy.gp.ZonalStatisticsAsTable(zones, NAME, ras, out_table, DATA, MEAN) print(f完成{month}月)跑完之后把12张表通过NAME字段连接合并就能得到一张“省份×月份”的宽表后续做统计分析和图表展示就非常方便。计算年总量的时候要注意不能把12个月的MJ/m2/day直接相加应该先按月天数加权求和。比如1月有31天那1月月总量1月日均值×31然后各月累加。这个细节不说清楚新手很容易算错。3.3 站点数据的批量提取Extract Multi Values to Points研究里经常要对比气象站点观测数据与卫星反演的太阳辐射数据验证数据质量或者为站点缺失数据补值。这时候需要把栅格值提取到点上ArcGIS中的“多值提取至点”Extract Multi Values to Points工具非常顺手。使用方法是准备站点要素点图层shp或者GeoJSON都可以。在搜索栏找“Extract Multi Values to Points”。点图层选站点栅格列表可以一次选多个492个文件全选上然后勾选“插值选项”Interpolate option这样在点位置没有精确像元中心时会使用双线性插值提取值。运行后点图层的属性表里会增加492个字段每个字段对应一个月的太阳辐射值。提取完成后可以把属性表导出成CSV在Excel或者Python里做进一步的时间序列分析。这里我的经验是一次性提取几百个栅格内存消耗很大建议分批提取比如每年提取一次然后按站点ID横向合并这样既稳定又方便回溯。3.4 时间序列趋势分析从栅格堆里算出规律逐月太阳辐射数据最大的优势是可以做长周期趋势分析。常见的分析方法是计算年均值的Mann-Kendall趋势检验和Sen斜率。但在GIS层面更直观的是逐像元计算趋势斜率生成一张“太阳能资源变化趋势”空间分布图。具体思路对每一个像元用41年每年的年均辐射值该年12个月日均值取平均做线性回归得到斜率表示每十年辐射增加或减少多少W/m2。最后输出一张全图范围的趋势栅格可以看到哪些区域太阳能资源在增强、哪些在减弱。在Python中可以用numpy向量化实现比ArcGIS的“栅格计算器”快得多import numpy as np from osgeo import gdal # 假设已将41个年均值栅格读入三维数组 annual_stackshape为(41, rows, cols) # 构造自变量时间序列 0-40 x np.arange(41).astype(float) x_mean x.mean() # 对每个像元计算线性趋势 t np.arange(len(x)) slope np.full((annual_stack.shape[1], annual_stack.shape[2]), np.nan) for i in range(annual_stack.shape[1]): for j in range(annual_stack.shape[2]): y annual_stack[:, i, j] if np.any(np.isnan(y)): continue slope[i, j] np.polyfit(t, y, 1)[0] # 输出结果栅格...如果不想写循环也可以用xarray的polyfit方法但对数据格式要求高。ArcGIS Pro里也有“趋势分析”的栅格工具但长序列自行用Python处理更灵活。4. 出图与动态可视化让时间序列看得见4.1 静态分级出图的配色与设置做太阳辐射分布图配色的逻辑很重要。辐射值越低表示资源越差越高表示资源越好所以要选一个双端渐变的色带比如从深蓝到浅黄再到深红中间过渡自然。ArcGIS Pro里常用“连续色带”或“分类色带”推荐使用5-7级分类不要搞得像彩虹图一样花哨看着累而且信息表达不清晰。分级的方法建议用“分位数”而不是“相等间隔”。太阳辐射的空间分布往往不符合均匀分布如果相等间隔分7级可能前6级全挤在一起第7级独大图面失去区分度用分位数分级的颜色分布在直方图上均衡能更好展示空间差异。图例标题建议写成“年平均太阳辐射量kWh/m2/day”这里再次提醒单位图上不写单位等于白做。4.2 用时间滑块制作动态演变图ArcGIS Pro的时间滑块功能可以把镶嵌数据集里的逐月数据按时间顺序播放形成动态图。设置方法简单图层的“时间属性”设置里为每个文件指定对应的月份日期。这样滑动时间条时地图上能清楚地看到太阳辐射带的季节性北移南移、高原地区冬夏差异等规律。导出动态图的话Pro内置的“导出为视频”功能不太稳定至少我用的几个版本都有奇怪的小问题最后我是逐帧截图然后用Python的ffmpeg拼成视频。每帧图片命名时统一用frame_0001.png这种零填充格式这样才能按顺序无缝拼接。4.3 统计图表的配合使用空间图解决了“在哪变化”统计图则解决“变化多大”。把前面分区统计得到的“省份×月份”数据导入Excel或者Python的matplotlib/seaborn画一张41年逐月平均辐射的热力图heatmap横轴是月份纵轴是年份颜色深浅代表辐射值一眼就能看完1981年到2021年所有月份的波动情况。这种图放在论文或者汇报材料里非常加分而且代码也简单import pandas as pd import seaborn as sns import matplotlib.pyplot as plt df pd.read_csv(province_solar_1981_2021.csv, index_col0) # 假设df是某省逐年逐月的透视表行是年份列是月份 plt.figure(figsize(12, 8)) sns.heatmap(df, cmapYlOrRd, cbar_kws{label: 太阳辐射 (MJ/m2/day)}) plt.xlabel(月份) plt.ylabel(年份) plt.title(某省1981-2021年逐月太阳辐射热力图) plt.tight_layout() plt.savefig(solar_heatmap.png, dpi300)实际做的时候热力图特别能暴露数据质量问题比如某一年突然一整行颜色异常那基本可以断定是原始数据存在条带或缺失需要回去检查源文件而不是着急下结论。5. 常见报错与排查实录5.1 栅格显示全黑或NoData新拿到一批辐射数据最怕拖进ArcGIS里显示一片黑。出现这种情况大概率是数据值域或者符号化设置问题。先右键图层打开“符号系统”检查拉伸类型和色带然后查看属性表中的栅格值范围。如果最小值、最大值是0或者1说明数据被当作分类栅格显示如果值域正常但仍然全黑多半是NoData值没被识别比如用-9999表示无效值而软件默认的NoData是0或者没有设置。解决办法是在栅格属性里手动设置NoData值或者用“复制栅格”工具在NoData value参数里填入-9999。数据量大时用“复制栅格”批量处理比较省事。5.2 数据源加载失败与路径报错用ArcPy批量处理时最常见的一个坑是中文路径或者特殊字符。ArcGIS的栅格计算器对中文路径支持不算友好尤其是老版本的ArcMap经常报“ERROR 000732”之类的路径错误。我的习惯是所有中间数据都放在英文路径下项目目录统一命名为solar_project_data不要带空格和中文。另外ArcPy脚本在PyCharm里运行失败很多时候不是代码逻辑问题而是环境问题。ArcGIS的Python环境安装有arcpy包你用PyCharm默认的Python环境去跑当然会报ModuleNotFoundError: No module named arcpy。解决办法是把PyCharm的解释器改成ArcGIS Pro自带的Python环境找到类似C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe这个路径在PyCharm的Settings里添加即可。这个问题发生的频率很高但我每次都要提醒自己先检查解释器别一上来就怀疑代码。5.3 时序数据缺失与异常值41年的逐月数据中间偶尔有一个文件缺失或者数值异常是很正常的事情。尤其在下载大文件时可能出现网络中断导致文件损坏。处理方式分两步先做完整性检查列出全部492个月份文件比对文件数量是否齐全再做数值合理性检查比如太阳辐射日均值在极地冬季可能低至0附近但如果赤道区域的像元出现负值或超过物理上限的值就要警惕。对于缺失月份如果只是研究年均值可以用相邻年份同月平均替代但要在报告中说明插补方式如果做严格的趋势分析还是要尽量获取原始数据或者使用再分析数据补齐。这里不建议在缺失严重的情况下强行插值不然输出分析结论很容易被审稿人问倒。5.4 点提取后字段对应名称混乱用“Extract Multi Values to Points”一次提取几百个字段字段名会按栅格文件名自动生成。如果文件名像raster_001.tif那提取出来的字段就是raster_001你自己再想去对应月份还要查命名表。建议在提取之前先把栅格文件重命名为清晰的时间标识比如solar_1981_01.tif这样字段名直接就是年月后续做透视表也不用手动改名。这个习惯能省大量时间。6. 落地场景三个真实项目的思路复盘6.1 光伏电站选址中的区域资源评估以前参与过一个小型集中式光伏电站的预选址项目业主要求对比三个候选区域过去20年的太阳能资源稳定性。我们当时就是这样做的把2001-2020年逐月辐射栅格按候选区域范围做分区统计得到每个区域每个月的平均太阳辐射序列然后计算了年均值、变异系数、最差月份值三个指标。最终推荐结果不是年均辐射最高的区域而是变异系数最小、最差月份也够用的那个区域。因为光伏电站投资回收期很长如果某个区域夏天特别好、冬天特别差全年波动太大对电网接入和储能配置都不友好。这就是长序列逐月数据的优势不只是看平均还可以看波动和极值。6.2 农业气候区划中的光照因子叠加国内某省做特色水果种植适宜性区划时气候条件里有一项是“年日照时数”或者“太阳辐射总量”。但实际气象站稀疏尤其在高海拔山区空间插值误差很大。后来我们改用这套辐射栅格数据提取全省范围的年均辐射值再叠加高程、坡度、降水数据一起做多因子适宜性评价。栅格数据结构统一做叠加分析时不用重采样操作非常顺畅。不过在叠加之前一定要把所有因子统一到相同分辨率、相同投影和相同边界范围否则栅格计算器经常报“No spatial reference”或“different extents”的错误。我习惯用“重采样”和“按掩膜提取”把所有变量统一到目标栅格的像元大小。6.3 气候长期趋势监测还有一个场景是区域气候变化归因分析。我们曾利用这套数据统计某河流域年均太阳辐射变化趋势发现过去30年太阳辐射呈微弱下降趋势但同期气温却在上升。这个矛盾现象如果只看单一辐射数据可能得出“辐射在减少那气温上升可能不是辐射驱动”的结论但实际上还要考虑云量、气溶胶、反照率等其他因素。所以我说这套数据适合当基础底图但做结论的时候一定不能只靠单要素要注意综合分析避免以偏概全。这个案例也提醒大家数据能告诉你“是什么”但不能直接告诉你“为什么”。做趋势分析时需要结合文獻、其他气候变量数据一起判断物理机制是否合理否则容易在审稿或项目评审时被问倒。我最后想补几句实在的做太阳辐射栅格数据分析最核心的功夫其实不花在“跑通流程”上而是花在“搞清楚数据是什么”上。拿到数据第一件事绝对不是打开ArcGIS拖进去一顿点而是花半小时读README、元数据、变量定义、单位说明。我见过太多人上来就裁剪、重投影、算分区最后检查数据发现单位理解错了整个流程又要重跑。另外和这类长序列全球栅格数据打交道强烈建议从一开始就建立一套标准化的文件命名规则和目录结构。比如主目录下分子目录raw原始下载数据、standardized统一坐标、单位、格式后的数据、zonal_result分区统计结果、figures图表输出。这样后期回溯的时候不会抓瞎尤其是项目做到一半有人辞职或者你出差两周再回来好习惯会救你一命。最后分享一个小技巧如果只是做区域级初筛没必要把全球范围的492个文件全部加载进来。可以先建一个面要素圈定研究区范围用“裁剪栅格”工具批量裁出小范围数据后续计算速度会快好几个量级。我最初用全球数据直接做全省分区统计每次跑要等40分钟裁剪后再跑不到1分钟就出结果。效率提升非常可观强烈建议每个人都养成“先裁剪后计算”的习惯。本文还有配套的精品资源点击获取
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻