2015-02-10 199 views
1

我有一个HDF5文件,温度全球覆盖。该文件从netcdf转换而来。转换过程将经度设置为0到360,并且将地图颠倒过来,因此北方现在向南。我已经使用HDFView,我可以显示文件,但没有办法与地图交互,所以找到一个特定的纬度/经度组合。即使在设置了正确的投影之后,该文件也不会在弧形图中正确显示。 无论如何,我可以显示数据并点击某个位置并提取纬度/长度或在特定纬度/经度上绘制点?找到经纬度/长点在hdf5中

回答

0

简答:不,那不可能。

长答案:与NetCDF不同,HDF5是通用文件格式。它允许您存储分组到文件夹中的n维数值数组(称为数据集)(因此名称为“分层”)。而已。没有语义。对于HDF5,您的数据不是“地图”,它只是一个数组。因此,HDFView不会“知道”经度和纬度。该信息在NetCDF => HDF5转换过程中丢失。实际上,纬度/经度阵列可能仍在文件中,但它们不再具有任何固有的含义。另一方面,NetCDF强加了包括坐标系统在内的通用数据模型。这就是为什么各种可视化工具可让您以更复杂的方式与您的数据进行交互。

你用什么工具将NetCDF文件转换为HDF5? 您可以使用HDF5来存储气象数据(我这样做,效果很好)。但是,您必须编写自己的地理参考和可视化工具。如果您使用Python,请查看h5py项目。

+0

我只用了一个fortran90脚本。是lat和long是h5文件中的数据之一 – 2015-02-16 11:48:42

0

正如@ heron13所说的,HDF5是一种文件格式。

什么版本的NetCDF是你的文件?由于版本4使用HDF5的增强版作为存储层。

您的NetCDF文件是否遵循CF conventionsCOARDS惯例?如果是这样,我会看看你用来将它转换为HDF5的程序,因为HDF5可以支持相同的约定。为example

一旦您确认约定在HDF5文件中,arcmap的意思是support(对不起,我无法访问arcmap进行确认)。

下面就一起来看看NetCDF文件与CF约定:

$ ncdump tos_O1_2001-2002.nc | less 
    netcdf tos_O1_2001-2002 { 
    dimensions: 
    lon = 180 ; 
    lat = 170 ; 
    time = UNLIMITED ; // (24 currently) 
    bnds = 2 ; 
    variables: 
    double lon(lon) ; 
      lon:standard_name = "longitude" ; 
      lon:long_name = "longitude" ; 
      lon:units = "degrees_east" ; 
      lon:axis = "X" ; 
      lon:bounds = "lon_bnds" ; 
      lon:original_units = "degrees_east" ; 
    ... 

虽然这里只使用h5dump同一文件的视图:其他

$ h5dump tos_O1_2001-2002.nc | less 
HDF5 "tos_O1_2001-2002.nc" { 
GROUP "/" { 
ATTRIBUTE "Conventions" { 
    DATATYPE H5T_STRING { 
    STRSIZE 6; 
    STRPAD H5T_STR_NULLTERM; 
    CSET H5T_CSET_ASCII; 
    CTYPE H5T_C_S1; 
    } 
    DATASPACE SCALAR 
    DATA { 
    (0): "CF-1.0" 
    } 
} 
... 

一个问题,有没有什么之所以没有使用arcmap中的NetCDF文件?