在遥感计算中一般都会用到天顶角、方位角、高度角。之前都是直接在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.ncols

station=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.5

if month[m]<=2:

JD2 = int(365.25*(year[m]-1))+int(30.6001*(month[m]+13))+day[m]+hour[m]/24+1720981.5

else:

JD2 = int(365.25*year[m])+int(30.6001*(month[m]+1))+day[m]+hour[m]/24+1720981.5

#年积日 Day of year

DOY = 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.2422

ED1 = 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.0

else:

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.0

dTimeAngle1 = 15.0*(gtdt-12)

dTimeAngle = dTimeAngle1*math.pi/180

latitudeArc = 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.pi

ZenithAngle = 90-HeightAngle

AzimuthAngle1 = AzimuthAngleArc *180/math.pi

if dTimeAngle < 0:

AzimuthAngle = 180 - AzimuthAngle1

else:

AzimuthAngle = 180 + AzimuthAngle1

print('站位:'+station[m]+' 太阳天顶角(deg):%f 高度角(deg):%f 方位角(deg):%f ' % (ZenithAngle,HeightAngle,AzimuthAngle))

附上运行结果:

图: 天顶角、方位角、高度角运行结果

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

2017年4月27日

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

  1. python计算面积代码_利用Python求阴影部分的面积实例代码

    利用Python求阴影部分的面积实例代码 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  利用Python求阴影部分的面积实例代码.txt ] (友情提示:右键点 ...

  2. python画pr曲线代码_利用Python中的numpy包实现PR曲线和ROC曲线的计算

    闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在 python 环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy ...

  3. python做游戏代码_利用Python基础代码语句,实现2G时代文字小游戏,世界如此简单!...

    相信许多80,90后都玩过2G时代的文字小游戏,它是来自QQ家园的专属回忆.偷菜,美味小镇,大乐斗,还有精武堂等等,虽然只是文字的输出,但是留给我们这一代的人的印象却是最深刻的.曾经流量很少,响应很快 ...

  4. python 打卡记录代码_利用Python实现对考勤打卡数据处理的总结

    利用Python实现对考勤打卡数据处理的总结 一.背景交代 二.说明 三. 8种方法 1. 查看文件是否存在 2. 导入excel文件,并把数据保存为dataframe格式 3. 计算程序运行时间 4 ...

  5. python计算器程序_利用Python代码编写计算器小程序

    1 importtkinter2 importtkinter.messagebox3 importmath4 classJSQ:5 6 7 def __init__(self):8 #创建主界面 9 ...

  6. python照片墙地图_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  7. python贪吃蛇最简单代码_利用python实现简易版的贪吃蛇游戏(面向python小白)

    引言 作为python 小白,总是觉得自己要做好百分之二百的准备,才能开始写程序.以至于常常整天在那看各种语法教程,学了几个月还是只会print('hello world'). 这样做效率太低,正确的 ...

  8. python爬虫背景_利用Python代码实现一键抠背景功能

    前言 又是一个逛csdn发现的一个有趣的小项目,可以一键抠背景,需要用到removebg模块及其API,API可从其官网免费获取,网址如下https://www.remove.bg/zh ps:加上/ ...

  9. python删除数据库的数据完整代码_利用python操作小程序云数据库实现简单的增删改查...

    不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...

最新文章

  1. 《快捷键 系列》 - Eclipse快捷键
  2. 好程序员分享做HTML5页面你要懂得这些
  3. 膨胀和腐蚀之外的其他形态学变换
  4. mybatis中$和#的区别
  5. Linux命令之初出茅庐
  6. 多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏
  7. date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题
  8. 美国凯斯西储大学计算机硕士专业怎么样,在凯斯西储大学读硕士大约需要多少花费?...
  9. 腾讯校园招聘笔试 2019-8-17 第四题
  10. 动态连接_二维动画动态连接基础
  11. TOT12-2技能培训 第一周
  12. 【杂七杂八】虚拟机win中 腾讯会议视频黑屏
  13. python三维图像切片成二维_python之画三维图像
  14. KVM安装+vlan配置(超详细)
  15. 使用Android 原生 API获取经纬度并且根据经纬度解析出当前具体位置信息
  16. Wyn Enterprise 报表数据过滤
  17. 菌群最新资讯热评 | 菌群与癌症免疫疗法,菌群与消毒剂
  18. vim 删除文件单行或多行内容
  19. was部署java项目_web工程was部署
  20. 数据结构顺序表和单链表优缺点

热门文章

  1. 救命!为啥邮件发不到 500 英里以外?
  2. 普通视图和物化视图的区别
  3. DirectX11环境配置之美
  4. window对象的方法
  5. 在树莓派上使用Grbl Controller
  6. asp.net 项目的一点总结 点卡销售/CRM
  7. 效率高到爆炸的IT运维软件您安装了吗?
  8. S7-1200PLC与MCGS触摸屏通讯
  9. MIMO技术杂谈(二):犹抱琵琶半遮面--MIMO信道中隐藏的秘密
  10. 中国潜艇上的软件界面