найти точку широты/долготы в hdf5

У меня есть файлы HDF5, глобальное покрытие температуры. Файл был конвертирован из netcdf. В процессе преобразования была установлена ​​долгота от 0 до 360 и дополнительно перевернута карта, так что север теперь юг. Я использовал HDFView, и я могу отобразить файл, но нет возможности взаимодействовать с картой, поэтому найдите определенную комбинацию широты и долготы. Файл неправильно отображается в arcmap даже после установки правильной проекции. Могу ли я в любом случае отобразить данные и щелкнуть местоположение и извлечь широту/долготу или нарисовать точку в определенной широте/долготе?


person Herman Toothrot    schedule 10.02.2015    source источник


Ответы (2)


Краткий ответ: Нет, это невозможно.

Длинный ответ: в отличие от NetCDF, HDF5 является форматом файла общего назначения. Он позволяет хранить n-мерные числовые массивы (называемые наборами данных), сгруппированные в папки (отсюда и название «иерархический»). Ничего больше. Семантики нет. Для HDF5 ваши данные не являются «картой», это просто массив. Поэтому HDFView не «знает» о широтах и ​​долготах. Эта информация была потеряна в процессе преобразования NetCDF => HDF5. На самом деле, массивы широты и долготы, вероятно, все еще находятся в файле, но они больше не имеют никакого собственного значения. NetCDF, с другой стороны, навязывает общую модель данных, включая системы координат. Вот почему различные инструменты визуализации позволяют вам взаимодействовать с вашими данными более изощренным образом.

Какой инструмент вы использовали для преобразования вашего NetCDF-файла в HDF5? Вы можете использовать HDF5 для хранения метеорологических данных (я так делаю, работает хорошо). Но тогда вам придется написать свои собственные инструменты для пространственной привязки и визуализации. Ознакомьтесь с проектом h5py, если вы увлекаетесь Python.

person weatherfrog    schedule 11.02.2015
comment
Я использовал только скрипт fortran90. Да, широта и долгота являются одними из данных в файлах h5. - person Herman Toothrot; 16.02.2015

Как сказал @heron13, HDF5 — это формат файла.

Какой версии NetCDF был ваш файл? В версии 4 в качестве уровня хранения используется расширенная версия HDF5.

Соответствует ли ваш файл NetCDF соглашениям CF или COARDS? Если это так, я бы посмотрел на программу, которую вы использовали для преобразования в HDF5, поскольку HDF5 может поддерживать те же соглашения. Для пример.

Как только вы подтвердите, что соглашения находятся в файле HDF5, arcmap предназначен для поддержите и их (извините, у меня нет доступа к 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"
  }
}
...

Еще один вопрос: есть ли причина, по которой вы не используете файл NetCDF в arcmap?

person Timothy Brown    schedule 11.02.2015