☰
太阳高度角、天顶角、太阳方位角:定义、公式与光伏建筑农业实战应用
2026/9/25 10:54:06 网站建设 项目流程

最近在复核一个光伏项目的阴影分析报告,发现团队里几个同事对天顶角、太阳方位角、太阳高度角这三个词的理解不在一个频道上。有人把天顶角当成高度角填进了组件倾角计算,有人拿着合作方给的太阳方位角数据做阵列排布,结果东边和西边完全反了。这些问题在太阳能、建筑采光、农业温室设计里非常常见——三者定义高度相关但又彼此独立,搞混一个,后续所有计算全盘皆错。

如果你正要接触光伏设计、日照分析、建筑节能模拟,或者只是想在户外用手表判断方向,这篇文章都值得花十分钟读完。我会把三个角的定义、底层原理、计算公式、完整算例和行业里的典型错误一次讲清楚,尽量用大白话,但该给公式的地方一个都不会少。

1. 三个"太阳角度"到底是啥:定义、基准、常见误区

1.1 太阳高度角:它只回答"太阳有多高"

太阳高度角(solar elevation angle,常用 h 表示)是太阳光线与其在地平面上投影之间的夹角。直观理解就是:你站在平地,抬头看太阳,视线与地面之间的那个角。日出日落时太阳贴着地平线,h = 0°;正午太阳升到最高,h 达到一天中的最大值。

它的范围其实是 -90° 到 +90°,地平线以下为负值,也就是说晚上太阳高度角也是存在的、只是为负。这听起来像废话,但在计算里非常关键——很多光伏反推算法需要判断太阳是否在地平线以上,用的就是这个符号。

正午高度角有个非常实用的快速算法:

h_noon = 90° - |φ - δ|

其中 φ 是当地纬度,δ 是太阳赤纬。这个公式我建议所有做光伏的人都刻在脑子里,因为组件倾角、前后排遮挡的初步估算全靠它。举个例子:北京纬度约 40°N,夏至赤纬约 +23.45°,正午高度角 = 90 - |40 - 23.45| = 73.45°;冬至赤纬约 -23.45°,正午高度角 = 90 - |40 - (-23.45)| = 26.55°。同一个地方,夏天中午太阳挂得很高,冬天中午却只比地平线高不到27°,这直接决定了冬天光伏发电量的大幅下降。

1.2 天顶角:和高度角互余,但不是"同一个角"

天顶角(solar zenith angle,常用 θ 表示)是太阳光线与天顶方向——也就是从观测点垂直向上的那条线——之间的夹角。

关键关系只有一条:

θ = 90° - h

也就是天顶角和高度角互余。正因为这个简单关系,很多人觉得两者只是同一件事的两种说法,实际上在工程应用中它们的使用场景完全不同。气象数据、辐射模型里经常给的是天顶角而不是高度角,因为很多辐射传输算法按天顶角推导更自然;而光伏人习惯用高度角,因为直观。

我见过非常多的翻车现场:有人把一份气象数据里的天顶角直接当成高度角输进模拟软件,等于把本来该做减法的地方做成了加法,角度整体抬高了。比如高度角30°的数据被当成60°来处理,阵列间距的遮挡计算结果直接崩溃。

一个容易忽略的细节:在太阳刚好在头顶的瞬间,天顶角为0°,高度角为90°,这两者相等;除此之外绝大多数时间,天顶角数值都大于高度角。记住一个画面:太阳在地平线上时,高度角0°,但天顶角是90°——同一时刻两个角差了90°,这就是互余的意义。

1.3 太阳方位角:从哪个基准起算,决定了你看的是哪个世界

太阳方位角(solar azimuth angle,常用 A 表示)描述的是太阳在地平面上的投影方向,即我们常说的"太阳在东南方、西南方"中的具体角度值。

这里有一个大坑:不同学科、不同软件对太阳方位角的起算基准和正方向约定不一致,导致同一时刻的数据在不同系统里看起来完全不同。

常见的约定主要有三种:第一种,从正南方向起算,向西为正、向东为负,范围 -180° 到 +180°,这是中国太阳能行业最常用的约定;第二种,从正北方向起算,顺时针从 0° 转到 360°,这是天文、地理和气象领域常用的约定;第三种,从正南起算但按顺时针方向增加,范围 0° 到 360°,部分国外软件和气象辐射资料会这样用。

这三种约定本身没有优劣,但混用时极为致命。比如同一时刻下午四点的太阳,按第一种约定是 A = +60°(西南方向),按第二种约定是 A = 240°。你要是拿着约定一的数据填进约定二的模型,结果必然是镜像的——正东变成正西,全部反掉。

我在实际项目中处理合作方数据时,第一件事永远是问清对方方位角的基准。而基于各领域经验,这里最稳妥的工作流是:拿到数据后先根据大致时间和地点算一个粗略方位角,再反推对方用的什么约定,全部归一化后再进入后续流程。

1.4 先记住这张表,后面所有计算都是填表

为了让你不看后面也知道怎么区分,我把三者关系整理成一张速查表:

参数物理含义基准面常用范围与另外两个角的关系
太阳高度角 h太阳视线与地平面的夹角水平面-90° ~ +90°h = 90° - θ
天顶角 θ太阳视线与天顶方向的夹角天顶垂线0° ~ 90°(>90°表示在地平线下)θ = 90° - h
太阳方位角 A太阳投影方向与基准方向(南或北)的夹角地平面依约定而定与 h、θ 无简单线性关系

这里最需要警惕的一点是:高度角和天顶角之间只差一次减法,但方位角和它们的计算关系要复杂得多——因为方位角涉及的是"方向"而不是"仰角",球面三角形里的耦合关系决定了它必须用包含时角和纬度的完整公式去计算。基础概念先到这里,接下来进核心原理。

2. 从原理到公式:为什么要用这三个量

2.1 三个底层输入:纬度、赤纬、时角

要算出任意时刻的三个太阳角度,你需要三个底层变量:观测点纬度 φ、太阳赤纬 δ、太阳时角 ω。

纬度好理解,就是你所在位置的南北位置。赤纬是太阳光线与地球赤道平面的夹角,它随季节变化,反映的是地球公转带来的"太阳直射点南北移动"。冬至直射南半球约 23.45°S,夏至直射北半球约 23.45°N,春秋分直射赤道为 0°。工程上最常用的是 Cooper 近似公式:

δ = 23.45° × sin(360° × (284 + N) / 365)

其中 N 是当年第几天。比如 3 月 21 日左右 N 约 80,括号里算出接近 360°,sin 接近 0,δ 接近 0°,和春秋分一致。

时角是三个变量里最容易被算错的一个。它反映地球自转带来的太阳"东升西落",每小时对应 15°:正午时为0°,上午为负,下午为正。比如上午 10 点(真太阳时)时角 = 15 × (10 - 12) = -30°,下午 15 点时角 = 15 × (15 - 12) = +45°。

注意,这里必须用真太阳时,而不是你手机上的北京时间。后面 2.4 我会专门讲这里的坑。

2.2 高度角公式能直接推出什么

有了 φ、δ、ω,太阳高度角的标准公式如下:

sin h = sin φ × sin δ + cos φ × cos δ × cos ω

这个公式是球面三角学里余弦定理在太阳位置计算中的应用,本质上是把天球上的位置关系转成地平坐标系。我不建议死记它,而是建议你把它的几个特例推一遍:

正午时 ω = 0°,cos ω = 1,代入后合并可得 sin h = cos(φ - δ),进而 h = 90° - |φ - δ|——这就回到了前面说的正午高度角快速公式。

日出日落时 h = 0°,sin h = 0,可以反推出日出日落时角 cos ω₀ = -tan φ × tan δ。如果右边绝对值大于 1,说明该地在当前季节出现极昼或极夜。这个判断在做高纬度光伏项目时非常有用。

有了高度角,遮挡分析就顺理成章了。光伏阵列前后排间距设计的基本逻辑是:冬至日(一年中正午高度角最低的日子之一)上午 9 点到下午 3 点之间,前排组件阴影不能遮挡后排。这需要逐时刻算高度角、方位角然后做几何投影,但核心起点就是这条公式。

2.3 方位角公式与象限修正

方位角计算比高度角稍麻烦,因为要处理象限。一个工程上很好用的计算公式是从正南起算、西正东负的 atan2 形式:

A = atan2( sin ω, cos ω × sin φ - tan δ × cos φ )

这里的 atan2 是带符号的反正切函数,会自动根据分子分母的正负确定结果落在哪个象限,一次出值,不用手工修正。

如果你的计算工具没有 atan2(比如某些老旧的表格工具),可以用余弦公式先算从正北起算的方位角:

cos A_north = (sin δ - sin φ × sin h) / (cos φ × cos h)

然后根据上下午判断方向:上午太阳在东侧,A_north < 180°;下午太阳在西侧,A_north > 180°。这种方式勉强可用,但注意当太阳接近天顶时 cos h 接近 0,公式会变得不稳定,所以我还是推荐 atan2。

一个快速自检方法是:北半球任何一天,正午之前太阳方位应该在东半边(也就是从南起算为负值或者从北起算小于180°),正午之后在西半边。如果在下午算出来一个负值方位角,多半是你把符号约定搞反了。

2.4 真太阳时与"钟表时间"的坑

这是太阳位置计算里最容易翻车的环节,值得单独展开。

时钟上的时间叫钟表时间(或平太阳时),它与真太阳时之间存在两个偏差:经度造成的偏差和地球公转速度不均匀造成的均时差。

经度偏差的修正方法:你所在经度与所在时区的标准经度每差 1°,时间差 4 分钟。比如北京在东经 116.4°,位于东八区,标准经度是 120°E,那么本地真太阳时要减去 (120 - 116.4) × 4 = 14.4 分钟。

均时差是地球轨道离心率和黄赤交角共同作用的结果,全年在 -14 到 +16 分钟之间波动。工程上可用近似公式:E = 9.87 × sin(2B) - 7.53 × cos(B) - 1.5 × sin(B),其中 B = 360° × (N - 81) / 364。

真太阳时 = 钟表时间 + 经度修正 + 均时差。

举个例子:北京时间 14:00,东经 116.4°,N = 172(6月21日),经度修正 -14.4 分钟,均时差约 -1.5 分钟(6月下旬),真太阳时 ≈ 13:44,时角 ω = 15 × (13.73 - 12) ≈ 26°。

我见过不少人在这一步直接用 14:00 算时角,把 ω 写成 30°,导致最终高度角差了一度多。对于阵列间距设计来说,这一两度就会让阴影长度差出十几厘米,积累起来不可忽视。

3. 实战:一个算例走完三个角度

3.1 手算完整流程,从北京夏至下午两点开始

理论讲完,我们实际算一遍。目标:北京市区(约 40°N,116.4°E),6 月 21 日北京时间 14:00,求三个太阳角度。

第一步,算日序 N。6 月 21 日在平年里是第 172 天(31+28+31+30+31+21 = 172)。

第二步,算赤纬 δ。用 Cooper 公式:δ = 23.45 × sin(360 × (284 + 172) / 365) = 23.45 × sin(449.75°)。449.75° 减去 360° 后等于 89.75°,sin 89.75° ≈ 0.99992,所以 δ ≈ 23.45°。和夏至日理论值一致。

第三步,算真太阳时,得到时角。北京时间 14:00,经度修正:116.4° 与 120° 差 3.6°,3.6 × 4 = 14.4 分钟,因为是向西偏移,真太阳时要减去 14.4 分钟。均时差按前述公式估算约 -1.5 分钟。真太阳时 = 14:00 - 14.4 - 1.5 ≈ 13:44。时角 ω = (13 + 44/60 - 12) × 15 ≈ 26°。

第四步,算高度角。sin h = sin 40° × sin 23.45° + cos 40° × cos 23.45° × cos 26°。取 sin 40° = 0.6428,sin 23.45° = 0.3978,cos 40° = 0.7660,cos 23.45° = 0.9174,cos 26° = 0.8988。代入:0.6428 × 0.3978 = 0.2557,0.7660 × 0.9174 × 0.8988 = 0.6319。相加得 0.8876,反算 h ≈ 62.5°。

第五步,算天顶角。θ = 90° - 62.5° = 27.5°。

第六步,算方位角。用 atan2 公式:A = atan2( sin 26°, cos 26° × sin 40° - tan 23.45° × cos 40° )。sin 26° = 0.4384;tan 23.45° = 0.4336。分母 = 0.8988 × 0.6428 - 0.4336 × 0.7660 = 0.5778 - 0.3321 = 0.2457。atan2(0.4384, 0.2457) ≈ 60.7°。结果为正,表示太阳在西南方向,从正南向西偏约 60.7°。

手算完成,结果可以做个合理性检查:夏至北京正午高度角 73.45°,下午两点的 62.5° 比正午低 10° 左右,时角 26°、方位角 60.7°,太阳确实在西南方,一切符合直觉。

3.2 Python 脚本:30 行搞定任意时间地点

手算做一次可以加深理解,但实际生产里你大概率需要批量计算。我给一个简短的 Python 实现,基于标准库 math,无需安装任何第三方包,适合集成到小工具里。

import math from datetime import datetime def solar_position(dt, lat, lon, tz_hour=8): # dt: 本地时间,lat: 纬度(北正南负),lon: 经度(东正西负),tz_hour: 时区 N = dt.timetuple().tm_yday # 赤纬(Cooper近似) delta = 23.45 * math.sin(math.radians(360 * (284 + N) / 365)) # 均时差(分钟) B = math.radians(360 * (N - 81) / 364) eot = 9.87 * math.sin(2 * B) - 7.53 * math.cos(B) - 1.5 * math.sin(B) # 真太阳时(小时) true_solar_time = dt.hour + dt.minute / 60.0 + (lon - tz_hour * 15) * 4 / 60.0 + eot / 60.0 omega = 15.0 * (true_solar_time - 12.0) phi = math.radians(lat) dlt = math.radians(delta) omg = math.radians(omega) sinh = math.sin(phi) * math.sin(dlt) + math.cos(phi) * math.cos(dlt) * math.cos(omg) h = math.degrees(math.asin(sinh)) theta = 90 - h az_atan = math.degrees(math.atan2(math.sin(omg), math.cos(omg) * math.sin(phi) - math.tan(dlt) * math.cos(phi))) return h, theta, az_atan # 北京夏至下午2点 dt = datetime(2025, 6, 21, 14, 0) h, theta, az = solar_position(dt, 40.0, 116.4, 8) print(f"高度角 {h:.1f}°, 天顶角 {theta:.1f}°, 方位角(南为0西正) {az:.1f}°")

运行结果应该和手算高度角 62.5°、方位角 60.7° 基本一致。脚本里把经度、时区、均时差全部纳入了真太阳时修正,换任何城市都只需要改参数。一个提醒:代码里方位角用的是从正南起算、西正东负的约定,如果你需要从北起算,加一句az_north = (az + 180) % 360即可。

3.3 用 Excel 也能算,在项目里更常见

如果项目要求可复现的表格存档,Excel 反而是更好的选择。我常在配表格里这样设置:

A 列填日序 N,B 列填纬度,C 列填赤纬,D 列填时角,E 列填高度角,F 列填方位角。Excel 的三角函数默认用弧度,所以公式里要包一层 RADIANS。以 E 列为例:=DEGREES(ASIN(SIN(RADIANS(B2))*SIN(RADIANS(C2))+COS(RADIANS(B2))*COS(RADIANS(C2))*COS(RADIANS(D2))))。F 列方位角用=DEGREES(ATAN2(COS(RADIANS(D2))*SIN(RADIANS(B2))-TAN(RADIANS(C2))*COS(RADIANS(B2)), SIN(RADIANS(D2))))。

这里有个很重要的参数顺序问题:Excel 的 ATAN2(x_num, y_num) 第一参数是 x 坐标、第二参数是 y 坐标,和其他语言的 atan2(y, x) 顺序相反,上面公式是把 x 放前面、sin ω 放后面。很多人在这里栽过跟头,出来的方位角整个反了。建议写完公式后用一组已知数据(比如北京夏至正午、春分上午 10 点)先校对一轮,再投入正式使用。

4. 行业里的实际用法:光伏、建筑、农业都在用这三个角

4.1 光伏:组件倾角选多少,阵列间距怎么排

光伏行业的太阳角度计算贯穿设计全流程。组件倾角优化的目标是让全年发电量最大,工程上常用"全年辐照量最大倾角"经验值——大部分地区在纬度附近加减 10° 左右,但真想做好,就得逐时计算太阳位置,模拟倾斜面上的逐时光照。这个模拟的核心输入之一就是太阳高度角:直射分量需要根据入射角(组件法线与太阳光线夹角)做余弦修正,而入射角由组件倾角、方位角和太阳高度角、方位角共同决定。

阵列间距设计则主要依赖冬至日的极端低太阳高度角。以纬度 40° 地区为例,冬至正午高度角约 26.5°,上午 9 点可能只有 12° 左右。前后排间距要保证这些低角度时刻不被前排遮挡,计算公式为:D = H × cos A / tan h,其中 H 是前排组件顶端相对后排底端的高度差,A 和 h 是该时刻的方位角和高度角。你可以看到,方位角和高度角在这里共同决定了阴影方向和长度,缺一不可。

追踪系统就更依赖准确方位角了。平单轴追踪器要根据太阳方位角实时调整组件朝向,算法错误哪怕只偏 5°,全天发电量就会掉 1% 到 3%。我见过某项目直接把气象数据里的方位角按默认约定接进追踪算法,结果所有追踪角度镜像,发电量反而大幅低于固定支架。

4.2 建筑:遮阳板尺寸和日照分析

建筑日照分析软件(如天正、绿建斯维尔)计算日照时间时,用的是太阳高度角和方位角逐时逐分的数据。遮阳设计里,比如你给西向窗户设计水平遮阳板,需要知道夏季下午太阳的高度角和方位角,来确定板出挑长度——高度角决定垂直投影长度,方位角决定水平偏移,两者配合才能确保遮阳又不挡光。

这里有个很多建筑师容易忽略的点:日照分析软件里的太阳方位角基准和光伏软件常常不同。建筑师习惯从正北起算、顺时针 0° 到 360°,光伏工程师习惯从正南起算、西正东负,两者相差 180° 再加镜像关系。当你跟建筑专业对数据时,务必先搞清楚双方模型里的约定,否则图纸上看着合理的遮阳板实际效果完全不同。

另外,国内建筑日照标准中要求的是"有效日照时间",不同城市规定不同,有的是大寒日、有的是冬至日,计算时必须按对应日期的太阳轨迹来分析。这直接决定了小区楼间距、户型开间等关键决策。楼间距不够导致冬至日底层住户无直射光,在多地规划验收时一票否决,背后全是太阳高度角的事。

4.3 农业与生态:温室透光率怎么估算

农业温室大棚的采光设计同样离不开这三个角。温室朝向的选择依据是冬季太阳方位角分布区间——北半球温室通常朝正南或南偏东 5° 到 10°,目的是在冬季太阳高度角低的时候尽量多捕获下午的阳光,因为下午气温较高,光合作用效率也好。

温室屋面倾角的设计则会参考冬季正午的太阳高度角:如果屋面倾角接近 90° 减去正午高度角,太阳光在中午前后能近似垂直入射到屋面上,反射损失最小。比如北方地区冬季正午高度角约 30°,屋面倾角取 50° 到 60° 比较合适。这里如果误把天顶角当成高度角来算,设计角度会完全偏掉,冬季透光率大幅下降。

还有农业上常用的"影子判断方向"法——立一根杆,影子最短的时刻是当地真太阳时正午,影子指向正北(北半球)。这个方法的原理就是正午时太阳高度角最大、方位角为 180°(从北起算)或 0°(从南起算)。手表定向法也是基于太阳方位角的粗略估算,北半球将时针指向太阳,时针与 12 点方向的角平分线就是正南方向,但这个方法在太阳高度角很低和纬度较高时误差明显,原理就是此时方位角与表盘角度的对应关系被破坏了。

5. 高频翻车现场与避坑清单

5.1 天顶角当高度角用,差出来的 30° 白给

这是我在各类项目里见到最多的低级错误。很多气象数据文件里提供的是天顶角,比如某些典型气象年文件里的辐射模型参数,或者卫星遥感反演产品。开发者看到"zenith angle"字段就直接当成高度角去用,结果在北纬 35° 左右地区,正午前后的天顶角大约 30° 到 55°,跟高度角完全是两个量级,代入遮挡计算后整个阵列间距模型崩溃。

我的建议是:拿到任何数据源后,先别管后续流程,单独检查这个角度字段的数值分布。如果一天中正午前后数值最小、早晚最大,这是天顶角;如果中午最大、早晚为零左右,这是高度角。用这个分布特征几十秒就能判断清楚。

5.2 方位角基准不同,影子"镜像"全错

方位角约定的问题在前面已经反复提过。实际项目中,国际气象数据库(比如美国能源部的 TMY 数据)里太阳方位角从北起算、顺时针增加;国内很多设计院的小工具从南起算、西正东负;还有一些海外软件从南起算但按顺时针取 0° 到 360°。三个约定之间互相转换不是简单加减一个常数,还可能涉及正负号翻转。

最实用的排查技巧是取一个特征时刻做验证:北半球正午太阳应该在正南方向(从北起算为 180°,从南起算为 0°),上午在东南方向(从北起算约 90° 到 180° 之间,从南起算为负或 0° 到 -90°)。如果某个数据在正午输出的是 0° 而不是 180°,大概率它用的是从南起算的约定,你要么整体换算、要么让输出方统一。

5.3 本地时间、首都时间、真太阳时,傻傻分不清

时区问题也是高频坑。中国地跨五个地理时区,但全国统一用北京时间,这意味着新疆、西藏、云南等地的地方钟表时间和当地真太阳时可能差出一两个小时。以乌鲁木齐(约 87°E)为例,当地时间中午 12 点时,北京时间已经 14 点,真太阳时约 14:00,时角达 30°——如果你直接用北京时间 12 点去算太阳位置,算出来的太阳还在东边大角度位置上,实际太阳却已经在西南方了。

凡是要精确计算太阳位置的场景,都必须先做经度修正和均时差修正,再进入角度计算。我推荐在项目脚本里把真太阳时作为一个独立变量输出,方便核对。

5.4 大气折射和海拔修正:什么时候需要的、什么时候别加

太阳高度角的几何公式没有考虑大气折射,而实际观测中太阳光线穿越大气层会发生偏折,使得太阳看起来比实际位置高。在地平线附近,折射可以让高度角增加约 0.5°——这就是日出日落时太阳看起来扁的原因之一。当太阳高度角大于 10° 时,折射修正量通常小于 0.1°,可以忽略。

工程上我的建议很简单:除天文观测、日出日落时刻精确计算之外,一律忽略折射修正。如果你做的是日出日落特别长的高纬度项目,可以用简化的 Bennett 公式近似修正,但普通光伏、建筑项目用这个修正纯属给自己添乱,因为后续模拟精度根本达不到这个量级。

海拔的影响主是大气密度变化对折射的影响,在太阳角度几何计算里完全可以忽略。

5.5 三个角快速自查口诀,实测下来真的好用

给一套我用了很多年的快速检查方法,做完任何太阳角度计算后顺手过一遍,能揪出九成以上的方向性错误:

  • 正午高度角 = 90° - |φ - δ|,如果算出来偏差超过 1°,检查时角和赤纬。
  • 上午太阳方位必在东侧,下午必在西侧。北半球从南起算:上午 A < 0,下午 A > 0。
  • 天顶角永远大于等于高度角(太阳在地平线上时大 90°,在天顶时相等为 0°——其实是天顶角最小为 0、高度角最大为 90)。
  • 正午前后方位角变化最快,尤其是低纬度地区,正午时刻附近方位角可能从 +89° 直接跳到 -89°,这不是公式错了,这是角度穿越北方向/南方向时的正常跳变。

再补充一条数据处理的建议:所有外部输入的太阳角度数据,入库前做一次"全年逐时回放",把每个时刻的角度画成太阳轨迹图(高度角 vs 方位角)。如果轨迹在夏季和冬季呈平滑的拱形曲线,数据大体可信;如果出现突变、跳跃、镜像,说明角度约定或时区处理有误。这一步值得投入半小时,能省下一百小时的返工。

最后分享一点实际体会

我最初学这三个角的时候,也被各种公式和约定绕得头昏。现在回头看,最关键的不是背公式,而是建立一套"验证直觉"的工作习惯:无论用哪个工具、哪份数据,先拿一个你已经知道答案的时刻去反推,确认方向和量级都对,再放手处理批量数据。太阳位置计算是太阳能、建筑、农业领域所有分析的基石,这一层错了,上面再漂亮的算法都白搭。希望这篇文章能帮你少踩几个我曾经踩过的坑。

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

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

立即咨询