mcp-наблюдение за звездами
Рассчитайте высоту, время восхода и захода небесных объектов (Солнца, Луны, планет, звезд и объектов дальнего космоса) для любого места на Земле с возможностью анализа светового загрязнения.
Функции
Расчет высоты/азимута : получение высоты и направления по компасу для любого небесного объекта.
Время восхода/захода : определите, когда объекты появляются/исчезают над горизонтом.
Анализ светового загрязнения : загрузка и анализ карт светового загрязнения (формат GeoTIFF).
Поддерживает :
Объекты Солнечной системы (Солнце, Луна, планеты)
Звезды (например, «Сириус»)
Объекты дальнего космоса (например, «andromeda», «orion_nebula»)
Учет часового пояса : работает с местным или всемирным координированным временем.
Related MCP server: Celestial Position MCP Server
Установка
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(с учетом часового пояса) или AstropyTime.
Возвращает :
(altitude_degrees, azimuth_degrees).
celestial_rise_set(celestial_object, observer_location, date, horizon=0.0) ( src/celestial.py )
Входные данные :
date:datetimeс учетом часового пояса.horizon: высота горизонта (по умолчанию: 0°).
Возвращает :
(rise_time, set_time)как объектыTimeUTC.
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 для использования в автономном режиме.
Интеграция данных о световом загрязнении в прогнозы видимости.
Ключевые обновления:
Световое загрязнение : добавлен
light_pollution.pyк функциям и справочнику API.Зависимости : В инструкции по установке добавлены
rasterioиgeopy.Структура проекта : уточнены роли файлов и тестовое покрытие.