在hdf5中找到纬度/经度值

时间:2015-02-10 14:49:46

标签: hdf5 arcmap

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

2 个答案:

答案 0 :(得分:0)

简短回答:不,那是不可能的。

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

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

答案 1 :(得分:0)

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

您的档案是什么版本的NetCDF?由于版本4使用HDF5的增强版本作为存储层。

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

确认约定在HDF5文件中后,arcmap也意味着support他们(抱歉,我无法访问arcmap进行确认)。

以下是使用CF约定的NetCDF文件:

$ 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文件?