1

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

我尝试了此处描述的方法,但是当我要查看生成的大型 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" ;复制为每个文件的时间变量,但我找不到方法,所以这就是我需要你帮助的地方。

4

1 回答 1

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,所以我就把它留在这里。祝你好运。

于 2020-03-20T15:48:40.517 回答