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