一套纯前端天文计算网页,基于 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 文件不发送至服务器。
完整 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)的对比:
| 方法 | ΔRA | ΔDec |
|---|---|---|
| spkcpo(LT) + str2et | 0.000 mas | 0.000 mas |
使用完全相同的内核文件与相同的 spkcpo(LT, OBSERVER, ITRF93) 调用路径。JS 与 Python spiceypy 返回逐位一致的 RA/DEC 和 Alt/Az。
| 指标 | rms | max | 样本 |
|---|---|---|---|
| ΔRA(排除月球) | 0.62 mas | 2.23 mas | 188 |
| ΔDec(排除月球) | 0.20 mas | 0.78 mas | 188 |
| ΔRA(月球 301) | 10.20 mas | 12.76 mas | 4 |
| ΔDec(月球 301) | 5.33 mas | 6.93 mas | 4 |
| ΔAlt | 4.5 arcsec | 13.6 arcsec | 192 |
| ΔAz | 7.1 arcsec | 16.9 arcsec | 192 |
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。
satcalc.html:CelesTrak/Space-Track 正逐步弃用 TLE,转向 OMM (JSON/CSV)。未来需支持 OMM 导入替代 TLE 解析。azlcpo_c,实现 Alt/Az 与 spyephem 完全对齐。asteroids.html 视星等加入输出列(MPC 202 字节轨道根数已含 H/G 星等参数)。| 日期 | 页面 | 内容 |
|---|---|---|
| 2026-07-28 | domestic_calc | 月球距离从硬编码 30° 改为真实月-星角距;新增月球高度角曲线(青色) |
| 2026-07-28 | domestic_calc | RA/DEC 输入支持 HMS/DMS 格式(05:32:18 / 05h32m18s / -80:22:03 / -80d22m03s) |
| 2026-07-28 | domestic_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)。