在遥感计算中一般都会用到天顶角、方位角、高度角。之前都是直接在excel中输入公式,这种方式输入公式比较麻烦,而且容易出错。后来在网上看到吉林大学汪自军博士的计算程序。链接:http://blog.sciencenet.cn/home.php?mod=space&uid=43777&do=blog&id=238552
非常好用,但是我看了一下,汪博士主要用matlab、C++、FORTRAN三种语言编写的,而且输入文件是txt格式。txt文件的操作性我认为不如excel。
说一下主要改进的地方:
1、编程语言改为python
2、输入和输出文件格式均改为excel
3、以为太阳高度角与天顶角互余,这次也加进去了。
欢迎讨论,下面附上主要代码:

table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
ncols = table.ncolsstation=table.col_values(0)[1:]
year=table.col_values(1)[1:]
month=table.col_values(2)[1:]
day=table.col_values(3)[1:]
hour=table.col_values(4)[1:]
min=table.col_values(5)[1:]
sec=table.col_values(6)[1:]
lon=table.col_values(7)[1:]
lat =table.col_values(8)[1:]
TimeZone =table.col_values(9)[1:]wb = xlutils.copy.copy(data)
ws = wb.get_sheet(0)ws.write(0, 11, 'Day of Year')
ws.write(0, 12, 'Local Time') #实际是gtdt
ws.write(0, 13, 'Sun Angle')#(sitar)
ws.write(0, 14, 'Declination Angle')
ws.write(0, 15, 'Equation of Time')
style = xlwt.easyxf('pattern: pattern solid, fore_color yellow;')
ws.write(0, 16, 'ZenithAngle(deg)',style)
ws.write(0, 17, 'HeightAngle(deg)',style)
ws.write(0, 18, 'AzimuthAngle(deg)',style)for n in range(1,nrows):m=n-1
#年积日的计算#儒略日 Julian day(由通用时转换到儒略日)JD0 = int(365.25*(year[m]-1))+int(30.6001*(1+13))+1+hour[m]/24+1720981.5if month[m]<=2:JD2 = int(365.25*(year[m]-1))+int(30.6001*(month[m]+13))+day[m]+hour[m]/24+1720981.5else:JD2 = int(365.25*year[m])+int(30.6001*(month[m]+1))+day[m]+hour[m]/24+1720981.5#年积日 Day of yearDOY = JD2-JD0+1#N0   sitar=θN0 = 79.6764 + 0.2422*(year[m]-1985) - int((year[m]-1985)/4.0)sitar = 2*math.pi*(DOY-N0)/365.2422ED1 = 0.3723 + 23.2567*math.sin(sitar) + 0.1149*math.sin(2*sitar) - 0.1712*math.sin(3*sitar)- 0.758*math.cos(sitar) + 0.3656*math.cos(2*sitar) + 0.0201*math.cos(3*sitar)ED = ED1*math.pi/180           #ED本身有符号if lon[m] >= 0:if TimeZone == -13:dLon = lon[m] - (math.floor((lon[m]*10-75)/150)+1)*15.0else:dLon = lon[m] - TimeZone[m]*15.0   #地球上某一点与其所在时区中心的经度差else:if TimeZone[m] == -13:dLon =  (math.floor((lon[m]*10-75)/150)+1)*15.0- lon[m]else:dLon =  TimeZone[m]*15.0- lon[m]#时差Et = 0.0028 - 1.9857*math.sin(sitar) + 9.9059*math.sin(2*sitar) - 7.0924*math.cos(sitar)- 0.6882*math.cos(2*sitar)gtdt1 = hour[m] + min[m]/60.0 + sec[m]/3600.0 + dLon/15        #地方时gtdt = gtdt1 + Et/60.0dTimeAngle1 = 15.0*(gtdt-12)dTimeAngle = dTimeAngle1*math.pi/180latitudeArc = lat[m]*math.pi/180# 高度角计算公式HeightAngleArc = math.asin(math.sin(latitudeArc)*math.sin(ED)+math.cos(latitudeArc)*math.cos(ED)*math.cos(dTimeAngle))
# 方位角计算公式CosAzimuthAngle = (math.sin(HeightAngleArc)*math.sin(latitudeArc)-math.sin(ED))/math.cos(HeightAngleArc)/math.cos(latitudeArc)AzimuthAngleArc = math.acos(CosAzimuthAngle)HeightAngle = HeightAngleArc*180/math.piZenithAngle = 90-HeightAngleAzimuthAngle1 = AzimuthAngleArc *180/math.piif dTimeAngle < 0:AzimuthAngle = 180 - AzimuthAngle1else:AzimuthAngle = 180 + AzimuthAngle1print('站位:'+station[m]+' 太阳天顶角(deg):%f 高度角(deg):%f 方位角(deg):%f ' % (ZenithAngle,HeightAngle,AzimuthAngle))

因为最近在研究海洋遥感,在采样的时候会有站位信息,所以程序中存在站位的问题(不过这个丝毫不影响计算)。
附上运行结果:

最后,感谢汪自军博士的思路和中国气象科学研究院王炳忠研究员编写的《太阳辐射计算讲座》。
2017年4月27日

利用python计算太阳天顶角、方位角、高度角相关推荐

  1. python太阳代码_利用python计算太阳天顶角、方位角、高度角

    在遥感计算中一般都会用到天顶角.方位角.高度角.之前都是直接在excel中输入公式,这种方式输入公式比较麻烦,而且容易出错.后来在网上看到吉林大学汪自军博士的计算程序.链接:[http://blog. ...

  2. python ks值计算_利用Python计算KS的实例详解

    在金融领域中,我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布.好的信用风控模型一般从准确性.稳定性和可解释性来评估模型.sOf免费资源网 一般来说.好人样本的分布同坏人样本的分布应该是有很 ...

  3. 利用Python计算UDP校验和

    UDP 检验和提供了差错检测的功能.这是基于端到端原则实现的.但是 UDP 的检验和并不提供差错回复的能力. 一.UDP结构 二.UDP校验和计算方法  计算校验和的过程很关键,主要分为以下几个步骤: ...

  4. 【python】利用python计算A类不确定度

    利用python计算A类不确定度 前言 在上学期大学物理实验课的时候发现经常要计算A类不确定度,而且这个不确定度计算又非常复杂,凑巧当时正在学习python,于是利用python实现了这一小小功能. ...

  5. 异动分析(四)利用Python计算指标贡献度

    异动分析(四)利用Python计算指标贡献度 小P:有些异动的原因是多方面的,我看网上说可以通过计算贡献度进行量化. 小H:是的,容我想想- 虽然不是必要的,但有时候异动的原因多个,通过计算每个原因的 ...

  6. 根据日期、时间和当地经纬度计算太阳天顶角和方位角的原理

    先转过来,后面再看 在开展野外试验的时候,经常需要知道当时的太阳天顶角和方位角,比如测量地物反射率时,需要知道太阳天顶角,来选择恰当的灰板反射率曲线.进行地物BRDF测量时,更需要知道太阳天顶角. 太 ...

  7. 利用 Python 计算资产 beta 值和市场 beta 值

    作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai 在这篇文章中,我们将强调理解股票市场中 beta 的重要性,以及我们如何来使用 beta 来对冲市场风险 ...

  8. 在python中股票的收盘价如何表示_利用python计算股票涨跌幅

    作为一个python新手,在学习中遇到很多问题,要善于运用各种方法.今天,在学习中,碰到了如何通过收盘价计算股票的涨跌幅. 第一种: 读取数据并建立函数: import numpy as np imp ...

  9. python计算身体质量指数_利用Python计算身体质量指数BMI来判断体型

    身体质量指数BMI:对身体质量的刻画(Body Mass Index) 国际上常用的衡量人体肥胖和健康程度的重要标准,主要用于统计分析. 定义: 有上图考虑BMI的值的结果因国内和国外的标准不同而不同 ...

最新文章

  1. 【廖雪峰Python学习笔记】面向对象编程OOP
  2. jenkins使用Git为源码管理(windows master linux slave)
  3. trigger() --工作中问题nav样式
  4. C#开发Unity游戏教程之游戏对象的行为逻辑方法
  5. java_软件发布版本_Asynch HttpClien 对比发行版本说明_Alpha、Beta、RC、GA版本的区别...
  6. 1.7 Python基础知识 - 模块初识
  7. worth,worthy,worthwhile的区别(一)
  8. mybatis------通过mapper接口加载映射文件(六)
  9. ROS学习笔记3(创建一个ROS Package)
  10. linux 渗透 密码,linux渗透中常用命令+Tip
  11. python约瑟夫环_Python语言之如何实现约瑟夫环问题
  12. 用AngularJS开发下一代Web应用pdf
  13. TCPIP详解之udp
  14. 偏差-方差分解简要推导
  15. SAN 光纤交换机配置远距离级联(EF)操作
  16. 论文阅读:《Rethinking Pseudo-LiDAR Representation》
  17. 【Unity3D游戏开发】之游戏目录结构之最佳实践和优化 (十一)
  18. 人到中年怎样防止头发花白
  19. 26.编辑距离(一)
  20. 通信感知一体化技术思考

热门文章

  1. 数据分析软件的类型有哪些
  2. charls使用记录(抓包工具)
  3. 欧内斯特·海明威曾经写道:“世界是一个美好的地方,值得为之奋斗。我同意第二部分。
  4. 计算器android studio代码,Android studio实现简单计算器
  5. 五金冲压模具设计冲裁模的设计要点
  6. vue中 props的基本介绍
  7. 【h5】相对定位和绝对定位
  8. GBase 8s 事务管理
  9. Wappalyzer 网站技术分析软件
  10. html5页面嵌入pdf,有没有办法将pdf文件嵌入到html5页面?