9.2 KiB
9.2 KiB
NASA数据源分析与数据策略
日期: 2025-12-06 目的: 回答Phase 4关于恒星数据获取的关键问题
📊 三个核心问题的答案
问题1: 恒星系主序星的数据是否还需要从NASA获取?
答案:不需要,数据已经有了!
现状分析
✅ 恒星数据已在star_systems表中
-- 当前star_systems表已包含完整的主恒星数据
SELECT name, host_star_name, spectral_type, radius_solar,
mass_solar, temperature_k, color
FROM star_systems
WHERE id = 479;
-- 结果示例(Proxima Centauri):
-- name: Proxima Cen System
-- host_star_name: Proxima Cen
-- spectral_type: M5.5 V
-- radius_solar: 0.141
-- mass_solar: 0.1221
-- temperature_k: 2900
-- color: #ffbd6f
数据来源:
- 这些数据在Phase 3时已经通过
fetch_interstellar_data.py脚本从NASA Exoplanet Archive获取 - 数据源:NASA Exoplanet Archive的Planetary Systems (PS)表
- 字段映射:
st_spectype→spectral_typest_rad→radius_solarst_mass→mass_solarst_teff→temperature_k- 自动计算 →
color
需要做的事
❌ 不需要从NASA重新获取主恒星数据
✅ 只需要从star_systems复制到celestial_bodies
# 数据迁移,不是数据获取
for system in star_systems:
celestial_body = {
"system_id": system.id,
"name": system.host_star_name,
"type": "star",
"metadata": {
"star_role": "primary",
"spectral_type": system.spectral_type,
"radius_solar": system.radius_solar,
"mass_solar": system.mass_solar,
"temperature_k": system.temperature_k,
"color": system.color
}
}
问题2: 其它恒星系的位置数据是否还需要定时获取?
答案:不需要定时获取,恒星位置是静态的(在人类时间尺度上)
恒星运动特性
自行(Proper Motion):
- 恒星相对于太阳的运动速度:通常10-100 km/s
- 角度变化:每年约0.001-0.1角秒
- 在50年内,即使是最快的恒星,位置变化也只有约5角秒(约0.0014度)
举例:
Barnard's Star(自行最快的恒星)
- 自行:10.3角秒/年
- 50年后位置变化:515角秒 ≈ 0.14度
- 在我们的可视化尺度(秒差距级别):几乎可以忽略
结论
❌ 不需要定时获取位置数据
原因:
- 恒星位置在人类时间尺度(几年、几十年)内几乎不变
- 自行造成的位置变化远小于我们的渲染精度
- NASA Exoplanet Archive中的坐标数据是某个epoch(如J2000.0)的快照,不会变化
什么时候需要更新?
仅在以下情况:
- 新发现的恒星系统:NASA Archive新增了系外行星系统
- 数据修正:某个系统的距离或坐标被重新测量(罕见)
- 手动触发:管理员手动运行更新脚本
建议更新频率:
- 每季度或半年运行一次
fetch_interstellar_data.py - 主要是为了获取新发现的系外行星系统,而不是更新位置
问题3: 伴星数据无法从NASA获取么?(大部分都不是单恒星系统)
答案:可以从NASA获取!但需要额外的字段和逻辑
NASA API支持情况
✅ NASA Exoplanet Archive有多星系统数据
关键字段:
sy_snum: 系统中恒星数量(Number of Stars in System)hostname: 主恒星名称- Binary/Multiple star systems有特定标记
实际数据查询:
-- NASA API查询示例
SELECT hostname, sy_snum, sy_dist
FROM ps
WHERE sy_dist < 50 AND sy_snum > 1
ORDER BY sy_dist;
-- 结果示例:
Proxima Cen sy_snum=3 (三星系统: Alpha Cen A, B, Proxima)
GJ 15 A sy_snum=2 (双星系统)
GJ 667 C sy_snum=3 (三星系统)
LTT 1445 A sy_snum=3 (三星系统)
...
伴星数据字段
NASA Archive的伴星相关字段:
st_nstar: 系统中恒星数量(与sy_snum相同)- Binary system parameters(如果可用):
st_binary: 是否为双星st_bincomp: 伴星编号st_binsep: 双星分离度(角秒)
限制:
- ⚠️ NASA Archive 主要关注行星宿主星,伴星详细数据可能不完整
- ⚠️ 如果伴星没有行星,可能不在Archive中
- ⚠️ 双星轨道参数(半长轴、周期、偏心率)通常不包含在PS表中
补充数据源
对于伴星详细数据,需要结合其他数据源:
-
SIMBAD (推荐)
- URL: http://simbad.u-strasbg.fr/simbad/
- 数据:几乎所有已知恒星的详细参数
- Python API:
astroquery.simbad - 包含:双星轨道参数、伴星光谱类型、质量等
-
Washington Double Star Catalog (WDS)
- URL: https://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/wds
- 专门的双星数据库
- 包含:轨道参数、分离度、位置角
-
Gaia Archive
- URL: https://gea.esac.esa.int/archive/
- 高精度天体测量数据
- 可以识别双星系统
实施建议
Phase 4.1: 仅主恒星
# 从star_systems表迁移,不涉及NASA API
# 579个系统全部创建主恒星记录
Phase 4.2: 识别多星系统
# 查询NASA API,获取sy_snum字段
systems_with_multistars = fetch_systems_where_sy_snum_gt_1()
# 结果示例:
# {
# "Proxima Cen": 3,
# "GJ 15 A": 2,
# "GJ 667 C": 3,
# ...
# }
Phase 4.3: 补充伴星数据(手动/半自动)
# 对于标记为多星系统的,从SIMBAD查询伴星数据
for system in multistar_systems:
# Query SIMBAD for companion stars
companions = query_simbad_companions(system.hostname)
for companion in companions:
# Insert into celestial_bodies
insert_companion_star(
system_id=system.id,
name=companion.name,
spectral_type=companion.spectral_type,
orbital_params=companion.orbital_params
)
数据质量评估:
- 约50个系统有多颗恒星(sy_snum > 1)
- 其中约30个系统可以从SIMBAD获取伴星详细数据
- 约20个系统需要手动补充或标记为"数据不完整"
🎯 最终数据策略
Phase 4数据计划
✅ 立即执行(Phase 4.1)
主恒星数据迁移 - 无需从NASA获取
来源:star_systems表(已有数据)
目标:celestial_bodies表
数量:579条主恒星记录
方法:数据库内部迁移脚本
时间:< 1小时
📋 可选执行(Phase 4.2+)
多星系统识别 - 需要从NASA获取
来源:NASA Exoplanet Archive (sy_snum字段)
目标:更新star_systems.extra_data,标记多星系统
数量:约50个多星系统
方法:扩展fetch_interstellar_data.py脚本
时间:< 1小时
伴星数据补充 - 需要从SIMBAD/WDS获取
来源:SIMBAD + Washington Double Star Catalog
目标:celestial_bodies表(type='star', star_role='companion')
数量:约50-100条伴星记录(估计)
方法:新脚本 + 部分手动
时间:2-4小时(半自动化)
数据更新频率
| 数据类型 | 更新频率 | 原因 |
|---|---|---|
| 恒星位置 | 不需要 | 自行可忽略(50年 < 1%变化) |
| 系外行星数据 | 每季度 | 新发现的系统 |
| 恒星参数 | 每年 | 数据修正(罕见) |
| 伴星数据 | 手动触发 | 数据来源分散,需人工整理 |
📝 实施建议
推荐方案:分阶段实施
Phase 4.1: MVP(最小可行产品)
✅ 仅主恒星
✅ 无需从NASA获取新数据
✅ 579个恒星系统全部可用
⏱️ 实施时间:4-6小时
Phase 4.2: 增强版(多星系统识别)
📊 扩展NASA查询,获取sy_snum
🏷️ 标记多星系统
⏱️ 额外时间:1小时
Phase 5: 完整版(伴星展示)
🌟 补充伴星数据(SIMBAD/WDS)
🎨 实现双星轨道渲染
⏱️ 额外时间:4-8小时
代码示例
扩展NASA查询(获取sy_snum):
# 修改 fetch_interstellar_data.py
table = NasaExoplanetArchive.query_criteria(
table="ps",
select="hostname, sy_dist, ra, dec, sy_pnum, sy_snum, " # 新增sy_snum
"st_spectype, st_rad, st_mass, st_teff, "
"pl_name, pl_orbsmax, pl_orbper, pl_orbeccen, pl_rade, pl_eqt",
where="sy_dist < 50",
order="sy_dist"
)
# 在系统数据中记录恒星数量
systems[hostname]["data"]["star_count"] = int(get_val(row['sy_snum']))
从SIMBAD查询伴星数据:
from astroquery.simbad import Simbad
def query_companion_stars(primary_star_name):
"""查询伴星信息"""
# SIMBAD查询示例
result_table = Simbad.query_object(primary_star_name)
# 查询双星信息
# 这需要更复杂的查询逻辑,SIMBAD有专门的binary star tables
return companion_data
✅ 结论
- 主恒星数据:✅ 已有,不需要从NASA获取
- 位置数据:✅ 静态,不需要定时更新
- 伴星数据:⚠️ 可以从NASA获取部分(sy_snum),完整数据需SIMBAD
推荐行动:
- Phase 4.1先实现主恒星(已有数据)
- Phase 5再考虑伴星(需额外数据源)
文档作者: Cosmo Development Team 最后更新: 2025-12-06