Suite

Comment faire un netcdf avec des sous-groupes plus petits?

Comment faire un netcdf avec des sous-groupes plus petits?


J'essaie d'écrire un test de code qui fonctionne avec les données de circulation océanique mondiale de hycom netcdf. Le fichier source 2 sous-ensembles de données :

gdalinfo hycom_glb_911_2015110200_t000_uv3z.nc | grep _NAME SUBDATASET_1_NAME=NETCDF:"hycom_glb_911_2015110200_t000_uv3z.nc":water_u SUBDATASET_2_NAME=NETCDF:"hycom_glb_911_2015110200_t000_uv3z.nc":water_v

Avec 40 bandes de profondeur :

gdalinfo NETCDF:hycom_glb_911_2015110200_t000_uv3z.nc:water_u | grep '^Band' | head -3 Band 1 Block=4500x1 Type=Int16, ColorInterp=Undefined Band 2 Block=4500x1 Type=Int16, ColorInterp=Undefined Band 3 Block=4500x1 Type=Int16, ColorInterp=Undefined

J'ai un code écrit qui fait des choses comme calculer la vitesse en m/s à partir de l'UV et crée un géotiff, etc. Les fichiers d'origine sont beaucoup trop volumineux pour être utilisés dans les tests unitaires. Existe-t-il un moyen simple avec gdal, nco ou ? conserver la structure et les métadonnées, mais créer un fichier beaucoup plus petit ? Je suis prêt à supprimer toutes les bandes sauf les deux premières et à écrire une valeur constante dans chaque bande + activer la compression de dégonflage.

Essayer avec GDAL :

gdal_translate --version # At head -> r31584 GDAL 2.1.0dev, publié 2015/99/99 gdal_translate hycom_glb_911_2015110200_t000_uv3z.nc hycom_glb_911_2015110200_t000_uv3z-try2.nc -of netcdf -co compress=deflate Le fichier d'entrée contient des sous-ensembles de données. S'il vous plaît, sélectionnez l'un d'entre eux pour la lecture.

Les originaux sont un peu gros pour les tests :

wget ftp://ftp.hycom.org/datasets/GLBu0.08/expt_91.1/data/hindcasts/2015/hycom_glb_911_2015110200_t000_uv3z.nc ls -lh hycom_glb_911_2015110200_t000_uv3z.nc -rw-r----- 1 groupe schwe 19 novembre 09:13 hycom_glb_911_2015110200_t000_uv3z.nc

Les détails du fichier source netcdf :

ncdump -h hycom_glb_911_2015110200_t000_uv3z.nc netcdf hycom_glb_911_2015110200_t000_uv3z { dimensions : lat = 2001 ; lon = 4500 ; profondeur = 40 ; temps = ILLIMITÉ ; // (1 actuellement) variables : double time(time) ; time:long_name = "Heure de validité" ; time:units = "heures depuis 2000-01-01 00:00:00" ; heure:origine_heure = "2001-01-01 00:00:00" ; heure:calendrier = "grégorien" ; temps:axe = "T" ; heure : code_NAVO = 13                                                                double tau(temps) ; tau:nom_long = "Tau" ; tau:units = "heures depuis l'analyse" ; tau:time_origin = "2015-11-02 00:00:00" ; tau:NAVO_code = 56 ; double profondeur (profondeur) ; profondeur:nom_long = "Profondeur" ; profondeur:nom_standard = "profondeur" ; profondeur:unités = "m" ; profondeur:positive = "vers le bas" ; profondeur:axe = "Z" ; profondeur:NAVO_code = 5 ; double lat(lat) ; lat:nom_long = "Latitude" ; lat:nom_standard = "latitude" ; lat:units = "degrés_nord" ; lat:point_spacing = "even" ; lat:axe = "Y" ; lat:NAVO_code = 1 ; double lon(lon) ; lon:long_name = "Longitude" ; lon:nom_standard = "longitude" ; lon:units = "degrés_est" ; lon:modulo = "360 degrés" ; lon:axis = "X" ; lon:NAVO_code = 2 ; short water_u(temps, profondeur, lat, lon) ; water_u:long_name = "Vitesse de l'eau vers l'Est" ; water_u:standard_name = "eastward_sea_water_velocity" ; water_u:units = "m/s" ; water_u:_FillValue = -30000s ; water_u:missing_value = -30000s ; water_u:scale_factor = 0,001f ; water_u:add_offset = 0.f ; water_u:NAVO_code = 17 ; short water_v(temps, profondeur, lat, lon) ; water_v:long_name = "Vitesse de l'eau vers le nord" ; water_v:standard_name = "northward_sea_water_velocity" ; water_v:units = "m/s" ; water_v:_FillValue = -30000s ; water_v:missing_value = -30000s ; water_v:scale_factor = 0,001f ; water_v:add_offset = 0.f ; eau_v:NAVO_code = 18 ; // attributs globaux : :classification_level = "UNCLASSIFIED" ; :distribution_statement = "Approuvé pour diffusion publique. Distribution illimitée." ; :downgrade_date = "non applicable" ; :classification_authority = "non applicable" ; :institution = "Office Océanographique Naval" ; :source = "Fichier archive HYCOM" ; :history = "archv2ncdf3z" ; :field_type = "instantané" ; :Conventions = "CF-1.0 NAVO_netcdf_v1.0" ;

J'utiliserais les ncks de NCO :

ncks -v eau_u,eau_v -d,profondeur,1,2,1 hycom_glb_911_2015110200_t000_uv3z.nc out.nc

avec 'profondeur' étant quelle que soit la dimension profondeur/bande.


Voir la vidéo: Extracting subregions from netcdf files - this video makes the cut!