cosmo/NASA_DATA_STRATEGY.md

9.2 KiB
Raw Blame History

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_spectypespectral_type
    • st_radradius_solar
    • st_massmass_solar
    • st_tefftemperature_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度
- 在我们的可视化尺度(秒差距级别):几乎可以忽略

结论

不需要定时获取位置数据

原因:

  1. 恒星位置在人类时间尺度(几年、几十年)内几乎不变
  2. 自行造成的位置变化远小于我们的渲染精度
  3. NASA Exoplanet Archive中的坐标数据是某个epoch如J2000.0)的快照,不会变化

什么时候需要更新?

仅在以下情况:

  1. 新发现的恒星系统NASA Archive新增了系外行星系统
  2. 数据修正:某个系统的距离或坐标被重新测量(罕见)
  3. 手动触发:管理员手动运行更新脚本

建议更新频率

  • 每季度或半年运行一次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表中

补充数据源

对于伴星详细数据,需要结合其他数据源:

  1. SIMBAD (推荐)

    • URL: http://simbad.u-strasbg.fr/simbad/
    • 数据:几乎所有已知恒星的详细参数
    • Python API: astroquery.simbad
    • 包含:双星轨道参数、伴星光谱类型、质量等
  2. Washington Double Star Catalog (WDS)

  3. Gaia 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

结论

  1. 主恒星数据 已有不需要从NASA获取
  2. 位置数据 静态,不需要定时更新
  3. 伴星数据⚠️ 可以从NASA获取部分sy_snum完整数据需SIMBAD

推荐行动

  • Phase 4.1先实现主恒星(已有数据)
  • Phase 5再考虑伴星需额外数据源

文档作者: Cosmo Development Team 最后更新: 2025-12-06