在遥感计算中一般都会用到天顶角、方位角、高度角。之前都是直接在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提取ABAQUS的计算结果(ODB)信息、体积、应变等变化(一)...

    00 实例模型 一个金属长方体,我们需要对其做拉伸的加载约束示意图如图1,并在完成后采用Python命令流读取参考点的位移.体积.应变随加载时间的变化情况. 图1 金属长方体约束加载示意图 01 Py ...

  2. python多元非线性回归_利用Python进行数据分析之多元线性回归案例

    线性回归模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(自变量)来预测某个连续的数值变量(因变量).例如,餐厅根据每天的营业数据(包括菜谱价格.就餐人数.预定人数.特价菜折扣等)预测就餐规 ...

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

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

  4. python汇率转换_利用Python中的Xpath实现一个在线汇率转换器

    前言 在之前的语法里面,我们记得有一个初识Python之汇率转换篇,在那个程序里面我们发现可以运用一些基础的语法写一个汇率计算,但是学到后面的小伙伴就会发现这个小程序有一定的弊端. 首先,它不可以实时 ...

  5. python抽奖游戏_利用Python写一个抽奖程序,解密游戏内抽奖的秘密

    原标题:利用Python写一个抽奖程序,解密游戏内抽奖的秘密 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 极客 ...

  6. 如何用python制作画像_利用Python搭建用户画像系统

    用户画像是当下很多企业都会提及的概念,多数情况下会和大数据以及营销挂钩.本文将对用户画像的相关知识进行进行简单的介绍,并利用Python去实现一个简单的用户画像系统. 1.什么是用户画像 用户画像可以 ...

  7. python做线性回归_利用 python 进行线性回归

    利用python进行线性回归 理解什么是线性回归 线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) ...

  8. python高斯求和_利用Python进行数据分析(3)- 列表、元组、字典、集合

    本文主要是对Python的数据结构进行了一个总结,常见的数据结构包含:列表list.元组tuple.字典dict和集合set. image 索引 左边0开始,右边-1开始 通过index()函数查看索 ...

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

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

  10. python图色检测_利用python打开摄像头及颜色检测方法

    最近两周由于忙于个人项目,一直未发言了,实在是太荒凉了....,上周由于项目,见到Python的应用极为广泛,用起来也特别顺手,于是小编也开始着手学习Python,-下面我就汇报下今天的学习成果吧 小 ...

最新文章

  1. Angular系列学习二:基本的组件说明、自定义组件和部分细节说明
  2. 语音识别:市场前景可观,但核心技术仍需突破
  3. java获取昨天日期
  4. 开通了一个gmail邮箱
  5. 乐玩插件和大漠插件哪个好_用好这5款Chrome插件,大幅提升你的生产力
  6. 怎么上传文件到kk服务器,VS Code 关于SFTP上传文件到多服务器的配置
  7. node.js打开指定浏览器的四种方式
  8. 【转】python os.popen 超时问题
  9. 如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
  10. Arduino开发板使用DS3231实时时钟模块的方法
  11. FreeSwitch uuid_bridge代码分析
  12. 使用C#创建一个进程杀手Windows服务
  13. 【好题分享】适合c++初学者(从易到难)
  14. Rxjava Subject分析
  15. 新能源电动汽车共享汽车TBOX终端-「北斗终端设备」、新能源电动汽车车载TBOX系统应用、智能车载系统终端TBOX与车联网关系
  16. Elasticsearch的路由(Routing)特性
  17. 「机密计算-隐私计算」科普
  18. JQuery Mobile试试水
  19. 2020张宇1000题【好题收集】【第九章:级数】
  20. android中文件加密和解密的实现

热门文章

  1. 开篇: 高扩展网页制作平台 码良的正确打开方式
  2. 百度顶会论文复现营论文心得
  3. 美国LangeEylandt长岛
  4. 互联网骨干网及国际通用结算介绍
  5. 利用excel生成word并在其中批量插入图片和题注、文字描述等内容
  6. ps:HSB色彩模式
  7. Angular 入门教程系列:33:移动端统计图表F2
  8. 结构相似性(SSIM)原理及其实现
  9. php 图片合成,PHP 实现图片合成(两张合并一张)
  10. 两个次序统计量的联合密度函数