确定和绘制天体的高度/方位角#

此示例演示了坐标转换和可见性曲线的创建,以帮助观察运行计划。

在这个例子中,我们制作了一个 SkyCoord 例如M33。然后使用以下方法找到高度方位坐标 astropy.coordinates.EarthLocationastropy.time.Time 对象

这个例子旨在展示 astropy.coordinates package. For more convenient and/or complex observation planning, consider the astroplan 包.

假设您计划参观美国纽约风景如画的熊山州立公园。你带着望远镜(当然),有人告诉你M33是那里观察的好目标。您碰巧知道当地时间晚上11:00有空,并且您想知道是否有空。Astropy可以回答这个问题。

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> from astropy import units as u
>>> from astropy.coordinates import AltAz, EarthLocation, SkyCoord, get_body, get_sun
>>> from astropy.time import Time
>>> from astropy.visualization import quantity_support

astropy.coordinates.SkyCoord.from_name() 使用Simbad解析对象名称并检索坐标。

获取M33的坐标:

>>> m33 = SkyCoord.from_name("M33")

使用 astropy.coordinates.EarthLocation 提供熊山的位置并将时间设置为2012年7月12日东部夏令时(EDT)晚上11点:

>>> bear_mountain = EarthLocation(lat=41.3 * u.deg, lon=-74 * u.deg, height=390 * u.m)
>>> utcoffset = -4 * u.hour  # EDT
>>> time = Time("2012-7-12 23:00:00") - utcoffset

astropy.coordinates.EarthLocation.get_site_names() 可用于获取主要天文台的位置。

使用 astropy.coordinates 寻找2012年7月12日晚上11点从Bear Mountain观察到的M33的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点之间M33的Alt、Az坐标,以100倍均匀间隔:

>>> 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)

将Alt,Az转换为空气质量, secz 属性:

>>> m33airmasss_July13night = m33altazs_July13night.secz

绘制气团随时间的函数:

>>> with quantity_support():
...     fig, ax = plt.subplots(1, 1, figsize=(12, 6))
...     ax.plot(delta_midnight, m33airmasss_July13night)
...     ax.set_xlim(-2, 10)
...     ax.set_ylim(1, 4)
...     ax.set_xlabel("Hours from EDT Midnight")
...     ax.set_ylabel("Airmass [Sec(z)]")
...     plt.draw()

使用 get_sun() 在7月12日中午和7月13日中午之间的1000个均匀间隔的时间内找到太阳的位置:

>>> 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() 寻找月亮何时升起。请注意,这需要从互联网下载10 MB的文件才能获得月球的准确位置。

>>> 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坐标:

>>> m33altazs_July12_to_13 = m33.transform_to(frame_July12_to_13)

制作一个图形,说明夜间以及M33和太阳在那段时间内的高度:

>>> with quantity_support():
...     fig, ax = plt.subplots(1, 1, figsize=(12, 6))
...     ax.plot(delta_midnight, sunaltazs_July12_to_13.alt, color="r", label="Sun")
...     ax.plot(
...         delta_midnight, moonaltazs_July12_to_13.alt, color=[0.75] * 3, ls="--", label="Moon"
...     )
...     mappable = ax.scatter(
...         delta_midnight,
...         m33altazs_July12_to_13.alt,
...         c=m33altazs_July12_to_13.az.value,
...         label="M33",
...         lw=0,
...         s=8,
...         cmap="viridis",
...     )
...     ax.fill_between(
...         delta_midnight,
...         0 * u.deg,
...         90 * u.deg,
...         sunaltazs_July12_to_13.alt < (-0 * u.deg),
...         color="0.5",
...         zorder=0,
...     )
...     ax.fill_between(
...         delta_midnight,
...         0 * u.deg,
...         90 * u.deg,
...         sunaltazs_July12_to_13.alt < (-18 * u.deg),
...         color="k",
...         zorder=0,
...     )
...     fig.colorbar(mappable).set_label("Azimuth [deg]")
...     ax.legend(loc="upper left")
...     ax.set_xlim(-12 * u.hour, 12 * u.hour)
...     ax.set_xticks((np.arange(13) * 2 - 12) * u.hour)
...     ax.set_ylim(0 * u.deg, 90 * u.deg)
...     ax.set_xlabel("Hours from EDT Midnight")
...     ax.set_ylabel("Altitude [deg]")
...     ax.grid(visible=True)
...     plt.draw()
../_images/example_gallery_plot_obs_planning-1_00.png

(png, svg, pdf)#

../_images/example_gallery_plot_obs_planning-1_01.png

(png, svg, pdf)#