关于 — 天文计算工具箱

这是什么

一套纯前端天文计算网页,基于 NASA CSPICE 内核(编译为 WebAssembly)和各类开源代码。在浏览器内完成天体坐标、高度角、卫星过境等计算,无需后端。

WASM 计算内核为 asm_lite_node.js(~2MB,505 个 CSPICE 函数),JS 封装层为 ephem_calc_browser.js + astro_lib_browser.mjs。

页面功能

页面功能
主页恒星目标 RA/DEC + Alt/Az 查询
国内台站国内主要天文台站目标高度角计算与可观测窗口
行星与天然卫星行星/天然卫星站心坐标与 Alt/Az,NAIF ID 逗号分隔批量输入
BSP 历表上传自定义 BSP/SPK,查询天体坐标与高度曲线
小行星MPC 轨道根数或 NASA/PMO BSP 两种方式计算小行星
TLE 卫星TLE 轨道数据卫星过境预报

通用功能:台站 MPC 代码搜索 + 手动经纬度/海拔;UTC 时间文本输入 + 📅 日期选择器;RA 输出为 HMS 格式,Dec/Alt/Az 为 DMS 格式。

BSP 分片与 BPC

所有计算均在浏览器本地执行,上传的 BSP 文件不发送至服务器。

完整 de440s.bsp 覆盖 1949-2049 年,单文件过大。使用 NAIF naifutils 中的 spkmerge 工具沿时间轴拆分为约一个月的分片,存入 bsp_splitted/ 目录。各组 {group}_info.json 记录每个分片的起止 ET 范围。

页面启动时,用当前时刻二分查找对应分片并加载。后续计算中,按天体所在组(通过 all_info.json 的 NAIF ID→组名映射)自动补充分片。天然卫星按行星分组:mars/、jupiter_main/、saturn_main/、uranus_major/、neptune_main/、pluto/。

BPC(Binary PCK)提供高精度 ITRF93 地球定向参数,按月切分存入 bpc_splitted/earth/。页面启动时自动加载当前月份 BPC,提升 spkcpoCompute 计算结果至 mas 级。

小行星两种数据源

asteroids.html 支持两类数据:

MPC 轨道根数 — 从 MPCORB.DAT 提取小行星 Kepler 根数,通过 conicsCompute 做二体轨道传播,配合 spkpos + stelab 做光行时迭代和恒星光行差校正。

TYPE8 BSP — 由 JPL Horizons 生成的 type8 格式 SPK 文件,加载后走 CSPICE spkpos/spkcpo 直接计算,对标 HORIZONS <1 mas。

精度

基于 2026-07-26T12:28:27,49 天体(太阳 + 八大行星 + 质心 + 火星/木星/土星/天王星/海王星/冥王星卫星)× 4 台站(O44/N43/O17/327)的对比:

JS CSPICE vs Python spiceypy(同一 CSPICE N0067 内核)

方法ΔRAΔDec
spkcpo(LT) + str2et0.000 mas0.000 mas

使用完全相同的内核文件与相同的 spkcpo(LT, OBSERVER, ITRF93) 调用路径。JS 与 Python spiceypy 返回逐位一致的 RA/DEC 和 Alt/Az。

JS vs Python skyfield

指标rmsmax样本
ΔRA(排除月球)0.62 mas2.23 mas188
ΔDec(排除月球)0.20 mas0.78 mas188
ΔRA(月球 301)10.20 mas12.76 mas4
ΔDec(月球 301)5.33 mas6.93 mas4
ΔAlt4.5 arcsec13.6 arcsec192
ΔAz7.1 arcsec16.9 arcsec192

RA/Dec 残差来自 JS spkcpo(LT) 与 skyfield observe().radec() 的光行时迭代实现差异以及 GMST 算法(skyfield earthlib vs skyfield 内部)的微小差异。月球残差较大因其近距放大观测者位置偏差。

Alt/Az 残差来自 apparentAltAz(IAU 2006 岁差 + IAU 1980 章动 63 项 + Bennett 折射)与 skyfield apparent().altaz()(IAU 2000A 完整章动 + 内置折射)的模型版本差异。

如需 Alt/Az 完全对齐,需重编译 WASM 加入 azlcpo_c。

待办

修改记录

日期页面内容
2026-07-28domestic_calc月球距离从硬编码 30° 改为真实月-星角距;新增月球高度角曲线(青色)
2026-07-28domestic_calcRA/DEC 输入支持 HMS/DMS 格式(05:32:18 / 05h32m18s / -80:22:03 / -80d22m03s)
2026-07-28domestic_calc默认台站改为冷湖(O17);默认终止时间改为 +24h;新增 "必须采用UTC时间输入" 提示

依赖与致谢

天文计算后端基于 NASA-AMMOS/timecraftjs,该项目将 NASA JPL 的 CSPICE N0067 工具编译为 WebAssembly,在浏览器内提供全部底层天文函数(asm_lite_node.js),包括行星历表查询、时间系统转换、坐标变换等。

岁差、章动、格林尼治恒星时、大气折射等天文算法部分转译自 Skyfield (Brandon Rhodes) 的 Python 实现。Skyfield 本身也使用了 JPL 星历和 IAU 标准模型。

卫星计算模块 (SGP4) 基于 shashwatak/satellite-js 的 fork 版本 chaorun/satellite-js (onlyjs),用于 satcalc.html 的 TLE 卫星轨道传播和过境预报。

章动 63 项表、日心坐标、行星位置角等天文公式参考了 Jean Meeus 的《天文算法》(Astronomical Algorithms)。

ICP备案号:苏ICP备2024070404号    苏公网安备32011302320896