1

非程序员类型在这里尝试构建一个 python 太阳正午计算。我相信代码就在那里,但是我很难获得 solar_noon 时间。我正在使用这个公式http://www.esrl.noaa.gov/gmd/grad/solcalc/solareqns.PDF

我使用了另一个在线计算器http://www.esrl.noaa.gov/gmd/grad/solcalc/ 来验证 eqtime 是否非常接近。那么计算误差在哪里呢?我相信它与时间转换有关。

#!/usr/local/bin/python

import sys
from datetime import datetime, time, timedelta
from math import pi, cos, sin

def solar_time(dt, longitude):
    return ha

def main():
    if len(sys.argv) != 4:
        print 'Usage: hour_angle.py [YYYY/MM/DD] [HH:MM:SS] [longitude]'
        sys.exit()
    else:
        #dt = datetime.strptime(sys.argv[1] + ' ' + sys.argv[2], '%Y/%m/%d %H:%M:%S')
        #longitude = float(sys.argv[3])
        """
            set date/time, longitude to ease coding troubleshooting
        """
        longitude = -71.96 # Montauk, NY
        dt = datetime.strp('2013-05-21 11:00:00', "%Y-%m-%d %H:%M:%S")


    gamma = 2 * pi / 365 * (dt.timetuple().tm_yday - 1 + float(dt.hour - 12) / 24)
    eqtime = 229.18 * (0.000075 + 0.001868 * cos(gamma) - 0.032077 * sin(gamma) \
             - 0.014615 * cos(2 * gamma) - 0.040849 * sin(2 * gamma))
    decl = 0.006918 - 0.399912 * cos(gamma) + 0.070257 * sin(gamma) \
           - 0.006758 * cos(2 * gamma) + 0.000907 * sin(2 * gamma) \
           - 0.002697 * cos(3 * gamma) + 0.00148 * sin(3 * gamma)
    time_offset = eqtime + 4 * longitude +60 * -4    #Eastern daylight savings time
    tst = dt.hour * 60 + dt.minute + dt.second / 60 + time_offset
    solar_time = datetime.combine(dt.date(), time(0)) + timedelta(minutes=tst)
    print eqtime
    print solar_time
    snoon = 720 * 4 * longitude -eqtime
    solar_noon = datetime.combine(dt.date(), time(0)) + timedelta(minutes=snoon)
    print solar_noon

if __name__ == '__main__':
    main()
4

0 回答 0