如何使用pyEphem计算地平线以上的太阳角度

我是PyEphem的新手,这可能是一个简单的问题。 我想在某个GPS点和日期计算地平线上太阳的角度。 我的代码如下:

import ephem
import datetime

date = datetime.datetime(2010,1,1,12,0,0)
print "Date: " + str(date)

obs=ephem.Observer()
obs.lat='31:00'
obs.long='-106:00'
obs.date = date
print obs

sun = ephem.Sun(obs)
sun.compute(obs)
print float(sun.alt)
print str(sun.alt)
sun_angle = float(sun.alt) * 57.2957795 # Convert Radians to degrees
print "sun_angle: %f" % sun_angle

输出是:

python sunTry.py
Date: 2010-01-01 12:00:00
<ephem.Observer date='2010/1/1 12:00:00' epoch='2000/1/1 12:00:00' lon=-106:00:00.0 lat=31:00:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar>
-0.44488877058
-25:29:24.9
sun_angle: -25.490249

为什么会出现负值? GPS位置在墨西哥的某个地方,我在观察者的日期参数中指定了12中午。 太阳应该直接在头顶上,所以我会认为alt变量会在70-90度的范围内返回一个角度? 我在这里错过了什么?

谢谢

斯蒂芬


我相信问题是PyEphem中的日期总是以UTC表示。 因此,无论本地时区用于观察者的经纬度,如果您告诉中午,它会假设您的意思是UTC中午。 这意味着您必须通过您打算转换为UTC的时间。

“在墨西哥某处datetime.datetime(2010,1,1,12,0,0) ”的UTC时间大致为datetime.datetime(2010,1,1,18,0,0)

有了这个新的日期,我得到了输出

sun_angle: 33.672932

这似乎仍然很低,但比-25更合理。

如果你想要一个程序化的方式,你可以(在你自己的风险)干扰模块pytz

tz_mexico = pytz.timezone('America/Mexico_City')
mexico_time = datetime.datetime(2010,1,1,12,0,0,0,tz_mexico)
utc_time = mexico_time.astimezone(pytz.utc)
obs.date = utc_time
链接地址: http://www.djcxy.com/p/73527.html

上一篇: How to calculate the angle of the sun above the horizon using pyEphem

下一篇: Javascript templating language in reverse