光伏

太阳位置算法 SPA — Reda & Andreas 2004 与光伏建模

· 南京运梦科技算法团队 · 评审 算法负责人

太阳位置算法 SPA — Reda & Andreas 2004 与光伏建模 封面

做光伏发电量评估时,很多团队会先纠结于辐射数据的来源和精度,却忽略了一个更基础的问题:在任意时刻,太阳究竟在天上的哪个位置?这个看似简单的几何问题,恰恰是把水平面辐射换算到组件倾斜面、控制跟踪支架转角、计算阴影遮挡的前提。如果太阳角度算错了几分之一度,单轴跟踪支架就会偏离最优朝向,倾斜面辐射的转置结果也会系统性失真,最终体现为发电量预测与实际出力之间难以解释的偏差。

更麻烦的是,太阳位置并不是一个能直接"测出来"的量。它取决于日期、时刻、观测点的经纬度与海拔,还要考虑地球公转轨道的细微摄动、章动、岁差以及大气折射等天文与物理因素。早年工程界普遍使用简化公式,在一年中的大部分时段尚可,但在日出日落附近、在高纬度地区、在需要长时间序列稳定性的场景下,误差会被逐步放大。

Reda 与 Andreas 在 2004 年提出的太阳位置算法(Solar Position Algorithm,简称 SPA),正是为了解决这一类高精度需求而生。它把天文学界成熟的高精度历表算法工程化,给出了一套可直接落地的太阳天顶角与方位角计算流程,成为今天几乎所有专业光伏建模工具的几何基石。本文梳理这篇论文的核心内容,并说明它与运梦气象 API 辐射字段的配合方式。

关键要点

  • SPA 由美国国家可再生能源实验室(NREL)的 Reda 与 Andreas 提出,用于计算太阳天顶角(zenith)与方位角(azimuth)。
  • 算法标称不确定度约为 ±0.0003°,适用年份范围覆盖公元 -2000 年至 6000 年,精度与时间跨度都远超传统简化公式。
  • 输入为日期时间、经纬度、海拔、气压与气温,其中气压和气温用于大气折射订正;输出包括太阳天顶/高度角、方位角、日出日落时刻与表面入射角。
  • 主要用途:单/双轴跟踪支架的角度控制、把水平面辐射转置到倾斜面(POA)所需的入射角余弦、以及阴影分析。
  • SPA 本身只算太阳几何,不依赖气象数据;但当你要把运梦 API 的 rsds/dni/dhi 转置到组件倾斜面时,必须用 SPA 算出的太阳天顶角与入射角。

背景与定位

这篇论文的题目是《Solar position algorithm for solar radiation applications》,作者 Ibrahim Reda 与 Afshin Andreas 来自美国国家可再生能源实验室(NREL),发表于 2004 年的 Solar Energy 期刊第 76 卷第 5 期,577–589 页。两位作者长期从事太阳辐射测量与仪器标定工作,对"辐射应用场景下到底需要多高的太阳位置精度"有第一手的工程理解,这也决定了 SPA 不是一篇纯理论文章,而是一份面向实现的工程规范。

SPA 的核心思路并非从零推导天体力学,而是把 Meeus 在《Astronomical Algorithms》中给出的高精度天文算法,针对太阳辐射应用场景进行整理、裁剪与封装。论文按步骤列出了从儒略日计算、地球日心经纬度、章动与岁差订正、视太阳黄经,一直到最终太阳天顶角与方位角的完整流程,并配套提供了可直接核对的中间量数值与参考实现。这种"逐步可验证"的写法,使工程团队能够把算法准确无误地移植到自己的代码里。

它的意义在于,把一个原本属于天文学专业领域的高精度计算,转化为新能源工程师可以直接调用的标准工具。在此之前,行业内常见的简化太阳位置公式各有取舍,精度与适用范围不一,团队之间的结果难以直接比较。SPA 提供了一个公认的高精度基准:无论是科研机构、设备厂商还是开发商,只要采用同一套算法,太阳几何这一层就不再是误差与争议的来源。需要说明的是,原文在 2007 年发表过一则勘误(corrigendum),对附录中的部分公式作了修订,工程实现时应参照修订后的版本。

方法 / 它做了什么

从输入输出的角度看,SPA 的接口非常清晰。输入包括:观测时刻(年月日时分秒,以及与 UTC 的时差)、观测点的经度与纬度、海拔高度,以及当地的气压与气温。其中气压和气温并不参与天体位置的天文计算,而是专门用于大气折射订正——光线穿过大气层时会发生弯曲,使我们看到的"视太阳位置"略高于几何位置,这一偏差在地平线附近尤为显著,必须用当地大气状态加以修正。

算法的输出则覆盖了光伏与辐射应用最关心的几个角度量:太阳天顶角(即太阳与天顶方向的夹角,其余角为太阳高度角)、太阳方位角、当天的日出与日落时刻,以及针对任意朝向倾斜面的太阳入射角。这些量构成了后续所有辐射几何计算的基础。

在内部实现上,SPA 沿用了 Meeus 天文算法的高精度框架:先把输入时刻转换为儒略日与儒略千年数,再依次计算地球的日心黄经、黄纬与日地距离,叠加章动与黄赤交角订正,得到太阳的视黄经;随后转换到赤道坐标系得到赤经与赤纬,结合观测点的地方时角,最终解算出地平坐标系下的天顶角与方位角。整个链条环环相扣,每一步都对应明确的天文物理含义。

正因为采用了这套严谨的算法,SPA 在论文中给出的标称不确定度约为 ±0.0003°,适用的年份范围从公元 -2000 年一直延伸到 6000 年。这意味着它既能满足当下工程对太阳角度的极高精度要求,也能在长时间历史回算与未来推演中保持稳定,不会像简化公式那样在远离基准年份时迅速退化。

落到应用层面,SPA 解决的是三类典型问题:其一是跟踪支架的角度控制,单轴或双轴跟踪系统需要实时知道太阳方位与高度,才能驱动组件追日;其二是辐射转置,把测站或再分析数据中的水平面辐射换算到组件实际倾斜面(plane-of-array, POA),关键就在于太阳入射角的余弦;其三是阴影分析,前后排组件之间、周边建筑或地形的遮挡,都依赖准确的太阳高度角与方位角来判断。

关键结论

  1. SPA 由 NREL 的 Reda 与 Andreas 提出,给出了一套用于太阳辐射应用的高精度太阳位置计算流程,输出太阳天顶角与方位角等几何量(原文结论)。
  2. 算法的标称不确定度约为 ±0.0003°,适用年份范围为公元 -2000 年至 6000 年,在精度与时间跨度上都显著优于传统简化方法(原文结论)。
  3. SPA 以 Meeus 天文算法为基础,按步骤给出从儒略日到地平坐标的完整计算链,并提供可核对的中间量,便于工程团队准确移植(原文结论)。
  4. 算法输入包含气压与气温,专门用于大气折射订正;输出还涵盖日出日落时刻与任意倾斜面的入射角,直接服务于跟踪、转置与阴影分析(原文结论)。
  5. 工程实践中,太阳几何误差通常远小于辐射数据本身的不确定度,因此采用 SPA 这类高精度算法后,发电量建模的主要误差来源会回归到辐射输入与组件模型一侧——此为业界经验,非原文具体数值结论。

对新能源 / 运梦平台的意义

对光伏项目而言,太阳位置算法的价值在于它是一切辐射几何计算的"零误差起点"。辐射数据本身存在观测与模型不确定度,组件、逆变器、温度模型也都有各自的误差,唯独太阳在天上的位置可以做到几乎无误差地确定。把这一层用 SPA 锁死,意味着后续所有偏差都能更清晰地归因到辐射输入或设备模型,而不是被太阳几何的系统性误差所污染,这对于诊断发电量偏差、优化跟踪策略至关重要。

在运梦平台的工作流中,SPA 与辐射数据是互补关系:运梦气象 API 负责提供水平面总辐射(rsds,即 GHI)、直接法向辐射(dni,即 DNI)与散射辐射(dhi,即 DHI),而 SPA 负责提供把这些水平/法向量转换到组件倾斜面所需的太阳天顶角与入射角。两者结合,才能算出真正落在组件平面上的 POA 辐射,进而驱动发电量模型。需要强调的是,SPA 本身不需要任何气象数据即可运行——它只看时间与地理位置;气象数据是在转置这一步才被引入的。

数据源的选择上,运梦平台对历史与预报场景做了清晰区分:历史辐射分析建议使用 era5 数据源,它提供长时间、覆盖全球的再分析序列,适合做资源评估、TMY 构建与历史复盘;面向未来的辐射预报则使用 ger 数据源(德国气象局),适合做短期发电量预测与运营调度。无论选用哪个数据源,太阳几何这一层都由 SPA 统一负责,保证不同时间段、不同站点之间的结果可比。

从工程落地角度,这种"几何归 SPA、数据归 API"的分工还有一个好处:算法与数据解耦,便于独立验证。团队可以先用 SPA 的参考数值核对自己的太阳位置实现是否正确,再单独评估辐射数据质量,最后把两者拼接起来跑转置与发电量。每一环都可单独追溯,整条链路的可信度和可维护性都会明显提升。

在运梦气象 API 上手

下面给出一个最小可用的取数示例:通过 downloadSync 接口拉取某站点的历史辐射与气温序列,用于配合 SPA 做倾斜面转置与发电量建模。这里选用 era5 历史数据源,请求 rsds、dni、dhi 与 tas 四个字段;其中 rsds/dni/dhi 单位为 W/m²,tas 单位为 °C。拿到水平面辐射后,再用 SPA 依据时间与经纬度算出太阳天顶角与组件入射角,即可把 GHI/DNI/DHI 转置为 POA 辐射。

注意时间字段 stime/etime 采用 YYYY-MM-DD HH:MM 格式,timezone 以字符串小时数表示(东八区为 "8")。SPA 计算时务必使用与气象数据一致的时间基准,避免时区错位导致太阳位置整体偏移。

{
  "dataSourceId": "era5",
  "lat": 32.06,
  "lon": 118.78,
  "stime": "2026-06-01 00:00",
  "etime": "2026-06-01 23:00",
  "fields": ["rsds", "dni", "dhi", "tas"],
  "timezone": "8"
}

常见问题

问:SPA 需要输入气象数据才能算太阳位置吗? 答:不需要。SPA 计算太阳几何只依赖时间、经纬度与海拔。气压与气温是可选输入,仅用于大气折射订正以提升地平线附近的精度。气象数据(如辐射)是在把太阳角度用于辐射转置那一步才被引入的。

问:我已经有了 rsds,为什么还要算太阳天顶角和入射角? 答:rsds 是水平面总辐射(GHI),而光伏组件通常是倾斜安装的。要得到真正落在组件平面上的 POA 辐射,必须借助太阳天顶角与组件入射角,把水平/法向辐射分量转置到倾斜面,这正是 SPA 的用武之地。

问:±0.0003° 这个精度在实际项目里有意义吗? 答:对绝大多数发电量建模场景,太阳几何误差远小于辐射数据本身的不确定度,因此 SPA 的高精度足以让太阳位置不再成为误差来源。它真正的价值在于稳定可比,以及在跟踪控制、阴影分析等对角度敏感的环节提供可靠基准。

问:历史分析和预报应该分别用哪个数据源? 答:历史辐射用 era5 数据源,适合资源评估与历史复盘;面向未来的辐射预报用 ger 数据源(德国气象局),适合短期发电量预测与调度。太阳几何这一层始终由 SPA 统一负责,两类场景结果可比。

问:实现 SPA 时要注意论文勘误吗? 答:要。原文在 2007 年发表过一则 corrigendum,对附录中的部分公式作了修订。工程实现时应以修订后的版本为准,并用论文提供的参考数值逐步核对自己的实现,确保中间量与最终角度都正确。

引用与原文

Reda, I., & Andreas, A. (2004). Solar position algorithm for solar radiation applications. Solar Energy, 76(5), 577–589. doi.org/10.1016/j.solener.2003.12.003