Makina Blog
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 :
Voici les différents outils Python utilisés:
- NumPy (fonctions pour calculs scientifiques : http://www.numpy.org/)
- netCDF4 (permet d'utiliser NumPy avec les NetCDF : https://pypi.python.org/pypi/netCDF4)
- matplotlib (création de graphique, corrélation de données : http://matplotlib.org/)
- mpl_toolkits.basemap (projection cartographique de données traitées sous matplotlib : http://matplotlib.org/basemap/)
- sys (rend accessible certaines variables : https://docs.python.org/2/library/sys.html)
L'exemple ci-dessous nous montre comment extraire 180 images (.png) grâce au script précédemment présenté.
Pour assembler ces pngs et obtenir une vidéo .mp4, nous avons utilisé l'outil ffmpeg : https://ffmpeg.org/
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) :
Cette échelle a ensuite été insérée dans le html :
Autre utilisation des données NetCDF, la vitesse des courants en fonction de la profondeur
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
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
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 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.
Formations associées
Formations Front end
Formation Développement d'applications JavaScript
À distance (FOAD) Du 20 au 22 novembre 2024
Voir la formationFormations SIG / Cartographie
Formation QGIS
À distance (FOAD) Du 2 au 6 décembre 2024
Voir la formationActualités en lien
Nouvelle Journée Technique du PRNSN : le numérique dans les pratiques sportives de nature
Le 27 novembre 2024, Montpellier accueille la 18e Journée technique du réseau national des sports de nature, organisée par le PRNSN.
Mini-guide à l’usage des collectivités : l’Open Data, entre nécessité et opportunité
Tout ce que vous avez toujours voulu savoir sur l’Open Data. Petit guide à destination des collectivités pour l’appréhender et se l’approprier.
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.