【发布时间】:2017-12-05 21:38:17
【问题描述】:
我有 UTC 时间(小时、分钟、秒)、经度(deg E)、纬度(deg N)和日期。谁能给我提供一个在 Python 2.7 中计算太阳天顶角的代码?
【问题讨论】:
标签: python python-2.7 astronomy
我有 UTC 时间(小时、分钟、秒)、经度(deg E)、纬度(deg N)和日期。谁能给我提供一个在 Python 2.7 中计算太阳天顶角的代码?
【问题讨论】:
标签: python python-2.7 astronomy
这是一个有趣的问题,我想我有一个很好的答案——嗯,至少是起点。
看看很棒的astropy package。我相信你需要使用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 纬度位置的太阳在地平线上方的角度。
仅供参考,.zen 会给你天顶角。
【讨论】:
Time 类而不是标准的datetime?
AltAz 需要Time() 实例,但不确定-仍在探索包的功能。谢谢。
Time 代替datetime,因为datetime 缺少许多天文学关键功能。例如,在 Gigayear 跨度上的纳秒动态范围、与 JD 或 MJD 等标准天文学形式的转换、对 UT1 到 UTC 转换的理解、numpy 支持等。
datetime,您可以将其作为obstime 参数传入,它会在内部自动转换为Time。
@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 标量一样工作,关联单位为“度”。
【讨论】: