我们如何计算给定日期和时间给定地点的太阳位置?
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".
我有 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".