網絡通用數據格式(英語: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日,20個月前)
格式類型科學二進制數據
延伸自通用數據格式(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). 

外部連結

編輯