343 lines
9.2 KiB
Markdown
343 lines
9.2 KiB
Markdown
# NASA数据源分析与数据策略
|
||
|
||
**日期**: 2025-12-06
|
||
**目的**: 回答Phase 4关于恒星数据获取的关键问题
|
||
|
||
---
|
||
|
||
## 📊 三个核心问题的答案
|
||
|
||
### 问题1: 恒星系主序星的数据是否还需要从NASA获取?
|
||
|
||
**答案:不需要,数据已经有了!**
|
||
|
||
#### 现状分析
|
||
|
||
✅ **恒星数据已在`star_systems`表中**
|
||
|
||
```sql
|
||
-- 当前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_type`
|
||
- `st_rad` → `radius_solar`
|
||
- `st_mass` → `mass_solar`
|
||
- `st_teff` → `temperature_k`
|
||
- 自动计算 → `color`
|
||
|
||
#### 需要做的事
|
||
|
||
❌ **不需要从NASA重新获取主恒星数据**
|
||
|
||
✅ **只需要从`star_systems`复制到`celestial_bodies`**
|
||
|
||
```python
|
||
# 数据迁移,不是数据获取
|
||
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有特定标记
|
||
|
||
**实际数据查询**:
|
||
```sql
|
||
-- 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)**
|
||
- URL: https://www.usno.navy.mil/USNO/astrometry/optical-IR-prod/wds
|
||
- 专门的双星数据库
|
||
- 包含:轨道参数、分离度、位置角
|
||
|
||
3. **Gaia Archive**
|
||
- URL: https://gea.esac.esa.int/archive/
|
||
- 高精度天体测量数据
|
||
- 可以识别双星系统
|
||
|
||
#### 实施建议
|
||
|
||
**Phase 4.1: 仅主恒星**
|
||
```python
|
||
# 从star_systems表迁移,不涉及NASA API
|
||
# 579个系统全部创建主恒星记录
|
||
```
|
||
|
||
**Phase 4.2: 识别多星系统**
|
||
```python
|
||
# 查询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: 补充伴星数据(手动/半自动)**
|
||
```python
|
||
# 对于标记为多星系统的,从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)**:
|
||
```python
|
||
# 修改 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查询伴星数据**:
|
||
```python
|
||
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
|