太阳天顶角和方位角计算


计算太阳天顶角方位角,不知道在线计算器算得准不准,今天自己来验证一下。


参数

位置:东经115.78388,北纬40.34924
时间:2019/10/08 -- 10:20AM
海拔:481米
时间制式:24h
时区:H(GMT+8:00)
基准时间:太阳时
零方位角:北

真太阳时

先根据北京时间计算得到东经115.78388的平太阳时

10:20-(120-115.78388)*4=10:03:08

再根据10月08号的真太阳时时差为+12分44秒计算得到对应的真太阳时

10:03:08+00:12:44=10:15:52=10.264h

太阳时角

t=(10.264-12)*15=-26.04°

太阳赤纬

这里补充说明一下。

太阳赤纬,是地球赤道平面与太阳和地球中心的连线之间的夹角。赤纬角以年为周期,在 ±23°26′ 的范围内移动,成为季节的标志。
赤纬值日变化很小,一年内任何一天的赤纬角δ可用下式计算:

sinδ=0.39795*cos[0.98563*(N-173)/180*PI]

式中N为日数,自每年1月1日开始计算,δ单位为弧度。

更准确的太阳赤纬计算公式则为:

δ=0.006918-0.399912*cos(b)+0.070257*sin(b)-0.006758*cos(2*b)+0.000907*sin(2*b)-0.002697*cos(3*b)+0.00148*sin(3*b)

其中delta的单位为度(deg),b单位为弧度。

下面采用简化公式进行计算:

2019年10月08号对应的N=281
sinδ=0.39795*cos[0.98563*(108)/180*PI]≈-0.112678
δ=-6.4697°(这里为了计算方便保留度的单位)

太阳高度角

sinHs=sin(40.34924)*sin(-6.4697)+cos(40.34924)*cos(-6.4697)*cos(-26.04)≈0.6067
Hs≈37.367°

太阳天顶角与高度角互余,那么太阳天顶角就等于:

SZA=90°-Hs≈52.633°

太阳方位角

cosAs=(sinHs*sin(40.3924)-sin(-6.4697))/(cosHs*cos(40.3924))≈0.83574
As≈33.307°

此处的方位角是以南为零方位角的,转换为以北为零方位角:

SAA=180°-As=146.693°

结果对比与总结

相同参数下在线计算器计算结果:

在线计算器计算的太阳高度角和方位角
整理至一张表中:

-SZASAA
手算52.633°146.693°
在线算51.49°147.4°

如果前面的计算没有什么问题,结合在线计算器中给出的偏差,同时考虑到太阳赤纬计算公式的不同,以及计算过程中多次的四舍五入,可以认为两者的偏差是可接受的。
如果后续研究中并不需要很高的精度,可以直接采用在线计算器计算得到,上述计算过程可以为结果提供理论依据。

  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
以下是用Python实现计算太阳顶角方位角,卫星顶角方位角的代码: ```python import math # 计算太阳顶角 def solarZenithAngle(latitude, longitude, year, month, day, hour, minute, second): # 计算儒略日 J0 = 367 * year - int((7 * (year + int((month + 9) / 12.0))) / 4.0) + int(275 * month / 9.0) + day + 1721013.5 UT = hour + minute / 60.0 + second / 3600.0 T = (J0 - 2451545.0 + UT / 24.0) / 36525.0 # 计算太阳平均位置 L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T**2 M = 357.52910 + 35999.05030 * T - 0.0001559 * T**2 - 0.00000048 * T**3 C = (1.914600 - 0.004817 * T - 0.000014 * T**2) * math.sin(math.radians(M)) + (0.019993 - 0.000101 * T) * math.sin(math.radians(2 * M)) + 0.000290 * math.sin(math.radians(3 * M)) sunLongitude = L0 + C # 计算太阳赤纬角 epsilon = 23.439 - 0.0000004 * T alpha = math.atan2(math.cos(math.radians(epsilon)) * math.sin(math.radians(sunLongitude)), math.cos(math.radians(sunLongitude))) delta = math.asin(math.sin(math.radians(epsilon)) * math.sin(math.radians(sunLongitude))) # 计算太阳时角 hourAngle = math.radians(15.0 * (12.0 - longitude / 15.0 - UT)) # 计算太阳高度角 solarZenithAngle = math.acos(math.sin(math.radians(latitude)) * math.sin(delta) + math.cos(math.radians(latitude)) * math.cos(delta) * math.cos(hourAngle)) return math.degrees(solarZenithAngle) # 计算太阳方位角 def solarAzimuth(latitude, longitude, year, month, day, hour, minute, second): # 计算儒略日 J0 = 367 * year - int((7 * (year + int((month + 9) / 12.0))) / 4.0) + int(275 * month / 9.0) + day + 1721013.5 UT = hour + minute / 60.0 + second / 3600.0 T = (J0 - 2451545.0 + UT / 24.0) / 36525.0 # 计算太阳平均位置 L0 = 280.46645 + 36000.76983 * T + 0.0003032 * T**2 M = 357.52910 + 35999.05030 * T - 0.0001559 * T**2 - 0.00000048 * T**3 C = (1.914600 - 0.004817 * T - 0.000014 * T**2) * math.sin(math.radians(M)) + (0.019993 - 0.000101 * T) * math.sin(math.radians(2 * M)) + 0.000290 * math.sin(math.radians(3 * M)) sunLongitude = L0 + C # 计算太阳赤纬角 epsilon = 23.439 - 0.0000004 * T alpha = math.atan2(math.cos(math.radians(epsilon)) * math.sin(math.radians(sunLongitude)), math.cos(math.radians(sunLongitude))) delta = math.asin(math.sin(math.radians(epsilon)) * math.sin(math.radians(sunLongitude))) # 计算太阳时角 hourAngle = math.radians(15.0 * (12.0 - longitude / 15.0 - UT)) # 计算太阳高度角 solarZenithAngle = math.acos(math.sin(math.radians(latitude)) * math.sin(delta) + math.cos(math.radians(latitude)) * math.cos(delta) * math.cos(hourAngle)) # 计算太阳方位角 solarAzimuth = math.atan2(math.sin(hourAngle), math.cos(hourAngle) * math.sin(math.radians(latitude)) - math.tan(delta) * math.cos(math.radians(latitude))) return math.degrees(solarAzimuth) # 计算卫星顶角 def satelliteZenithAngle(satelliteElevation): return 90.0 - satelliteElevation # 计算卫星方位角 def satelliteAzimuth(satelliteElevation, satelliteAzimuth, latitude, longitude): az = math.atan2(math.sin(math.radians(satelliteAzimuth)), math.cos(math.radians(satelliteAzimuth)) * math.sin(math.radians(latitude)) - math.tan(math.radians(satelliteElevation)) * math.cos(math.radians(latitude))) if az < 0: az += 2.0 * math.pi return math.degrees(az) ``` 以上代码中,`latitude`表示观测点的纬度,`longitude`表示观测点的经度,`year`、`month`、`day`、`hour`、`minute`、`second`表示观测时间,`satelliteElevation`表示卫星仰角,`satelliteAzimuth`表示卫星方位角。函数返回值分别为太阳顶角太阳方位角、卫星顶角和卫星方位角

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值