Dans cette période de canicule, beaucoup de cartes météos circulent dans les médias et sur les réseaux sociaux. Dans ce tuto, nous allons voir pas à pas comment vous pouvez réaliser votre propre carte à partir de prévisions accessibles gratuitement via Météo France.
Obtenir l’accès aux APIs de Météo France
Météo France met à disposition certaines de ses prévisions. L’accès à ces données est gratuit et relativement simple. Pour commencer, allez sur le portail des APIs Météo France et créez un compte.
Une fois que le compte est créé, connectez-vous et rendez-vous sur la page “applications” en suivant ce lien ou en cliquant sur l’onglet correspondant en haut à gauche, à côté du logo Météo France.
Sur cette page, cliquez sur “Ajoutez une nouvelle application”, quelques informations sur le projet vous sont demandées mais seul le nom est obligatoire. Mettez ce que vous voulez, par exemple “ Test accès previsions” puis cliquez sur sauvegarder.
Retournez sur la page “Applications” et cliquez sur l’application que vous venez de créer. Dans la colonne de gauche cliquez sur “Abonnements” puis “S’abonner aux APIs” en haut de la page.
Vous pouvez maintenant choisir les APIs auxquels votre application va pouvoir accéder. Nous allons utiliser Arpege, l’un des modèles de météorologiques de Météo France. Cliquez sur “s’abonner” dans la ligne correspondante. Vous pouvez ensuite fermer la fenêtre.
Plusieurs méthodes d’accès sont disponibles, nous allons utiliser la plus simple : générer une clé. Pour cela cliquez sur “Api Key” dans la colonne de gauche puis “Generate key”. Une fenêtre s’ouvre pour vous signaler que la clé sera valable 3 ans, cliquez simplement sur “Générer” puis copiez la clé fournie.
Il reste une dernière étape avant de pouvoir utiliser cette clé dans votre code : changez l’encodage. Pour cela vous pouvez aller sur ce site, coller votre clé dans le premier cadre puis cliquer sur “Encode”.
Félicitation, vous avez maintenant une clé pour accéder aux données de Météo France. Il ne vous reste plus qu’à copier le résultat dans un fichier texte.
Quelles sont les prévisions de température disponibles ?
Les prévisions sont réalisées toutes les 6 heures (à 0h, 6h, 12h et 18h) et courent, en théorie, sur 114 heures. Cependant les prévisions peuvent n’être pas disponibles ou couvrir une période moins longue. Nous allons donc d’abord récupérer la liste des prévisions disponibles pour la température, choisir la plus récente et voir précisément quelle période elle couvre.
Commençons par importer les librairies utiles, la clé de l’API et le nom exact de la prévision que nous cherchons :
Nous allons maintenant construire l’adresse de l’API à interroger, elle se compose :
De l’adresse générique des APIs Météo France : https://public-api.meteofrance.fr/public/
Du nom de la ressource à laquelle on veut accéder, dans notre cas les prévisions disponibles (“capabilities”) du modèle ARPEGE pour l’Europe
De la clé vous autorisant à accéder aux données
L’adresse peut donc être obtenue de la façon suivante :
#Ressource à laquelle on souhaite accéder
ressource = "arpege/1.0/wms/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WMS/GetCapabilities?service=WMS"
#URL à interroger
url = f"https://public-api.meteofrance.fr/public/{ressource}&apikey={api_key}"
Nous allons interroger cette url, récupérer et lire la réponse puis la mettre en forme en utilisant Beautifulsoup.
La réponse contient les dates des prévisions disponibles pour l’ensemble des variables : la température, qui nous intéresse, mais aussi la vitesse du vent, l’humidité relative, les précipitations, etc. Il faut sélectionner le layer correspondant à la variable que nous cherchons :
Dans ce layer nous allons récupérer les dates de début des prévisions disponibles (“reference_time”), puis sélectionner la dernière. Enfin, à partir de cette date et de l’ID de la variable recherchée nous allons construire le nom de la prévision qui nous intéresse :
#On recherche les prévisions disponibles dans ce layer :
previsions_disponibles = layer.find("dimension", {"name":"reference_time"}).text.split(",")
#On récupére la date de la dernière prevision
date_derniere_prevision = previsions_disponibles[-1]
#Et on construit l'ID de la prévision correspondante
derniere_prevision = f"{ID}___{date_derniere_prevision}"
Au moment où cet article est écrit, la dernière prévision est : “TEMPERATURE__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND___2022–07–26T12:00:00Z”. C’est-à-dire qu’elle commence le 26 juillet 2022 à midi.
Téléchargement de la prévision météo
Comme on l’a vu plus haut, les prévisions courent normalement sur 114 heures avec un pas de temps horaire mais cela peut parfois changer. Regardons quelles sont les dates couvertes par la notre.
Le principe est le même que précédemment : construire l’url à interroger, récupérer la réponse et chercher les informations qui nous intéressent :
ressource = "/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS/DescribeCoverage?service=WCS"
url = f"https://public-api.meteofrance.fr/public{ressource}&coverageID={derniere_prevision}&apikey={api_key}"
response = request.urlopen(url)
debut = soup.find('gml:beginposition').text
fin = soup.find('gml:endposition').text
debut, fin
Le résultat dans notre cas : la première date disponible dans la prévision est le 26 juillet à midi, comme prévu, et la dernière est le 31 juillet à 6h.
On peut récupérer les prévisions pour n’importe quelle heure entre ces deux dates. Prenons par exemple le 30 juillet à 16h.
Encore une fois, il faut construire l’url correspondante. Celle-ci sera un peu plus complexe. Comme précédemment, elle comprend l’url de base, la ressource à laquelle on veut accéder et la clé mais il faut également y ajouter :
la prévision utilisée : dans notre cas la dernière, que nous avons identifié plus haut
le pas de temps recherché
la hauteur au-dessus du sol : 2 mètres
les limites en latitude et longitude de la zone qui nous intéresse.
Pour ce dernier point, nous allons prendre 38 à 53 pour la latitude et -8 à 12 pour la longitude ce qui correspond approximativement à la France métropolitaine. Il serait tout à fait possible de prendre une autre zone en Europe ou, en modifiant la ressource pour accéder à la version mondiale du modèle, n’importe où ailleurs dans le monde.
ressource = "/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS/GetCoverage?SERVICE=WCS"
subset_time = "2022-07-30T16:00:00Z"
subset_lat = "38,53"
subset_lon = "-8,12"
url = f"https://public-api.meteofrance.fr/public{ressource}&coverageId={derniere_prevision}&subset=time({subset_time})&subset=lat({subset_lat})&subset=long({subset_lon})&subset=height(2)&apikey={api_key}"
Pour la suite tout se passe comme précédemment. La seule différence est que le résultat n’est plus du html mais un .tiff. On va simplement le récupérer et l’enregistrer dans un fichier temporaire :
response = request.urlopen(url)
#Enregistrement dans un fichier temporaire
Exploitation de la prévision et carte météo
Comme on l’a déjà vu dans des tutos précédents, le fichier .tiff que l’on vient de créer peut être ouvert avec Xarray. On peut donc afficher la prévision très simplement avec .plot() :
import xarray as xr
#Ouverture du fichier et affichage
temp.plot()
Voici le résultat obtenu :
C’est déjà pas mal, mais avec quelques lignes de code supplémentaires, on peut obtenir une carte plus esthétique. Par exemple :
Voici le code pour créer cette carte :
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
#Ouverture de la prévision
da_to_plot = temp.sel(band = 1, drop = True)
#Coordonnées de la zone à représenter
lat_min, lat_max = 40, 52
lon_min, lon_max = -6, 10
central_longitude = (lon_min + lon_max) / 2
central_latitude = (lat_min + lat_max) / 2
#Echelle de température
cmap = "RdBu_r"
milieu = 15
delta = 30
#Initialisation de la figure
fig = plt.figure(figsize=(12,10), facecolor = 'w')
ax = plt.axes(projection = ccrs.LambertConformal(central_longitude = central_longitude,
central_latitude = central_latitude))
ax.set_extent([lon_min, lon_max, lat_min, lat_max])
#Représentation de la prévision
g = da_to_plot.plot(transform = ccrs.PlateCarree(),
cmap= cmap,
vmin = milieu - delta,
vmax = milieu + delta,
add_colorbar = False,
alpha = 0.8)
#Représentation des isothermes
isothermes = [i for i in range (milieu - delta, milieu + delta + 5, 5)]
g2 = da_to_plot.plot.contour(transform = ccrs.PlateCarree(),
cmap = cmap,
add_colorbar = False,
levels = isothermes,
linewidths = 3)
#Création de l'échelle
cb = plt.colorbar(g,
label = "Température (°C)",
shrink = 0.7,
extend = 'both')
cb.add_lines(g2)
#Affichage des côtes, frontières et océans
ax.coastlines(zorder = 101)
ax.add_feature(cfeature.BORDERS, zorder = 101, color = 'black', ls = ':')
ax.add_feature(cfeature.OCEAN, zorder = 99, color = 'lightgray')
ax.set_title("Prévision de température pour le 30 juillet 2022 à 16h",
fontsize = "xx-large")
Aller plus loin avec les prévisions de Météo France
Avec ce tuto, vous avez toutes les bases pour exploiter les données mises à disposition par Météo France et produire des prévisions météorologiques locales adaptées à vos besoins. Voici quelques pistes :
Réaliser des prévisions pour votre ville ou votre département
Il suffit de trouver les coordonnées correspondantes et d’adapter la latitudes et longitudes dans l’url (subset_lat et subset_lon) puis sur la carte (lat_min, lat_max, lon_min, lon_max).
Si la zone recherchée est en France, vous pouvez également utiliser le modèle AROME. Il n’est disponible que sur 42 heures mais offre une meilleure résolution spatiale : jusqu’à 0.01° contre 0.1 pour ARPEGE. Il faudra vous abonner à ce modèle puis changer le nom de la ressource utilisée dans les urls : il commencera par “/arome/1.0/wcs/MF-NWP-HIGHRES-AROME-001-FRANCE-WCS” au lieu de “/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-01-EUROPE-WCS”.
Réaliser des prévisions pour un pays étranger
Si la zone que vous recherchez est en Europe, il vous suffit de de changer les latitudes et longitudes comme précédemment.
Si elle est hors d’Europe, il vous faudra en plus utiliser la version mondiale du modèle ARPEGE en modifiant le nom de la ressource dans les urls. Les ressources utilisées commenceront par : “/arpege/1.0/wcs/MF-NWP-GLOBAL-ARPEGE-025-GLOBE-WCS/”.
Réaliser des prévisions de précipitations, de vent, d’humidité…
La température n’est pas tout… Pour accéder aux autres prévisions disponibles, il suffit de modifier l’ID de la prévision recherchée.
Par exemple :
Pour les précipitations : “TOTAL_PRECIPITATION__GROUND_OR_WATER_SURFACE”
Pour la neige : “TOTAL_SNOW_PRECIPITATION__GROUND_OR_WATER_SURFACE”
Pour le vent : “WIND_SPEED__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”
Pour l’humidité relative : “RELATIVE_HUMIDITY__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”
Pour la pression : “PRESSURE__SPECIFIC_HEIGHT_LEVEL_ABOVE_GROUND”
Calculer des indicateurs pour un besoin spécifique
Les informations nécessaires sont propres à chaque secteurs — agriculture, tourisme ou énergie par exemple — et les grandeurs météorologiques standards ne suffisent pas toujours. Par exemple, vous pouvez avoir besoin d’indicateurs complexes, comme les indicateurs de confort thermique qui font intervenir la température mais aussi l’humidité, l’ensoleillement ou le vent, ou d’agrégation géographique, comme le cumul de précipitations sur un bassin versant…
Une fois que vous avez téléchargé les prévisions météorologiques utiles pour votre cas et que vous les avez ouvert avec Xarray, il est facile de les combiner. Dans d’autres tutoriels, nous avons notamment vu comment réaliser des calculs de température humide ou calculer le rayonnement solaire moyen dans une région.
A vous de jouer.
A propos : Callendar est une start-up spécialisée dans le développement de solutions innovantes pour l’évaluation des risques climatiques. Conscients du défi que représente l’adaptation au changement climatique, nous nous efforçons de partager notre expertise au travers d’outils accessibles ou de tutoriels comme celui-ci.