如何创建时间变量

时间:2020-03-19 14:53:37

标签: python netcdf netcdf4 nco ncl

我有很多netCDF文件,它们是使用python gdal库从tif文件创建的。 我想将这些文件中的每一个合并到一个大型的nc文件中,但是它们没有时间变量。

我尝试了here中描述的方法,但是当我要查看生成的大型nc文件的每个带的时间戳时,所有文件的时间戳均为零。

此外,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并将每个文件合并到一个大的nc文件中。理想情况下,我更喜欢在python中执行此操作。我认为可能有某种方法可以复制global variable:GDAL_TEMPORAL_STOP = "2017-01-10" ;并将其复制为每个文件的时间变量,但是我找不到方法,所以这是我需要您帮助的地方。

1 个答案:

答案 0 :(得分:1)

用于此目的的NCO工具为ncecat

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

对文件进行循环处理,然后与ncrcat串联:

ncrcat out*.nc final_out.nc

但是,GDAL_TEMPORAL_STOP是一个属性,它是一个字符数组(也称为字符串),不是变量。您可能需要一个数值作为时间。这使事情变得复杂,而且不幸的是,我没有时间提供完整的答案,因为我刚刚注意到您仍然喜欢Python,因此我将其留在这里。祝你好运。

相关问题