Accueil / Blog / Métier / 2016 / Gulf Stream Story : traitement des données

Gulf Stream Story : traitement des données

Par Mathias Broutin — publié 11/01/2017
Contributeurs : Frédéric Bonifas
Comment traiter des données océanographiques au format NetCDF pour créer des vidéos, des images et des geojson
Gulf Stream Story : traitement des données

Cet article fait suite à celui présentant le format ainsi que les outils pour visualiser et explorer des données NetCDF. Les données étant maintenant sélectionnées, nous nous intéresserons à leur traitement.

Dans l'application, la plupart des données NetCDF apparaissent sous la forme de vidéos. Nous prendrons dans les prochains paragraphes l'exemple de la température de surface.

Conversion des NetCDF en vidéo

Script Python de conversion des NetCDF en image

Pour la température, nous souhaitions récupérer une image traitée par jour. La solution QGIS a vite été abandonnée car elle nécessitait de traiter et d'extraire les données couche par couche. Pour une vidéo d'une année, il aurait fallu répéter le même protocole 365 fois. Nous avons donc décidé d'automatiser le traitement et l'extraction à l'aide d'un script Python :

Voici les différentes biblbiothèques Python utilisées:

  • NumPy : fonctions pour calculs scientifiques

  • netCDF4 : lecture et écriture de fichiers NetCDF

  • matplotlib : création de graphique, corrélation de données

  • mpl_toolkits.basemap : projection cartographique de données traitées sous matplotlib

Pour assembler ces pngs et obtenir une vidéo .mp4, nous avons utilisé l'outil ffmpeg : 

  

Conversion des NetCDF en données vectorielles

Cette étape de l'application nous présente la vitesse et l'orientation des courants à travers un ensemble de flèches réparties tous les degrés. L’ascenseur de gauche permet de visualiser ces vecteurs à différentes profondeurs.

Pour passer du fichier raster NetCDF à ces flèches vectorielles il a fallu procéder en plusieurs étapes.

Extraction et composition de variables

Les fichiers NetCDF utilisés comportaient des profondeurs de 0m à 5000m. Comme nous souhaitions étudier les courants à une profondeur donnée, nous avons extrait les données relatives aux profondeurs d'intérêt grâce à l'outil NetCDF Operator. Exemple à -1452,251m :

ncks -d depth,1452.251 global-analysis-forecast-phys-001-002_1467209627690.nc orient_1452.nc

En climatologie, les données relatives aux vents et aux courants sont composés de deux vecteurs vitesse orientés nord (v : northward) et est (u : eastward). Pour récupérer l'orientation et la vitesse, nous avons de nouveau utilisé NCO. Exemple à -1452,251m :

ncap2 --64 -v -s "dir=(atan2(u,v))*360/(2*3.1415926535)" -s "norme=sqrt(u*u+v*v)" orient_1452.nc orient_1452_intensite.nc

Utilisation de QGIS

Nous avons ensuite cherché à extraire les données traitées avec NCO afin d'alimenter des flèches vecteurs orientées, de taille et de couleur proportionnelles à leur vitesse. Nous avons créé un GeoJSON par profondeur avec une valeur tous les degrés :

Utilisation de QGIS (attention : nécessite QGIS 2.14 si l’on souhaite utiliser l’étape affichage des données) :

  • Création d'une grille tous les 1° (vecteur/points réguliers)
  • Point Sampling Tool (extension) : sélection de la norme et de l'orientation (bien vérifier que le nom des champs soit bien différent)
  • Affichage des données : dans le style de la couche créée : choix d'une image de flèche, orientation en fonction orientation, taille en fonction de la norme, couleur de remplissage ramp_color
  • Extraction d’un geojson par profondeur.

Intégration à la carte web Leaflet

Ces points GeoJSON sont représentées dans Leaflet sous forme de flèche, dont la taille et l'orientation dépendent des paramètres calculés.

Autres données

Tuilage des données

Les fonds de cartes et illustrations ont été tuilées à l’aide de l’outil GDAL. Les fonds de cartes proviennent du site Natural Earth Data qui propose des fonds de carte de grande qualité et libres de droit.Voici un exemple de commande permettant de créer le tuilage de l’image natural_eath_data.jpg pour les zooms 0 à 5 :

gdal2tiles.py -p raster -z 0-5 -w all natural_earth_data.jpg

Vecteurs courant

Les vecteurs courant ont été tracés à la souris sous QGIS. Il s'agit d'une numérisation de données à partir de cartes tirées de la littérature, géoréférencées sous QGIS. Ces vecteurs ont été extraits en GeoJSON.

Graphique

Pour créer le graphique de thermocline, les données ont été récupérées sous QGIS à partir du NetCDF relatif à la température. Elles ont été extraites en csv. La bibliothèque JavaScript HighCharts a été utilisée pour sa création.

ABONNEZ-VOUS À LA NEWSLETTER !