Как создать переменную времени - PullRequest
1 голос
/ 19 марта 2020

У меня есть много файлов netCDF, где они созданы из файлов tif с использованием библиотеки python gdal. Я хочу объединить каждый из этих файлов в большой файл n c, но у них нет переменной времени.

Я попробовал метод, описанный здесь , но когда я чтобы увидеть метки времени каждой полосы полученного большого файла n c, это нули для всех файлов.

Более того, результат ncdump -h name-of-the-file выглядит следующим образом.

netcdf g2_BIOPAR_VCI_201701010000_AFRI_PROBAV_V1.0.h5_trans {
dimensions:
        lon = 10081 ;
        lat = 8961 ;
variables:
        char crs ;
                crs:grid_mapping_name = "latitude_longitude" ;
                crs:long_name = "CRS definition" ;
                crs:longitude_of_prime_meridian = 0. ;
                crs:semi_major_axis = 6378137. ;
                crs:inverse_flattening = 298.257223563 ;
                crs:spatial_ref = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0],UNIT[\"degree\",0.0174532925199433],AUTHORITY[\"EPSG\",\"4326\"]]" ;
                crs:GeoTransform = "-30 0.008927685745461759 0 40 0 -0.008927575047427742 " ;
        double lat(lat) ;
                lat:standard_name = "latitude" ;
                lat:long_name = "latitude" ;
                lat:units = "degrees_north" ;
        double lon(lon) ;
                lon:standard_name = "longitude" ;
                lon:long_name = "longitude" ;
                lon:units = "degrees_east" ;
        byte Band1(lat, lon) ;
                Band1:long_name = "GDAL Band Number 1" ;
                Band1:_Unsigned = "true" ;
                Band1:valid_range = 0s, 255s ;
                Band1:_FillValue = 0b ;
                Band1:VCI_CLASS = "DATA" ;
                Band1:VCI_MISSING_VALUE = 251 ;
                Band1:VCI_NB_BYTES = "Uint8" ;
                Band1:VCI_OFFSET = -5 ;
                Band1:VCI_ORDER_BYTES = 1 ;
                Band1:VCI_PRODUCT = "VCI" ;
                Band1:VCI_SCALING_FACTOR = 0.5f ;
                Band1:grid_mapping = "crs" ;

// global attributes:
                :GDAL_ARCHIVE_FACILITY = "VITO" ;
                :GDAL_CENTRE = "VITO" ;
                :GDAL_ELLIPSOID_NAME = "WGS84" ;
                :GDAL_GEODATE_NAME = "WGS84" ;
                :GDAL_INSTRUMENT_ID = "VGT3" ;
                :GDAL_LAT = 40 ;
                :GDAL_LONG = -30 ;
                :GDAL_OTHER = "GLS" ;
                :GDAL_OVERALL_QUALITY_FLAG = "OK" ;
                :GDAL_PIXEL_SIZE = "1km" ;
                :GDAL_PRODUCT = "Mars VCI data" ;
                :GDAL_PRODUCT_ALGORITHM_VERSION = 1. ;
                :GDAL_PRODUCT_TIME = "2017-01-12" ;
                :GDAL_PROJECTION_NAME = "PlateCarree" ;
                :GDAL_REGION_NAME = "AFRI" ;
                :GDAL_SATELLITE = "PROBAV" ;
                :GDAL_TEMPORAL_NOMINAL = "2017-01-01" ;
                :GDAL_TEMPORAL_START = "2017-01-01" ;
                :GDAL_TEMPORAL_STOP = "2017-01-10" ;
                :Conventions = "CF-1.5" ;
                :GDAL = "GDAL 2.3.3, released 2018/12/14" ;
                :history = "Mon Feb 24 14:29:37 2020: GDAL CreateCopy( ../2017/20170101/g2_BIOPAR_VCI_201701010000_AFRI_PROBAV_V1.0.h5_trans.nc, ... )" ;

Я хочу создать временную переменную, которая будет аналогична глобальной переменной: GDAL_TEMPORAL_STOP, и объединить каждый файл в один большой файл n c. В идеале я предпочитаю делать это в python. Я предполагаю, что мог бы быть какой-то способ скопировать global variable:GDAL_TEMPORAL_STOP = "2017-01-10" ; и скопировать его как переменную времени для каждого файла, но я не смог найти способ сделать это, поэтому мне нужна ваша помощь.

1 Ответ

1 голос
/ 20 марта 2020

Инструмент NCO для этого: ncecat :

ncecat -u time in1.nc out1.nc
ncap2 -s 'time[$time]=1;' out1.nc

Сделайте это в al oop над файлами, а затем объедините вместе с ncrcat:

ncrcat out*.nc final_out.nc

Однако GDAL_TEMPORAL_STOP - это атрибут, представляющий собой массив символов (или строку), а не переменную. Вы, вероятно, хотите числовое значение c для времени. Это усложняет ситуацию, и у меня, к сожалению, нет времени дать полный ответ, так как я только что заметил, что вы все равно предпочитаете Python, поэтому я просто оставлю это здесь. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...