网络通用数据格式(英语:Network Common Data FormnetCDF)是一种自描述、与机器无关、基于阵列的科学数据格式,同时也是支持创建、访问和共享这一数据格式的函数库。该项目主页位于美国大气科学研究大学联盟(UCAR)的Unidata规划网站。它也是netCDF软件、标准开发、更新等的主要来源。netCDF格式是一种开放标准。

Network Common Data Form
扩展名.nc
互联网媒体类型application/netcdf
application/x-netcdf
开发者美国大气科学研究大学联盟(UCAR)
最新版本
4.9.2[1]在维基数据编辑(2023年3月17日,19个月前)
格式类型科学二进制数据
扩展自通用数据格式(CDF)
外部数据表示法(XDR)
层级数据格式(HDF)
网站www.unidata.ucar.edu/software/netcdf/ 编辑维基数据链接

netCDF项目开始于1989年,UCAR目前对其积极支持,在新发行版中改进性能、增加功能并修正缺陷,当前版本系列是netCDF-4。netCDF的经典格式(CDF-1)和64位偏移量格式(CDF-2),是开放地理空间协会采用的国际标准[2]

历史

编辑

1985年美国国家航空航天局(NASA)的国家空间科学数据中心(NSSDC),设计并开发了通用数据格式(CDF),CDF最初是用FORTRAN写成,并只能在VAX/VMS环境下获得[3]。Unidata在1987年8月成立了关于CDF的工作组,提议探索与NASA协作,扩展CDF的FORTRAN接口,定义C接口,并允许用一个单一调用访问数据聚集,同时要维持与现存NASA接口兼容的可能性。在1988年早些时候,Unidata的Glenn Davis用C开发了原型netCDF包,它位于网络表示层XDR格式的上层[4],而结果的程序可以在UNIXVMS系统二者上实现。NASA的CDF和Unidata的netCDF从此独立发展,但新近的CDF版本与netCDF共享了很多特征。[5]

1991年Unidata发布了netCDF版本2.0,1997年发布了版本3.3。2003年7月美国能源部阿贡国家实验室西北大学,贡献了叫做并行netCDF(或称PnetCDF)的一个netCDF并行计算扩展[6]。2004年在NASA的资助下,Unidata与美国国家超级计算应用中心(NCSA),开始合作增进netCDF和HDF5的互操作性。2008年Unidata发布了版本4.0,允许使用HDF5数据文件格式。同时发布了版本3.6.3,它与版本4.0是同样的代码但关掉了netcdf-4特征,目前netCDF-3库仍然在世界各地被广泛使用。2010年Unidata发布了版本4.1.1,增加了对C和Fortran客户端通过OPeNDAP英语OPeNDAP访问远程数据的特定子集的支持,并使用PnetCDF扩展库,支持在netCDF经典格式(CDF-1、CDF-2和CDF-5)上的并行I/O。[5]

格式描述

编辑

netCDF库支持多种不同的二进制格式的netCDF文件[7]

  • CDF-1,在最初netCDF发行中使用的经典格式,它仍是文件建立的缺省格式。
  • CDF-2,在版本3.6.0中介入的64-bit偏移量格式,它支持更大的变量和文件大小。
  • netCDF-4/HDF5,在版本4.0中介入的格式,它是带有一些限制的HDF5数据格式[8]
  • HDF4 SD,在版本4.1中开始支持对这个格式的只读访问。
  • CDF-5,由PnetCDF扩展库在CDF-2基础之上规定的格式[9],集成入了netCDF库版本4.4.0中。

所有格式都是“自描述的”。 这意味其中有一个头部,它描述文件余下部分的格局,特别是阵列数据,连同以名称/值特性形式的任意文件元数据。这个格式是跨平台的,涉及的问题如字节序软件库中解决。数据以允许有效率的子集化英语Subsetting的方式来存储。

起始于版本4.0,netCDF API允许使用HDF5数据格式。netCDF用户可以建立HDF5文件从而获得netCDF格式不具备的利益,比如更大的文件和多重无限制的维度。

完全后向兼容,可访问旧有netCDF文件并支持以前版本的C和Fortran API。

软件

编辑

netCDF常用于气候学气象学海洋学应用,如天气预报气候变化;也用于地理信息系统应用,是很多GIS应用的输入/输出格式;并用于通用科学数据交换。从它的站点引述如下[10]:netCDF(网络公用数据格式)是用于面向阵列数据访问的一组接口,和针对C、Fortran、C++、Java和其他语言的一套自由发行的数据访问库。netCDF库支持用来表示科学数据的一种机器无关格式。接口、库和格式一起支持建立、访问和共享科学数据。

访问库

编辑

UCAR发布的软件库提供了对netCDF文件的读写访问,编码和解码所需的阵列和元数据。核心库是用C编写的,并为C或C++应用提供API,为Fortran应用提供了两个API,一个给Fortran 77,一个给Fortran 90。Unidata还开发维护一个独立实现,使用100% Java写成,它扩展了核心数据模型并增加了额外的功能。其他编程语言基于netCDF的C库也能获得至其API的接口,这包括RPerl数据语言英语Perl Data LanguagePythonRubyHaskell[11]MathematicaMATLABIDLOctave。API调用规定在不同语言间非常类似,当然会有着不可避免的不同语法。不同版本的API调用是后向兼容的。应用编程者使用支持这个库的语言,在正常情况下不需要关心文件结构自身,即使它作为开放格式是可以获知的。

  • Python语言通过模块访问netCDF文件,可以用Unidata官方发行的netCDF4-python[12],此外,读写netCDF-4格式可用h5netcdf[13];读写其他netCDF格式可用SciPyxarray模块可将netCDF导入导出于pandasDataFrame对象[14];cfgrib是ECMWF发行的使用ecCodes并遵从CF英语Climate and Forecast Metadata Conventions约定,将GRIB映射到NetCDF通用数据模型的接口[15]NCAR的PyNIO模块支持多种netCDF格式,它的开发已经停止而进入维护状态[16]
  • R语言通过包来支持netCDF,包括还支持HDF5的ncdf4[17],和不支持HDF5的RNetCDF[18]

应用

编辑

现在已经出产了范围广泛的使用netCDF文件的应用程序。它们的范围从命令行实用程序到图形可视化包。下面列出其中一小部分,而更长的列表可见于UCAR网站列表[19]

  • netCDF算子(NCO)[20],这个包是针对netCDF文件的常用Unix命令行实用工具集,它提供一套命令来操纵和分析netCDF文件,包括基本记录串接数组分片英语Array slicing平均
  • ncview[21],它是netCDF格式文件的可视浏览器。这个程序是可视化在netCDF文件中的场的简单、快速、基于GUI的工具。
  • NCAR命令语言(NCL)[22],它可用来分析和可视化netCDF中的数据(还支持其他格式)。
  • 网格分析和显示系统(GrADS),它是交互式桌面工具,用来容易的访问、操纵和可视化地球科学数据。
  • 地理数据抽象库(GDAL)[23],它提供对netCDF数据的读写访问支持[24]
  • Panoply[25],它是netCDF文件查看器,它关注地理网格数据的表示。它是用Java写成因而跨平台。
  • ECMWFMetview[26],这个工作站和批处理系统可以处理netCDF和GRIBBUFR
  • Ferret[27],它是交互式计算机可视化和分析环境,设计用来满足海洋学者和气象学者分析巨大而且复杂的网格数据。
  • HDFql[28],它使用户能在C、C++、Java、Python、C#、Fortran和R语言中通过高层语言(类似SQL)来管理netCDF-4/HDF5文件。

元数据约定

编辑

气候和预报(CF)约定是对地球科学数据的元数据约定,意图用于促进处理和共享通过netCDF应用编程接口(API)建立的文件。CF约定于2003年建立,普遍化并扩展了早期的协作海洋/大气研究数据服务(COARDS)约定[29]和对气候数据的Gregory/Drach/Tett(GDT)约定[30]。CF约定定义了与数据包含在同一个文件中的元数据,从而使得文件“自我描述”,提供对在每个变量中的数据表示的是什么的确切描述,和数据的空间的和时间的属性的确切描述,包括关于网格的信息,比如网格单元边界和单元平均方法。这使得能够使用来自不同来源的数据,确定哪些数据是可比较的,并允许建造有着强力的提取、重新插值和显示能力的应用。Unidata 在2007年至2011年开发了LibCF库[31]

并行netCDF

编辑

并行netCDF扩展包建造在MPI-IO之上,它是对MPII/O扩展。使用高层netCDF数据结构,并行netCDF库可以进行优化而在多处理器间高效分配文件读和写应用。并行netCDF包只可以读/写经典和64-bit偏移量格式。并行netCDF不能读或写在netCDF-4.0中可获得的基于HDF5的格式。并行netCDF包使用不同但类似的Fortran和C的API。

在Unidata netCDF库中自从版本4.0已经支持对HDF5数据文件的并行I/O。Unidata netCDF C库自从版本4.1.1使用并行netCDF库支持对经典和64-bit偏移量文件的并行 I/O,但使用netCDF API。

与其他格式库的互操作性

编辑

netCDF C库,和基于它的库:Fortran 77和Fortran 90、C++和所有第三方库,自从版本4.1.1开始可以读一些其他数据格式的数据。HDF5格式的数据可以读取,但有一些限制[32]。使用HDF4科学数据(SD)API建立的HDF4格式的数据,可以用netCDF C库读取。

netCDF-Java通用数据模型

编辑

netCDF-Java库目前已经能够读取很多文件格式和远程访问协议,并且正在开发对一些其他的格式的支持。因为这些都是通过netCDF API透明的进行访问,netCDF-Java库被称为实现了科学数据集的“通用数据模型”。

参见

编辑

引用

编辑
  1. ^ 1.0 1.1 NetCDF 4.9.2. 2023年3月17日. 
  2. ^ OGC network Common Data Form (netCDF) standards suite. Opengeospatial.org. [2013-11-27]. (原始内容存档于2017-11-30). 
  3. ^ What are the differences between CDF and netCDF, and CDF and HDF?. [2019-06-08]. (原始内容存档于2018-06-19). 
  4. ^ NetCDF Users Guide — The Extended XDR Layer. [2023-10-09]. (原始内容存档于2023-10-10). 
  5. ^ 5.0 5.1 NetCDF Users Guide — Background and Evolution of the NetCDF Interface. [2023-10-09]. (原始内容存档于2023-10-10). 
  6. ^ PnetCDF: A Parallel I/O Library for NetCDF File Access. [2019-06-05]. (原始内容存档于2019-06-05). 
  7. ^ NetCDF Users Guide — The netCDF File Format. [2023-10-09]. (原始内容存档于2023-10-10). 
  8. ^ NetCDF documentation — The NetCDF-4 Format. [2023-10-09]. (原始内容存档于2023-10-08). 
  9. ^ CDF-5 file format specification页面存档备份,存于互联网档案馆).
  10. ^ What Is netCDF?. [2023-10-09]. (原始内容存档于2023-10-10). 
  11. ^ hnetcdf: Haskell NetCDF library. hackage.haskell.org. 2014-07-10 [2014-07-10]. (原始内容存档于2014-07-09). 
  12. ^ netcdf4-python is a Python interface to the netCDF C library. [2017-12-04]. (原始内容存档于2017-11-29). 
  13. ^ h5netcdf — A Python interface for the netCDF4 file-format that reads and writes local or remote HDF5 files directly via h5py or h5pyd, without relying on the Unidata netCDF library.. [2023-10-08]. (原始内容存档于2023-10-10). 
  14. ^ xarray: N-D labeled arrays and datasets in Python. [2016-09-07]. (原始内容存档于2016-09-01). 
  15. ^ cfgrib: A Python interface to map GRIB files to the NetCDF Common Data Model following the CF Convention using ecCodes. [2023-10-08]. (原始内容存档于2023-10-12). 
  16. ^ PyNIO. Pyngl.ucar.edu. 2011-07-28 [2013-11-27]. (原始内容存档于2013-11-25). 
  17. ^ David Pierce (2014). ncdf4: Interface to Unidata netCDF (version ) format data files. R package version 1.13. https://cran.r-project.org/package=ncdf4页面存档备份,存于互联网档案馆
  18. ^ Pavel Michna and with contributions from Milton Woods (2015). RNetCDF: Interface to NetCDF Datasets. R package version 1.7-3. https://cran.r-project.org/package=RNetCDF
  19. ^ russ. List of software utilities using netCDF files. Unidata.ucar.edu. 1990-01-01 [2013-11-27]. (原始内容存档于2013-12-02). 
  20. ^ NCO页面存档备份,存于互联网档案馆
  21. ^ ncview页面存档备份,存于互联网档案馆
  22. ^ NCAR命令语言页面存档备份,存于互联网档案馆
  23. ^ GDAL页面存档备份,存于互联网档案馆
  24. ^ NetCDF network Common Data Form. Gdal.org. [2013-11-27]. (原始内容存档于2013-06-06). 
  25. ^ Panoply页面存档备份,存于互联网档案馆
  26. ^ Metview页面存档备份,存于互联网档案馆
  27. ^ Ferret页面存档备份,存于互联网档案馆
  28. ^ HDFql页面存档备份,存于互联网档案馆
  29. ^ COARDS页面存档备份,存于互联网档案馆
  30. ^ NetCDF Conventions页面存档备份,存于互联网档案馆).
  31. ^ LibCF库页面存档备份,存于互联网档案馆
  32. ^ NetCDF Users Guide — Interoperability with HDF5. [2023-10-09]. (原始内容存档于2023-10-10). 

外部链接

编辑