首页
学习
活动
专区
圈层
工具
发布
MCP广场 >详情页
mcp观星助手2026-10-23481分享添加福利群:解决AI开发者的「MCP实战痛点」
计算天体(太阳、月亮、行星、恒星和深空天体)在地球上任何位置的海拔高度、升起和落下时间。
By StarGazer1995
2026-10-23481
github
详情内容

mcp-stargazing

计算地球上任何位置的天体(太阳、月亮、行星、恒星和深空天体)的高度、升起时间和落下时间,并可选地进行光污染分析。

功能

  • 高度/方位角计算:获取任何天体的高度和罗盘方向。
  • 升起/落下时间:确定天体何时出现在地平线上或从地平线消失。
  • 光污染分析:加载并分析光污染地图(GeoTIFF 格式)。
  • 支持:
    • 太阳系天体(太阳、月亮、行星)
    • 恒星(例如:“sirius”)
    • 深空天体(例如:“andromeda”,“orion_nebula”)
  • 时区感知:支持本地时间或 UTC 时间。

安装

pip install astropy pytz numpy astroquery rasterio geopy

使用方法

计算高度/方位角

from src.celestial import celestial_pos
from astropy.coordinates import EarthLocation
import pytz
from datetime import datetime

# Observer location (New York)
location = EarthLocation(lat=40.7128, lon=-74.0060)

# Time (local timezone-aware)
local_time = pytz.timezone("America/New_York").localize(datetime(2023, 10, 1, 12, 0))
altitude, azimuth = celestial_pos("sun", location, local_time)
print(f"Sun Position: Altitude={altitude:.1f}°, Azimuth={azimuth:.1f}°")

计算升起/落下时间

from src.celestial import celestial_rise_set

rise, set_ = celestial_rise_set("andromeda", location, local_time.date())
print(f"Andromeda: Rise={rise.iso}, Set={set_.iso}")

加载光污染地图

from src.light_pollution import load_map

# Load a GeoTIFF light pollution map
vriis_data, bounds, crs, transform = load_map("path/to/map.tif")
print(f"Map Bounds: {bounds}")

API 参考

celestial_pos(celestial_object, observer_location, time) (src/celestial.py)

  • 输入:
    • celestial_object:名称(例如,"sun","andromeda")。
    • observer_location:EarthLocation 对象。
    • time:带时区的 datetime 或 Astropy 的 Time。
  • 返回:(altitude_degrees, azimuth_degrees)。

celestial_rise_set(celestial_object, observer_location, date, horizon=0.0) (src/celestial.py)

  • 输入:
    • date:带时区的 datetime。
    • horizon:地平线高度(默认:0°)。
  • 返回:作为 UTC Time 对象的 (rise_time, set_time)。

load_map(map_path) (src/light_pollution.py)

  • 输入:
    • map_path:指向 GeoTIFF 文件的路径。
  • 返回:用于光污染分析的元组 (vriis_data, bounds, crs, transform)。

测试

运行测试:

pytest tests/

关键测试用例 (tests/test_celestial.py)

def test_calculate_altitude_deepspace():
    """Test deep-space object resolution."""
    altitude, _ = celestial_pos("andromeda", NYC, Time.now())
    assert -90 <= altitude <= 90

def test_calculate_rise_set_sun():
    """Validate Sun rise/set times."""
    rise, set_ = celestial_rise_set("sun", NYC, datetime(2023, 10, 1))
    assert rise < set_

项目结构

.
├── src/
│   ├── celestial.py          # Core celestial calculations
│   ├── light_pollution.py    # Light pollution map utilities
│   ├── utils.py              # Time/location helpers
│   └── main.py               # CLI entry point
├── tests/
│   ├── test_celestial.py
│   └── test_utils.py
└── README.md

未来工作

  • 增加对彗星/小行星的支持。
  • 优化 SIMBAD 查询以支持离线使用。
  • 将光污染数据集成到可见性预测中。

主要更新:

  1. 光污染:在功能和 API 参考中添加了 light_pollution.py。
  2. 依赖项:在安装说明中添加了 rasterio 和 geopy。
  3. 项目结构:明确了文件角色和测试覆盖率。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档