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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了计算太阳太阳高度顶角太阳方位角和剖面,我们需要使用一些数学公式和常数。以下是用Python编写的程序。 import math # 常数 DEG_TO_RAD = math.pi / 180.0 RAD_TO_DEG = 180.0 / math.pi DAYS_IN_YEAR = 365 # 输入 latitude = float(input("请输入纬度(单位:度):")) longitude = float(input("请输入经度(单位:度):")) date = input("请输入日期(格式:YYYY-MM-DD):") time = input("请输入时间(格式:HH:MM:SS):") # 计算儒略日 date_parts = date.split("-") time_parts = time.split(":") year, month, day = int(date_parts[0]), int(date_parts[1]), int(date_parts[2]) hour, minute, second = int(time_parts[0]), int(time_parts[1]), int(time_parts[2]) if month <= 2: year -= 1 month += 12 a = year // 100 b = 2 - a + a // 4 jd_day = int(365.25 * (year + 4716)) + int(30.6001 * (month + 1)) + day + b - 1524.5 jd_hour = hour + minute / 60.0 + second / 3600.0 jd = jd_day + jd_hour / 24.0 # 计算黄赤交 n = jd - 2451545.0 L = 280.460 + 0.9856474 * n g = 357.528 + 0.9856003 * n lamda = L + 1.915 * math.sin(g * DEG_TO_RAD) + 0.020 * math.sin(2 * g * DEG_TO_RAD) epsilon = 23.439 - 0.0000004 * n alpha = math.atan2(math.cos(epsilon * DEG_TO_RAD) * math.sin(lamda * DEG_TO_RAD), math.cos(lamda * DEG_TO_RAD)) * RAD_TO_DEG delta = math.asin(math.sin(epsilon * DEG_TO_RAD) * math.sin(lamda * DEG_TO_RAD)) * RAD_TO_DEG # 计算 time_offset = longitude / 15.0 solar_noon = 12.0 - time_offset hour_angle = (jd_hour - solar_noon) * 15.0 if hour_angle > 180.0: hour_angle -= 360.0 elif hour_angle < -180.0: hour_angle += 360.0 # 计算太阳高度顶角 latitude_rad = latitude * DEG_TO_RAD delta_rad = delta * DEG_TO_RAD hour_angle_rad = hour_angle * DEG_TO_RAD cos_theta = math.sin(latitude_rad) * math.sin(delta_rad) + math.cos(latitude_rad) * math.cos(delta_rad) * math.cos(hour_angle_rad) theta = math.acos(cos_theta) * RAD_TO_DEG zenith = 90.0 - theta # 计算方位角 azimuth_cos = (math.sin(delta_rad) - math.sin(latitude_rad) * cos_theta) / (math.cos(latitude_rad) * math.sin(theta * DEG_TO_RAD)) azimuth_sin = math.sin(hour_angle_rad) * math.cos(delta_rad) / math.sin(theta * DEG_TO_RAD) azimuth = math.atan2(azimuth_cos, azimuth_sin) * RAD_TO_DEG if azimuth < 0.0: azimuth += 360.0 # 计算剖面 declination_cos = math.cos(delta_rad) latitude_cos = math.cos(latitude_rad) cos_alpha = math.sin(theta * DEG_TO_RAD) * math.sin((90.0 - zenith) * DEG_TO_RAD) / (declination_cos * latitude_cos) alpha = math.asin(cos_alpha) * RAD_TO_DEG # 输出结果 print("太阳:{:.4f} 度".format(hour_angle)) print("太阳高度:{:.4f} 度".format(theta)) print("顶角:{:.4f} 度".format(zenith)) print("太阳方位角:{:.4f} 度".format(azimuth)) print("剖面:{:.4f} 度".format(alpha)) 这个程序的输入包括纬度、经度、日期和时间。程序用输入的参数计算儒略日,并计算出黄赤交太阳的赤纬和赤经。然后程序计算出时太阳高度顶角太阳方位角和剖面,最后输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值