Я создаю файл NetCDF4, который в настоящее время имеет четыре переменные:Как указать размерные значения при создании файла NetCDF в Python?
1) Земля температура поверхности (3D массив - время, широта, долгота)
2) Долгота (1D - координата каждого пикселя центра)
3) Широта (1D - координата каждого пикселя центра)
4) время (время получения изображения в часах с момента 1900-01-01 00:00:00)
я в настоящее время с помощью следовать ING код, чтобы сделать это:
#==========================WRITE THE NETCDF FILE==========================#
newfile = nc.Dataset(export_filename, 'w', format = 'NETCDF4_CLASSIC')
#==========================SET FILE DIMENSIONS============================#
newfile.createDimension('lat', ny)
newfile.createDimension('lon', nx)
newfile.createDimension('time', len(filenames))
#==========================SET GLOBAL ATTRIBUTES==========================#
newfile.title = ('Title')
newfile.history = "File created on " + datetime.strftime(datetime.today(), "%c")
newfile.Conventions = 'CF-1.6'
#==========================CREATE DATA VARIABLES==========================#
#--------------------------LST VARIABLE-----------------------------------#
LSTs = newfile.createVariable('LST', np.int16, ('time', 'lat', 'lon'), fill_value = -8000)
LSTs.units = 'Degrees C'
LSTs.add_offset = 273.15
LSTs.scale_factor = 0.01
LSTs.standard_name = 'LST'
LSTs.long_name = 'Land Surface Temperature'
LSTs.grid_mapping = 'latitude_longitude'
LSTs.coordinates = 'lon lat'
LSTs[:] = LSTd[:]
#--------------------------LON AND LAT AND TIME--------------------------#
LONGITUDEs = newfile.createVariable('LONGITUDE', np.float64, ('lon',))
LONGITUDEs.units = 'Decimal Degrees East'
LONGITUDEs.standard_name = 'Longitude'
LONGITUDEs.long_name = 'Longitude'
LONGITUDEs[:] = LONd[:]
LATITUDEs = newfile.createVariable('LATITUDE', np.float64, ('lat',))
LATITUDEs.units = 'Decimal Degrees North'
LATITUDEs.standard_name = 'Latitude'
LATITUDEs.long_name = 'Latitude'
LATITUDEs[:] = LATd[:]
TIMEs = newfile.createVariable('TIME', np.int32, ('time',))
TIMEs.units = 'hours since 1900-01-01 00:00:00'
TIMEs.standard_name = 'Time'
TIMEs.long_name = 'Time of Image Acquisition'
TIMEs.axis = 'T'
TIMEs.calendar = 'gregorian'
TIMEs[:] = time[:]
#--------------------------SAVE THE FILE---------------------------------#
newfile.close();
Этот код создает файл NetCDF с переменной температурой поверхности земли, имеющей 24 полос (по одному на каждый час дня). Этот код работает так, как я хотел, хотя бы одну небольшую проблему, к которой я хочу обратиться. Когда я бегу gdalinfo для LST переменной, я получаю (это сокращенный вариант):
Band 1.....
...
NETCDF_DIM_TIME = 1
...
Я хочу, чтобы это значение 1, чтобы быть установлен такой же, как «время» переменной (которая является чем-то вроде 1081451 часы с 1900-01-01 00:00:00), которые я включил в мой код выше. Поэтому я хочу понять, как это можно изменить для каждой группы в файле?
ОБНОВЛЕНИЕ НА ВОПРОС: Когда я gdalinfo на файл (опять же, подмножество):
NETCDF_DIM_EXTRA={time}
NETCDF_DIM_time_DEF={24,3}
но есть вариант отсутствует «NETCDF_DIM_time_VALUES», и мне нужно, чтобы установить это время переменная, и она должна работать. КАК Я ДЕЛАТЬ ЭТО?
В настоящее время он устанавливается только на номер группы, но я хочу, чтобы он содержал информацию о времени его приобретения.
UPDATE 1:
Я попытался указать
LSTs.NETCDF_DIM_Time = time
во время формирования файла NetCDF и это присвоила все значения времени на NETCDF_DIM_TIME в GDAL так, что каждая группа имеет 24 раз а не только один.
UPDATE 2:
При некотором рытье я думаю, что это метаданные NETCDF_DIM_time_VALUES, который должен быть установлен в переменной «время». Я обновил свой вопрос, чтобы спросить, как это сделать.