mcp-наблюдение за звездами
Рассчитайте высоту, время восхода и захода небесных объектов (Солнца, Луны, планет, звезд и объектов дальнего космоса) для любого места на Земле с возможностью анализа светового загрязнения.
Функции
- Расчет высоты/азимута : получение высоты и направления по компасу для любого небесного объекта.
- Время восхода/захода : определите, когда объекты появляются/исчезают над горизонтом.
- Анализ светового загрязнения : загрузка и анализ карт светового загрязнения (формат GeoTIFF).
- Поддерживает :
- Объекты Солнечной системы (Солнце, Луна, планеты)
- Звезды (например, «Сириус»)
- Объекты дальнего космоса (например, «andromeda», «orion_nebula»)
- Учет часового пояса : работает с местным или всемирным координированным временем.
Установка
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°).
- Возвращает :
(rise_time, set_time)
как объекты Time
UTC.
load_map(map_path)
( src/light_pollution.py
)
- Входные данные :
map_path
: Путь к файлу GeoTIFF.
- Возвращает : кортеж
(vriis_data, bounds, crs, transform)
для анализа светового загрязнения.
Тестирование
Запустите тесты с:
Ключевые тестовые случаи ( 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
. - Структура проекта : уточнены роли файлов и тестовое покрытие.