La météo s’affole, voyons voir…

Nous avons connu des extrêmes météos ces dernières semaines. Le 2 janvier, le mercure a descendu en dessous des -32 degrés et 4 jours plus tard, le mercure a atteint + 4 degrés. Bref, la météo s’affole et on peut l’afficher à travers des cartes. Comment? Avec ArcGIS, Python et quelques modules.

Tout d’abord, voici le résultat final.

Carte animée de la vague de froid du 2 janvier 2014 : http://youtu.be/pWWRt6UrfW0 Carte animée du front chaud du 6 janvier 2014 : http://youtu.be/bBIELAvdwiA Le script Python utilisé :  https://github.com/geocot/Cartedetemperature_Python. Le script en mouvement : http://youtu.be/tNgjMP1z-As

Maintenant, comment?

Tout d’abord j’ai  cartographié les stations météo du Québec. Il est possible d’avoir tous les sites météo sur le site du gouvernement du Canada (Environnement Canada à http ://meteo.gc.ca). J’ai donc une classe d’entités  de points.

MeteoPY1  

 

        Pour chaque point de la carte, j’ai les informations suivantes associées dans la table :

  • Le nom de la ville pour les étiquettes de la carte.
  • L’URL où aller chercher les informations de température.
  • 2 champs de coordonnées (X et Y) de la station (à titre indicatif).
  • Le nom de la province (j’y reviens un peu plus loin).
  • La température associée à la station météo.

Je possède donc à cette étape une cartographie de base. Il me faut maintenant mettre les données de température à jour. Pour chaque site météo d’Environnement Canada (dans le bas de la page), un lien XML existe. Il est possible d’avoir l’information météo structurée en format XML (ex : http ://meteo.gc.ca/rss/city/qc-133_f.xml). Si vous observez bien dans la table, seulement la dernière partie de l’URL est inscrite (le début étant toujours le même). Par la suite,  j’ai construit un script Python qui permet de lire chaque fichier XML des stations météo (en ligne) et qui retrouve l’information sur la température. Cette dernière est ajoutée dans le champ « Température » de la classe d’entité. La matrice d’interpolation (image de couleur en fond) est créée en utilisant la fonction d’interpolation IDW (Inverse Distance Weight) du module « Spatial Analyst » d’ArcGIS. Pour pouvoir créer une carte en format JPEG (ou autres formats), j’ai fabriqué une mise en page via un fichier MXD (projet ArcGIS). J’y ai mis :

  • Les différents blocs de données (data frame)
  • Les éléments cartographiques (flèche du nord, titre, …)
  • Les étiquettes
  • Les symboles vectoriel et matriciel.

Regardons le script Python.

Tout d’abord, je tiens à préciser que le script pourrait être largement optimisé. Le script est un prototype. Le blogue est une initiative personnelle. J’ajoute des éléments à celui-ci lorsque j’ai un peu de temps.

Partie 1 : l’importation des modules

MeteoPY2    

Partie 2 : La fonction de lecture XML

Une fonction qui permet de lire le fichier XML et d’extraire la température. MeteoPY3                

  1. Cette fonction ouvre le fichier XML selon l’URL de la table.
  2. Trouve le bon nœud «summary » où se trouve l’information de la température. Il y a plus d’un nœud « summary » lorsqu’il y a des alertes et veilles météorologiques.
  3. Permets de trouver la météo dans l’information HTML incluse dans le fichier XML.
  4. Retourne la température en remplaçant les virgules par des points (décimales). J’ai utilisé le format anglais de Windows (L’OS que j’utilise est en anglais). Il était plus rapide d’utiliser le format de base que de tout transformer dans le format français.

Partie 3 : Le traitement ArcGIS

Dans une boucle pour faire les 24 heures du jour. Soit une carte aux heures.MeteoPY4                    

  1. Définition de la classe d’entités et des champs  à mettre à jour.
  2. Mise à jour des informations de température dans la table via l’objet « Update Cursor ».
  3. Vérification de la disponibilité du module « Spatial Analyst » et traitement de l’interpolation IDW ainsi que le clip de l’image selon les limites de la province.
  4. Export des données du MXD en format JPG.
  5. Utilisation du module « time » pour une pause du script d’une heure.

 

Problèmes rencontrés

  • Un des problèmes que j’ai rencontré était de trouver le bon nœud « summary » dans le fichier XML. Il change de place lorsqu’il y a des alertes et veilles météorologiques. Je m’en suis aperçu lorsque mes cartes météo étaient incomplètes.
  • J’ai dû ajouter des stations météo en dehors du Québec pour avoir une meilleure couverture et précision. C’est pourquoi il y a un champ « Province » dans la classe d’entités des stations. J'enlève les données hors Québec de la carte via une expression dans les étiquettes.
  • Certaines stations météo ont des données irrégulières. C’est-à-dire que les données sur la température ne sont pas toujours disponibles. Dans ce cas, je les remplace par la donnée -9999 et je les exclus du traitement IDW ainsi que de l’affichage dans les étiquettes (la donnée est remplacée par ND sur la carte).
  • Le choix de la méthode d’interpolation n’est nullement scientifique. J’ai pris une méthode disponible dans ArcGIS et qui est assez simple.

C’est une explication rapide de la marche à suivre. Je vous invite à m’écrire pour plus d’information. Bonne année 2014 Martin

Vous avez du contenu à publier sur SigQuébec?

Communiquez avec le Webmestre.