You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取太阳系天体质量与半径?Astroquery相关疑问

解答

获取太阳系天体的半径与质量

1. 使用 Astroquery Horizons 获取物理属性

Astroquery 的 Horizons 模块支持获取天体物理参数,默认的 elements() 和 ephemeris() 方法不返回这类数据,你可以调用 physical_properties() 方法直接获取:

from astroquery.horizons import Horizons

# 查询木星的物理属性
jupiter = Horizons(id='Jupiter', id_type='majorbody', location='500@0')
phys_data = jupiter.physical_properties()
print(phys_data)

返回结果包含赤道半径、**质量(以地球质量为单位)**等核心物理参数。

2. 小行星/小天体:使用 Astroquery JPL SBDB

针对小行星、彗星等小天体,JPL 小天体数据库(SBDB)的支持更完善,通过 astroquery.jplsbdb 可直接获取详细物理参数:

from astroquery.jplsbdb import SBDB

# 查询谷神星的物理参数
ceres_data = SBDB.query_object('Ceres')
# 提取半径、质量信息
print("半径:", ceres_data['phys_par']['radius'])
print("质量:", ceres_data['phys_par']['mass'])

3. 已知大天体:直接使用 Astropy Constants

对于太阳、八大行星这类经典天体,Astropy 内置常量库提供了高精度固定值:

from astropy.constants import M_sun, M_jup, R_earth, R_mars

print("太阳质量:", M_sun)
print("地球半径:", R_earth)

通过名称获取天体真实ID(避免 barycenter)

1. 明确指定天体类型

在 Horizons 查询时,通过 id_type 参数指定天体类型,直接定位本体而非 barycenter:

  • 大行星、卫星:使用 id_type='majorbody'
  • 小行星、彗星:使用 id_type='smallbody'

示例代码:

# 直接获取火星本体,而非火星 barycenter
mars = Horizons(id='Mars', id_type='majorbody', location='500@0')

2. 先搜索再选择

若不确定天体类型或名称有歧义,使用 id_type='search' 执行模糊搜索,从结果中筛选正确的天体ID:

search_res = Horizons(id='Pluto', id_type='search').query()
# 查看搜索结果,选择目标天体的ID(如Pluto的ID为9)
print(search_res['targetname', 'id'])

之后用选中的ID重新发起查询即可。

内容的提问来源于stack exchange,提问作者DrDino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 05:33:15