oss

Astropy 让观测者成为坐标的一部分

9 条来源 7 条一手来源 已翻译 2026年9月16号

正在加载阅读与收藏统计…
正文
拉西拉天文台新技术望远镜的八角形建筑,映衬着明亮的银河光带与繁星密布的夜空。

欧洲南方天文台(ESO)拉西拉天文台的新技术望远镜,摄于 2014 年 ESO 超高清影像采集之旅。从当地望向天空,所见取决于观测者身在何处、时在何刻。摄影:ESO/B. Tafreshi (twanight.org).[2]

星表能告诉你一个星系位于何处,至于它是否已经升到你所在位置的地平线之上,还要把观测者纳入计算:观测者在地球上的位置、观测的时刻,以及希望得到哪一种观测视角。开源 Python 天文学库 Astropy 将这些条件逐一明确。要理解它的坐标架构,可以从一个小任务入手:把星表中的位置转换为一次观测所需的高度角和方位角。[1][3]

计算过程中,有时还要查询一张描述地球如何转动的表。连这层看似固定的背景,也成为了输入数据。[6]

坐标自带解读依据

Astropy 的 SkyCoord 是一个高层坐标容器。输入星表位置时,调用方可以给出赤经、赤纬、相应单位,以及国际天球参考系(ICRS)这样的坐标参考架。以度输入的角度和以小时输入的角度,需要按各自的单位解读;对象保留单位,也就明确记录了这一选择。[3]

参考架赋予坐标另一层含义。要完整定义一个坐标系统,仅有赤经、赤纬两列还欠缺信息。SkyCoord 会保留跨参考架转换所需的属性,而单个底层参考架只保存与自身相关的属性。当计算经过多个参考架,随后又需要取回最初的设定时,这一区别就有了实际意义。[3]

要得到本地观测视角,转换的目标是 AltAz 参考架:高度角表示目标高出地平线的角度,方位角表示沿地平线环绕一周时的方向。[7] 给定 EarthLocation 和观测时间后,核心表达式可以简洁到 target.transform_to(AltAz(obstime=when, location=site))。Astropy 的观测示例正是这样安排的。[1] 这次调用同时描述了观测目标与观测条件。

目标参考架也带着时钟

Time 将时间戳的格式与时间尺度分开处理。ISO 文本是一种表示形式,UTC、TAI 和 UT1 则是不同的时间尺度。改变时间的显示方式,与把时间从一种尺度转换到另一种尺度,属于两项操作,Astropy 在同一个时间对象中支持二者。[4]

因此,用于安排观测的计算笔记本应注明输入时间采用的计时依据。按当地钟表约定的时间,需要经过恰当转换,才能作为 UTC 观测时间使用。程序里即使写入了符合 ISO 格式的字符串,仍需交代写下这个时间时采用的时区。在官方观测示例中,作者明确计入了当地夏令时的偏移量。[1][4]

Astropy 的转换系统用一张转换图连接其支持的各个参考架。transform_to() 接受目标参考架的实例,让该实例的属性参与计算。这套基础设施也允许加入新的参考架和转换方法,应用可以直接扩展现有系统,把所需的转换纳入其中。[5]

这种架构让一次转换请求有据可查。阅读程序的人可以检查调用时指定了哪个参考架,以及随附了哪些属性。数学运算留在转换的内部实现中,观测假设则在调用处清楚呈现。

地球定向参数来自输入文件

接下来这项依赖,比时区更容易被忽略。Astropy 使用国际地球自转和参考系服务(IERS)的数据表,获取 UT1–UTC 偏移量与极移数据。这些数值把天文学中的时间、天球坐标与实测的地球定向联系起来。它们以数据形式输入计算,有别于库中始终固定的常量。[6]

astropy-iers-data 软件包附带这些数据表。当随包数据已不够新时,默认处理流程可以下载更新后的 IERS 数据。因此,一次看起来只涉及本地运算的计算,也有访问网络的情形。对于离线运行,文档建议预先更新数据包;设置 iers.conf.auto_download = False 会关闭自动获取,并默认使用随包附带的数据。[6]

据此,我的实践建议是:开展研究计算时,将实际使用的数据表与软件环境一并保存。持续维护的服务也需要有人负责更新数据。关闭下载后,旧预测的精度依然如故;放宽预测值的有效时限,则是在精度上作出的选择。[6]

大气条件需要明确设定

要明确一个高度角的含义,还须说明计算如何处理大气。在 Astropy 的 AltAz 中,pressure 默认为零,此时大气折射处于关闭状态,得到的是以观测者为中心、未经折射修正的地平坐标。设定非零气压会启用折射模型,温度、相对湿度与观测波长也都有对应的参考架属性。[7]

这些设定各有适用范围。文档指出,高度角低于约 5 度时,模型就会失准;在地平线附近或以下,计算甚至会给出失去实际意义的结果。即使补充更多大气参数,这一限制仍然存在。[7]

对于观测规划工具,界面由此需要交代清楚两件事:显示的高度角是否包含折射,以及实际观测采用的最低高度角。数值多出几位小数,也仍须考虑山脊、圆顶墙壁的遮挡,以及模型失准的区域,才能判断目标是否适合观测。坐标转换回答的是设定好的几何问题,如何使用这个答案,则由应用决定。

移动观测者与推算恒星位置各有步骤

还有一项时间上的区别需要保留。设置目标参考架的 obstime,确定的是观测时的条件。把运动恒星在星表中的位置推算到另一个历元,则是单独的一步。

Astropy 用 SkyCoord.apply_space_motion() 完成这一步。给定必要的位置、运动与参考时间信息后,它按照天体在惯性参考架中做匀速直线运动的假设,推算天体的位置。文档以相隔多年的巡天为例,说明在不同巡天中匹配同一颗近邻恒星时,为何需要考虑这一点。[8]

因此,处理顺序有明确含义:恒星运动对结果有影响时,先将天体位置推算到所需历元,再把它转换到观测者的参考架中。星表中缺失的自行信息,仍须另行取得,单凭当前观测时间无法补足。这种位置推算方法也有特定的运动假设,适用范围有别于任意运动天体的轨道模型。[8]

共用计算工具,每项选择都有据可查

天文学家 Meredith Rawls 在一篇关于 2014 年 SciCoder 工作坊的独立报道中,描述了研究人员共同学习 Astropy 坐标、单位与 FITS 工具的情形。她将这些教学活动放在一个更广泛的问题中考察:处于职业生涯早期的天文学家,往往得靠自己重新摸索基础计算技术。[9] 一次小计算就会涉及数个专业领域,共用软件库的价值也在这里变得格外具体。

在我看来,这套架构的长处,在于让这些专业知识借助含义明确的对象相互衔接。SkyCoord 保存位置的解读依据,目标参考架保存观测者的具体条件,时间尺度、参考数据表和物理模型则各自作为可辨认的输入。对安排夜间观测的人而言,这也给出了排查意外结果的起点:先看目标、地点与时钟,再检查程序实际采用了哪些关于地球、大气和天体运动的假设。

来源

  1. Astropy 文档,《确定并绘制天体的高度角与方位角》——观测者位置、时间转换与坐标转换调用。
  2. 欧洲南方天文台,《拉西拉迎接超高清拍摄》——新技术望远镜照片的出处与摄影署名。
  3. Astropy 文档,《使用 SkyCoord 高层类》——坐标初始化、单位、参考架及参考架属性的保留。
  4. Astropy 文档,《时间与日期》——时间格式与时间尺度的区别。
  5. Astropy 文档,《坐标系统之间的转换》——目标参考架实例与可扩展的坐标转换。
  6. Astropy 文档,《IERS 数据访问》——地球定向参数表、自动下载、离线运行与预测数据的有效时限设置。
  7. Astropy API 参考,《AltAz》——参考架的大气属性、默认气压与折射模型的局限。
  8. Astropy 文档,《考虑空间运动》——位置推算的假设,以及天体位置变化的单独处理。
  9. Meredith Rawls,《SciCoder 回顾》,Astrobites,2014 年 7 月 2 日——关于工作坊的独立报道,介绍共用天文软件在实践中的作用。
Previous Ink/Stitch:让矢量图学会刺绣

Recommended In oss

Matched by subject and format