Mais

Como posso tornar um netcdf com subgrupos menores?

Como posso tornar um netcdf com subgrupos menores?


Estou tentando escrever um teste de código que funcione com dados de circulação global do oceano hycom netcdf. O arquivo de origem 2 subdatasets:

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

Com 40 bandas de profundidade:

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

Eu tenho algum código escrito que faz coisas como calcular a velocidade em m / s a ​​partir do UV e cria um geotiff, etc. Os arquivos originais são muito grandes para serem usados ​​em testes de unidade. Existe uma maneira fácil com gdal, nco ou? manter a estrutura e os metadados, mas criar um arquivo muito menor? Estou aberto a descartar todas, exceto as duas primeiras bandas e escrever um valor constante em cada banda + ativar a compressão de esvaziamento.

Tentando com GDAL:

gdal_translate --version # At head -> r31584 GDAL 2.1.0dev, lançado 2015/99/99 gdal_translate hycom_glb_911_2015110200_t000_uv3z.nc hycom_glb_911_2015110200_t000_uv3z-tryldf arquivo contém defnc-compressldf-netc. Por favor, selecione um deles para leitura.

Os originais são um pouco grandes para testes:

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_911we_2015110200_t000_uv3z.nc-rw-1.4 grupo ---- 19 de novembro 09:13 hycom_glb_911_2015110200_t000_uv3z.nc

Os detalhes do arquivo netcdf de origem:

ncdump -h hycom_glb_911_2015110200_t000_uv3z.nc netcdf hycom_glb_911_2015110200_t000_uv3z {dimensões: lat = 2001; lon = 4500; profundidade = 40; tempo = ILIMITADO; // (1 atualmente) variáveis: double time (time); tempo: long_name = "Tempo válido"; tempo: unidades = "horas desde 01/01/2000 00:00:00"; hora: time_origin = "2000-01-01 00:00:00"; tempo: calendário = "gregoriano"; tempo: eixo = "T"; tempo: NAVO_code = 13; tau duplo (tempo); tau: long_name = "Tau"; tau: unidades = "horas desde a análise"; tau: time_origin = "2015-11-02 00:00:00"; tau: NAVO_code = 56; profundidade dupla (profundidade); profundidade: long_name = "Profundidade"; profundidade: standard_name = "profundidade"; profundidade: unidades = "m"; profundidade: positivo = "para baixo"; profundidade: eixo = "Z"; profundidade: NAVO_code = 5; lat duplo (lat); lat: long_name = "Latitude"; lat: standard_name = "latitude"; lat: unidades = "graus_north"; lat: point_spacing = "even"; lat: eixo = "Y"; lat: NAVO_code = 1; lon duplo (lon); lon: long_name = "Longitude"; lon: standard_name = "longitude"; lon: unidades = "graus_este"; lon: módulo = "360 graus"; lon: eixo = "X"; lon: NAVO_code = 2; água_u curta (tempo, profundidade, lat, lon); water_u: long_name = "Velocidade da água para o leste"; water_u: standard_name = "eastward_sea_water_velocity"; água_u: unidades = "m / s"; water_u: _FillValue = -30000s; water_u: missing_value = -30000s; água_u: fator_escala = 0,001f; water_u: add_offset = 0.f; água_u: NAVO_code = 17; água_v curta (tempo, profundidade, lat, lon); water_v: long_name = "Velocidade da água para o norte"; water_v: standard_name = "northward_sea_water_velocity"; água_v: unidades = "m / s"; water_v: _FillValue = -30000s; water_v: missing_value = -30000s; água_v: fator_escala = 0,001f; water_v: add_offset = 0.f; water_v: NAVO_code = 18; // atributos globais:: classificação_level = "UNCLASSIFIED"; : Distribution_statement = "Aprovado para lançamento público. Distribuição ilimitada." ; : downgrade_date = "não aplicável"; : classificação_autoridade = "não aplicável"; : instituição = "Gabinete Oceanográfico Naval"; : source = "arquivo HYCOM"; : histórico = "archv2ncdf3z"; : field_type = "instantâneo"; : Convenções = "CF-1.0 NAVO_netcdf_v1.0";

Eu usaria ncks do NCO:

ncks -v água_u, água_v -d, profundidade, 1,2,1 hycom_glb_911_2015110200_t000_uv3z.nc out.nc

com 'profundidade' sendo qualquer que seja a profundidade / dimensão da banda.