我们如何计算给定日期和时间给定地点的太阳位置?

How can we compute solar position at a given place on a given day and time?

我有 UTC 时间(小时、分钟、秒)、经度(deg E)、纬度(deg N)和日期。谁能给我提供一个代码来计算 Python 2.7 中的太阳天顶角?

这是一个有趣的问题,我想我有一个很好的答案 - 好吧,至少是起点。

看看很棒的 astropy package. I believe you need to use the coordinates module

大致如下:

import astropy.coordinates as coord
from astropy.time import Time
import astropy.units as u


loc = coord.EarthLocation(lon=0.1 * u.deg,
                          lat=51.5 * u.deg)
now = Time.now()

altaz = coord.AltAz(location=loc, obstime=now)
sun = coord.get_sun(now)

print(sun.transform_to(altaz).alt)

此处,我们获取当前时间 0.1 度经度和 51.5 纬度位置的 horizon 上方太阳的角度。

仅供参考,.zen 会给你天顶角。

@alecxe 的回答很好,但我想我会添加一点修改,使其更接近原始问题的要求(特定时间 的天顶角)

from astropy.coordinates import get_sun, AltAz, EarthLocation
from astropy.time import Time

sun_time = Time('2017-12-6 17:00') #UTC time
loc = EarthLocation.of_address('Baltimore, MD')  # anything the google geocoding API resolves
altaz = AltAz(obstime=sun_time, location=loc)

zen_ang = get_sun(sun_time).transform_to(altaz).zen

zen_ang 是一个 Angle 对象 - 在 the docs 中查看更多关于那些对象的信息,但基本上它们最终像 numpy 标量一样工作,相关单位为 "degrees".