资源简介
本文档为通过全国气象观测站点观测的日照时数ssd计算日总太阳辐射sr的python脚本,简单易懂。内附输入数据及输出结果文件示例。
代码片段和文件信息
# ! /usr/bin/env python
# coding=utf-8
import math
import os
import time
import pandas as pd
# day of year
def doy(dt):
sec = time.mktime(dt.timetuple())
t = time.localtime(sec)
return t.tm_yday
# day of year
def date2doy(year month day):
month_leapyear = [31 29 31 30 31 30 31 31 30 31 30 31]
month_notleap = [31 28 31 30 31 30 31 31 30 31 30 31]
doy = 0
if month == 1:
pass
elif year % 4 == 0 and (year % 100 != 0 or year % 400 == 0):
for i in range(month - 1):
doy += month_leapyear[i]
else:
for i in range(month - 1):
doy += month_notleap[i]
doy += day
return doy
# earth-sun distance
def dr(doy):
return 1 + 0.033 * math.cos(2 * math.pi * doy / 365)
# declination
def dec(doy):
return 0.409 * math.sin(2 * math.pi * doy / 365 - 1.39)
# sunset hour angle
def ws(lat dec):
x = 1 - math.pow(math.tan(lat) 2) * math.pow(math.tan(dec) 2)
if x < 0:
x = 0.00001
# print x
return 0.5 * math.pi - math.atan(-math.tan(lat) * math.tan(dec) / math.sqrt(x))
def Rs(doy n lat):
“““n is sunshine duration“““
lat = lat * math.pi / 180.
a = 0.25
b = 0.5
d = dec(doy)
w = ws(lat d)
N = 24 * w / math.pi
# Extraterrestrial radiation for daily periods
ra = (24 * 60 * 0.082 * dr(doy) / math.pi) * (
w * math.sin(lat) * math.sin(d) + math.cos(lat) * math.cos(d) * math.sin(w))
return (a + b * n / N) * ra
def writeToTxt(list_name file_path):
try:
fp = open(file_path “w+“)
for item in list_name:
fp.write(str(item) + “\n“)
fp.close()
except IOError:
print(“fail to open file“)
if __name__ == “__main__“:
list_dir = r“C:\Users\wq\Desktop\ssd_data\ssd_data“
for filename in os.listdir(list_dir):
file_path = os.path.join(list_dir filename)
print(file_path)
df = pd.read_csv(file_path encoding=‘utf-8‘)
df[‘doy‘] = 0
df[‘sr‘] = 0.0
for i in range(0 len(df)):
year = df.iloc[i 4]
month = df.iloc[i 5]
day = df.iloc[i 6]
doy = date2doy(year month day)
df.iloc[i 8] = doy
lat = df.iloc[i 1]
ssd = df.iloc[i 7]
sr = round(Rs(float(doy) float(ssd) lat * math.pi / 180.) 1)
print(sr)
df.iloc[i 9] = sr
df.to_csv(r“C:\Users\wq\Desktop\ssd_data\sr_data\%s“ % (filename))
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 883307 2019-12-09 14:10 sr\input_50136.csv
文件 1208429 2019-12-10 14:56 sr\output_50136.csv
文件 2622 2019-12-10 15:30 sr\ssd_slr.py
目录 0 2019-12-10 15:33 sr
----------- --------- ---------- ----- ----
2094358 4
评论
共有 条评论