Cartes du ciel avec Skyfield

Des scripts Python pour générer diverses cartes du ciel avec astérismes.

J’ai déjà beaucoup utilisé le module Skyfield pour récupérer les coordonnées d’astres et les utiliser dans diverses représentations graphiques.

Ici, je m’intéresse à la récupération de coordonnées d’étoiles pour en faire différentes cartes du ciel.


Récupération des coordonnées équatoriales des étoiles

Ce script très court importe les coordonnées d’étoiles issues du catalogue Hipparcos.

# source: https://rhodesmill.org/skyfield/stars.html

from skyfield.api import load  # charger les données
from skyfield.data import hipparcos

limiting_magnitude = 5.5

# The Hipparcos mission provides our star catalog.

with load.open(hipparcos.URL) as f:
    stardata = hipparcos.load_dataframe(f)

# la variable stardata est un tableau de type DataFrame (module pandas)
# print(stardata)
# print(stardata.columns)  # en-têtes du tableau

# filtrage des étoiles les plus brillantes :

bright_stars = stardata[stardata.magnitude <= limiting_magnitude]

# classer par magnitude croissante :
bright_stars = bright_stars.sort_values(by='magnitude', ascending=True)

# retirer les colonnes inutiles du tableau :
col_to_remove = ['parallax_mas', 'ra_mas_per_year', 'dec_mas_per_year', 'epoch_year']
bright_stars = bright_stars.drop(col_to_remove, axis=1)


print(bright_stars)

Le résultat dans la console :

        magnitude  ra_degrees  dec_degrees   ra_hours
hip                                                  
32349       -1.44  101.288541   -16.713143   6.752569
30438       -0.62   95.987878   -52.695718   6.399192
69673       -0.05  213.918114    19.187270  14.261208
71683       -0.01  219.920410   -60.835147  14.661361
91262        0.03  279.234108    38.782993  18.615607
          ...         ...          ...        ...
100435       5.50  305.514290    24.446116  20.367619
56497        5.50  173.737519   -49.136947  11.582501
24450        5.50   78.683551     5.156129   5.245570
20171        5.50   64.858662    21.142411   4.323911
81252        5.50  248.936546   -65.495329  16.595770

[2851 rows x 4 columns]

Ce script importe les coordonnées (ascension droite ‘ra’ et déclinaison ‘dec’) de plus de 118000 étoiles. Le filtre de magnitude ne conserve ici que 2851 étoiles (une par ligne du tableau). Le filtrage se fait en utilisant la syntaxe du module pandas pour la gestion de données en tableaux.

Le script compressé :


Cartes du ciel centrées sur les pôles

Le script est modifié d’après celui proposé ici : https://github.com/bathoorn/starmap/blob/main/starmap.py

Outre les positions des étoiles, on trouve également les astérismes des constellations, les noms de certaines étoiles, les noms des constellations (code à 3 lettres) ainsi que leurs frontières. Toutes ces données sont importées via des modules ou des fichiers annexes que j’ai récupérés sur la page Github de l’auteur. Sur le script d’origine, la carte est centrée sur un point du ciel lié à une situation géographique ; pour obtenir des cartes centrées sur les pôles, j’ai déplacé ce point aux pôles nord et sud successivement, pour obtenir toute l’étendue du ciel observable.

Le graphique est une projection stéréographique du ciel, ce qui présente des avantages notables : la forme des constellation est respectée (la projection stéréographique conserve les angles), et il n’y a pas de discontinuités lorsqu’une constellation s’étend de part et d’autre d’une ascension droite de 360°.

Le fichier compressé ci-dessous comporte mes deux scripts et les fichiers annexes nécessaires.

La première exécution du script génère deux fichiers de données supplémentaires (éphémérides et coordonnées Hipparcos).


Carte centrée sur une constellation

Les 88 constellations du ciel sont identifiées par leur abréviation à 3 lettres (voir https://fr.wikipedia.org/wiki/Liste_des_constellations). Avec ce script, on indique l’abréviation de la constellation choisie, et le script génère une carte centrée sur cette constellation.

Si l’utilisateur entre une abréviation incorrecte pour la constellation demandée, un message d’erreur apparaît, avec la liste des codes reconnus.

Pour ce script, je voulais éviter de tracer les limites de toutes les constellations, et ne sélectionner que celle choisie. Mais le fichier comportant ces données ne permet pas d’identifier la constellation voulue. J’ai fini par trouver des coordonnées de limites par constellation (https://vizier.cds.unistra.fr/vizier/VizieR/constellations.htx). Je les ai laborieusement téléchargées et compilées dans un fichier csv unique comportant les coordonnées des sommets du polygones, et le code à 3 lettres de chaque constellation. Voici le fichier :

En revanche, je n’ai pas pu limiter de la même manière le tracé des astérismes et des étoiles à la constellation choisie. Il est facile de sélectionner uniquement les étoiles situées dans la fenêtre graphique, mais la gestion des astérismes (lignes des constellations) occasionne une erreur si on supprime des étoiles. Il y a sans doute une solution possible, mais je laisse le script en l’état, car son exécution n’est pas trop longue, et parce qu’il n’est pas évident d’intervenir sur la fonction qui génère les astérismes.

Le fichier compressé comportant le script et tous les fichiers annexes nécessaires :

Soyez le premier à commenter

Laisser un commentaire