备注
Go to the end 下载完整的示例代码
测定和标绘天体的高度/方位角#
此示例演示坐标转换和可见性曲线的创建,以帮助观察运行计划。
在本例中,我们将 SkyCoord
M33的实例。然后使用 astropy.coordinates.EarthLocation
和 astropy.time.Time
物体。
此示例旨在演示 astropy.coordinates
package. For more convenient and/or complex observation planning, consider the astroplan 包裹。
签字人:Erik Tollerud,Kelle Cruz
许可证:BSD
假设你打算去美国纽约风景如画的熊山州立公园,你带着望远镜(当然),有人告诉你M33是一个很好的观测目标。你碰巧知道你在当地时间晚上11:00有空,你想知道是否会有空。 Astropy 可以回答这个问题。
导入numpy和matplotlib。对于后者,请使用一组更好的打印参数,并设置对打印/转换数量的支持。
import matplotlib.pyplot as plt
import numpy as np
from astropy.visualization import astropy_mpl_style, quantity_support
plt.style.use(astropy_mpl_style)
quantity_support()
<astropy.visualization.units.quantity_support.<locals>.MplQuantityConverter object at 0x7f4f9f64c7d0>
导入查找坐标和进行坐标转换所需的包
import astropy.units as u
from astropy.coordinates import AltAz, EarthLocation, SkyCoord
from astropy.time import Time
astropy.coordinates.SkyCoord.from_name
使用Simbad解析对象名并检索坐标。
得到M33的坐标:
m33 = SkyCoord.from_name("M33")
使用 astropy.coordinates.EarthLocation
提供Bear Mountain的位置并将时间设置为美国东部时间2012年7月12日晚上11点:
bear_mountain = EarthLocation(lat=41.3 * u.deg, lon=-74 * u.deg, height=390 * u.m)
utcoffset = -4 * u.hour # Eastern Daylight Time
time = Time("2012-7-12 23:00:00") - utcoffset
astropy.coordinates.EarthLocation.get_site_names
和 get_site_names
可用于获取主要观测站的位置。
使用 astropy.coordinates
为了找到2012年7月12日晚上11点从熊山观测到的M33 at的Alt,Az坐标。
m33altaz = m33.transform_to(AltAz(obstime=time, location=bear_mountain))
print(f"M33's Altitude = {m33altaz.alt:.2}")
M33's Altitude = 0.13 deg
这是有帮助的,因为它发现M33在这个时候几乎没有超出地平线。在夜间发现M33的气团信息更丰富。
在美国东部时间晚上10点到上午7点之间,以100倍的平均间隔计算M33的alt,az坐标:
midnight = Time("2012-7-13 00:00:00") - utcoffset
delta_midnight = np.linspace(-2, 10, 100) * u.hour
frame_July13night = AltAz(obstime=midnight + delta_midnight, location=bear_mountain)
m33altazs_July13night = m33.transform_to(frame_July13night)
将高度、方位角转换为空气质量 secz
属性:
将空气质量绘制为时间函数:
plt.plot(delta_midnight, m33airmasss_July13night)
plt.xlim(-2, 10)
plt.ylim(1, 4)
plt.xlabel("Hours from EDT Midnight")
plt.ylabel("Airmass [Sec(z)]")
plt.show()
使用 get_sun
要找到太阳在7月12日中午到7月13日中午之间1000个等距时间的位置:
from astropy.coordinates import get_sun
delta_midnight = np.linspace(-12, 12, 1000) * u.hour
times_July12_to_13 = midnight + delta_midnight
frame_July12_to_13 = AltAz(obstime=times_July12_to_13, location=bear_mountain)
sunaltazs_July12_to_13 = get_sun(times_July12_to_13).transform_to(frame_July12_to_13)
用同样的方法 get_body
找出月亮升起的时间。请注意,这将需要从互联网上下载一个10MB的文件来获得月球的准确位置。
from astropy.coordinates import get_body
moon_July12_to_13 = get_body("moon", times_July12_to_13)
moonaltazs_July12_to_13 = moon_July12_to_13.transform_to(frame_July12_to_13)
同时求出M33的alt,az坐标:
画一个美丽的图形来说明夜间、M33和太阳的高度:
plt.plot(delta_midnight, sunaltazs_July12_to_13.alt, color="r", label="Sun")
plt.plot(
delta_midnight, moonaltazs_July12_to_13.alt, color=[0.75] * 3, ls="--", label="Moon"
)
plt.scatter(
delta_midnight,
m33altazs_July12_to_13.alt,
c=m33altazs_July12_to_13.az.value,
label="M33",
lw=0,
s=8,
cmap="viridis",
)
plt.fill_between(
delta_midnight,
0 * u.deg,
90 * u.deg,
sunaltazs_July12_to_13.alt < -0 * u.deg,
color="0.5",
zorder=0,
)
plt.fill_between(
delta_midnight,
0 * u.deg,
90 * u.deg,
sunaltazs_July12_to_13.alt < -18 * u.deg,
color="k",
zorder=0,
)
plt.colorbar().set_label("Azimuth [deg]")
plt.legend(loc="upper left")
plt.xlim(-12 * u.hour, 12 * u.hour)
plt.xticks((np.arange(13) * 2 - 12) * u.hour)
plt.ylim(0 * u.deg, 90 * u.deg)
plt.xlabel("Hours from EDT Midnight")
plt.ylabel("Altitude [deg]")
plt.show()
Total running time of the script: (0分1.837秒)