Makina Blog

Le blog Makina-corpus

Gulf Stream Story : traitement des données


Comment traiter des données océanographiques au format NetCDF pour créer des vidéos, des images et des geojson

Cet article fait suite à celui sur les données NetCDF. Nous y avions présenté le format ainsi que les outils nous permettant la visualisation et l'exploration de ces données. 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. Une méthode de traitement similaire a été utilisée pour leur traitement, leur extraction et leur conversion en vidéos. Nous prendrons dans les prochains paragraphes l'exemple de la température de surface.

Script Python

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 :

script-python

Voici les différents outils Python utilisés:

L'exemple ci-dessous nous montre comment extraire 180 images (.png) grâce au script précédemment présenté.

gulf-stream

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

gulf stream story

Légende de la carte

Un autre script Python a été créé pour créer la légende. Pour chaque température affichée dans la légende, nous souhaitions récupérer sa couleur correspondante (couleur de l'échelle matplotlib utilisée dans le script d'extraction) :

gulf stream story

Cette échelle a ensuite été insérée dans le html :

gulf stream story

Autre utilisation des données NetCDF, la vitesse des courants en fonction de la profondeur

gulf stream story

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 :

Utilisation de l'outil netCDF Operator

http://nco.sourceforge.net/

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. Exemple de -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 de -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 des données au fichier Javascript

gulf java script

 

Autres données

Tuilage des données

Les fonds de cartes et illustrations ont été tuilées à l’aide de l’outil GDAL :

http://www.gdal.org/

Les fonds de cartes proviennent du site natural earth data qui proposent des fonds de carte de grande qualité et libres de droit :

http://www.naturalearthdata.com/

Voici un exemple de commande permettant de créer le tuilage de l’image natural_eath_data 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.

http://www.highcharts.com/

Formations associées

Formations Front end

Formation Développement d'applications JavaScript

Toulouse Du 18 au 20 juin 2024

Voir la formation

Formations SIG / Cartographie

Formation QGIS

Nantes Du 2 au 4 avril 2024

Voir la formation

Formations Python

Formation Python avancé

Nantes Du 8 au 12 avril 2024

Voir la formation

Actualités en lien

Image
Encart article DrupalCamp 2024
06/03/2024

Makina Corpus, parte­naire du Drupal­Camp 2024

Nous sommes fiers d’an­non­cer que Makina Corpus est le spon­sor du Drupal­Camp à Rennes. Notre expert vous y propose une confé­rence « migrer de Drupal 7 à Drupal 10 ».

Voir l'article
Image
AFUP Meet-up DBToolsBundle
15/02/2024

Meetup AFUP Nantes de février : parlons anony­mi­sa­tion avec le DbTools­Bundle Symfony

Notre expert Symfony/PHP prend la parole au Meet-up de l’AFUP pour présen­ter le nouveau bundle Symfony déve­loppé par Makina Corpus : le DbTools­Bundle !

Voir l'article
23/09/2016

Gulf Stream Story : récupérer et visualiser des données océanographiques

Cet article traite des données utilisées dans l'application Gulf Stream Story. Si vous ne l'avez pas encore parcourue, n'hésitez pas à vous rendre sur cette page : https://makinacorpus.github.io/gulf-stream-story/

Toutes les données utilisées sont issues du catalogue Marine Copernicus et au format NetCDF.

Voir l'article

Inscription à la newsletter

Nous vous avons convaincus