【问题标题】:How can we compute solar position at a given place on a given day and time?我们如何计算给定日期和时间在给定地点的太阳位置?
【发布时间】:2017-12-05 21:38:17
【问题描述】:

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

【问题讨论】:

    标签: python python-2.7 astronomy


    【解决方案1】:

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

    看看很棒的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
    • @MarkRansom 我认为AltAz 需要Time() 实例,但不确定-仍在探索包的功能。谢谢。
    • 感谢您及时回复 Alecxe。我希望这对我有帮助。再次感谢
    • @MarkRansom - 使用Time 代替datetime,因为datetime 缺少许多天文学关键功能。例如,在 Gigayear 跨度上的纳秒动态范围、与 JD 或 MJD 等标准天文学形式的转换、对 UT1 到 UTC 转换的理解、numpy 支持等。
    • 此外,如果出于某种原因您想使用datetime,您可以将其作为obstime 参数传入,它会在内部自动转换为Time
    【解决方案2】:

    @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 标量一样工作,关联单位为“度”。

    【讨论】:

      猜你喜欢
      • 2012-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-19
      相关资源
      最近更新 更多