使用python计算太阳高度角

太阳高度角:对于地球上的某个地点,太阳高度角是指太阳光的入射方向和地平面之间的夹角,专业上讲太阳高度角是指某地太阳光线与通过该地与地心相连的地表切面的夹角。太阳高度角简称高度角。当太阳高度角为90°时,此时太阳辐射强度最大;当太阳斜射地面时,太阳辐射强度就小。(摘自百度百科)

具体相关定义、资料和图片都比较多,这里就不一一提了,下面直接说计算方法。

根据《制定地方大气污染物排放标准的技术方法 GB-T3840-91》规范中附录B提到的方法来计算太阳高度角h0。

具体计算公式摘录如下:

太阳高度角计算截图

1 计算太阳倾角

需输入的变量只有1个:一年中的日期序数,取值范围从0到364。

我在实际计算中计算的天数比较多,直接使用pandas的df.index.dayofyear函数计算得到的,另外一个计算思路是使用月份天数进行累加。根据上面的式B1即可求出太阳倾角。

在三角函数计算中要将角度转为弧度,直接使用math工具包中的radians即可,具体代码如下:

from math import sin, asin, cos, radians, pi, degrees

f0 = 360*Dn/365
f1 = 0.006918
f2 = 0.399912*cos(radians(f0))
f3 = 0.070257*sin(radians(f0))
f4 = 0.006758*cos(radians(f0*2))
f5 = 0.000907*sin(radians(f0*2))
f6 = 0.002697*cos(radians(f0*3))
f7 = 0.001480*sin(radians(f0*3))
f = (f1-f2+f3-f4+f5-f6+f7)*180/pi

其中有个问题,如果是闰年366天的话,日期序数是否是到365?

2 计算太阳高度角h0

需输入的变量包括:经度、纬度、小时数、太阳倾角。

其中这里的小时数即0~23(北京时间),其中仍需要注意的是弧度的转化。

结合上面的代码,最终计算太阳高度角如下:

from math import sin, asin, cos, radians, pi, degrees

def get_h0(lon, lat, Dn, Hour):
    """计算太阳高度角
    Arguments:
        lon {float} -- [经度(度)]
        lat {float} -- [纬度(度)]
        Dn {int} -- [一年中日期序数,0,1,2,3......,364]
        Hour {int} -- [小时(北京时间)]
    Returns:
        float -- [太阳高度角(度)]
    """
    # 第一步:计算太阳倾角
    f0 = 360*Dn/365
    f1 = 0.006918
    f2 = 0.399912*cos(radians(f0))
    f3 = 0.070257*sin(radians(f0))
    f4 = 0.006758*cos(radians(f0*2))
    f5 = 0.000907*sin(radians(f0*2))
    f6 = 0.002697*cos(radians(f0*3))
    f7 = 0.001480*sin(radians(f0*3))
    f = (f1-f2+f3-f4+f5-f6+f7)*180/pi

    # 第二步:计算太阳高度角
    p3 = radians(15*Hour + lon - 300)
    lat = radians(lat)
    f = radians(f)  # 转为弧度,切记!
    h0 = asin(sin(lat)*sin(f) + cos(lat)*cos(f)*cos(p3))

    return degrees(h0)

选取经纬120oE、30oN的位置,第61天(3月2日)来进行测试。

print(get_h0(120, 30, 60, 2))  # 02时
print(get_h0(120, 30, 60, 8))  # 08时
print(get_h0(120, 30, 60, 14))  # 14时
print(get_h0(120, 30, 60, 20))  # 20时

# -53.98284690230641  # 02时
# 21.349321051146905  # 08时
# 42.71321337396969  # 14时
# -29.641067525563916  # 20时 

最终02时、08时、14时、20时太阳高度角依次为-53、21、42、-29,夜间太阳高度角为负值。

太阳高度角计算完毕~~

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取保证100%免费

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值