mcp-observación de estrellas
Calcule la altitud y las horas de salida y puesta de los objetos celestes (Sol, Luna, planetas, estrellas y objetos del espacio profundo) para cualquier ubicación de la Tierra, con análisis de contaminación lumínica opcional.
Características
Cálculo de altitud/azimut : obtenga la elevación y la dirección de la brújula para cualquier objeto celeste.
Horas de salida y puesta : determina cuándo aparecen o desaparecen los objetos sobre el horizonte.
Análisis de contaminación lumínica : cargue y analice mapas de contaminación lumínica (formato GeoTIFF).
Soporta :
Objetos del sistema solar (Sol, Luna, planetas)
Estrellas (por ejemplo, "sirio")
Objetos del espacio profundo (por ejemplo, "andrómeda", "nebulosa_de_orión")
Consciente de zona horaria : funciona con horas locales o UTC.
Related MCP server: Celestial Position MCP Server
Instalación
pip install astropy pytz numpy astroquery rasterio geopyUso
Calcular altitud/azimut
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}°")Calcular tiempos de subida y bajada
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}")Cargar mapa de contaminación lumínica
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}")Referencia de API
celestial_pos(celestial_object, observer_location, time) ( src/celestial.py )
Entradas :
celestial_object: Nombre (por ejemplo,"sun","andromeda").observer_location: objetoEarthLocation.time:datetime(según la zona horaria) o AstropyTime.
Devuelve :
(altitude_degrees, azimuth_degrees).
celestial_rise_set(celestial_object, observer_location, date, horizon=0.0) ( src/celestial.py )
Entradas :
date: fechadatetimeque tienen en cuenta la zona horaria.horizon: Elevación del horizonte (predeterminado: 0°).
Devuelve :
(rise_time, set_time)como objetosTimeUTC.
load_map(map_path) ( src/light_pollution.py )
Entradas :
map_path: Ruta al archivo GeoTIFF.
Devuelve : Tupla
(vriis_data, bounds, crs, transform)para el análisis de la contaminación lumínica.
Pruebas
Ejecutar pruebas con:
pytest tests/Casos de prueba clave ( 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_Estructura del proyecto
.
├── 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.mdTrabajo futuro
Añadir soporte para cometas/asteroides.
Optimice las consultas SIMBAD para su uso sin conexión.
Integrar datos de contaminación lumínica en las predicciones de visibilidad.
Actualizaciones clave:
Contaminación lumínica : se agregó
light_pollution.pya las características y a la referencia de API.Dependencias : Se agregaron
rasterioygeopya las instrucciones de instalación.Estructura del proyecto : Se aclararon las funciones de los archivos y la cobertura de las pruebas.