NetCDF

**網路通用資料格式**（英語：Network Common Data Form，**NetCDF**）是一種自描述、與機器無關、基於陣列的科學資料格式，同時也是支援建立、存取和共享這一資料格式的函式庫。該專案首頁位於美國大氣科學研究大學聯盟（UCAR）的 Unidata 規劃網站。它也是 netCDF 軟體、標準開發、更新等的主要來源。NetCDF 格式是一種開放標準。NetCDF 的經典格式和 64 位元偏移量格式是開放地理空間協會採用的國際標準。

該專案開始於 1989 年，UCAR 目前對其積極支援，在新發行版中改進效能、增加功能並修正缺陷，目前版本系列是 netCDF-4，在編譯時也可以選擇只建造 netCDF-3 庫。

## 歷史

1985 年美國國家航空暨太空總署（NASA）的國家空間科學資料中心（NSSDC）設計並開發了通用資料格式（CDF），CDF 最初是用 FORTRAN 寫成並只能在 VAX/VMS 環境下獲得。Unidata 在 1987 年 8 月成立了關於 CDF 的工作群組，提議探索與 NASA 協同運作擴充 CDF 的 FORTRAN 介面，定義 C 介面，並允許用一個單一呼叫存取資料聚集，同時要維持與現存 NASA 介面相容的可能性。在 1988 年早些時候，Unidata 的 Glenn Davis 用 C 開發了原型 netCDF 包，它位於網路表示層 XDR 格式的上層。這個原型證明了 CDF 介面的基於 XDR 的一個單一檔案實現可以在可接受代價下完成，而結果的程式可以在 UNIX 和 VMS 系統二者上實現。但這也說明了提供一個小的、可移植的、相容於 NASA CDF 的有想要的通用性的 FORTRAN 介面是不實際的。NASA 的 CDF 和 Unidata 的 netCDF 從此獨立發展，但新近的 CDF 版本與 netCDF 共享了很多特徵。

1991 年 Unidata 發布了 netCDF 版本 2.0，1997 年發布了版本 3.3。2003 年 7 月美國能源部的阿貢國家實驗室和西北大學貢獻了叫做並列 - NetCDF（或稱 PnetCDF）的一個 netCDF 平行計算擴充。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 存取遠端資料的特定子集的支援，並使用 PnetCDF 庫支援在 netCDF 經典格式（CDF-1、CDF-2 和 2012 年推出的 CDF-5）上的並列 I/O。

## 格式描述

netCDF 庫支援 netCDF 檔案的多種不同的二進位格式：

* 在最初 netCDF 發行中使用的經典格式 CDF-1，它仍是檔案建立的預設格式。
* 在版本 3.6.0 中介入的 64-bit 偏移量格式 CDF-2，它支援更大的變數和檔案大小。
* 在版本 4.0 中介入的 netCDF-4/HDF5 格式，它是帶有一些限制的 HDF5 資料格式。
* 在版本 4.1 中開始支援對 HDF4 SD 格式的唯讀存取。
* 在版本 4.4.0 中介入了 CDF-5 格式，協同於並列 - netcdf 計劃的規定。

所有格式都是「自描述的」。 這意味其中有一個頭部，它描述檔案餘下部分的格局，特別是陣列資料，連同以名稱 / 值特性形式的任意檔案元資料。這個格式是跨平台的，涉及的問題如位元組序在軟體庫中解決。資料以允許有效的構造子集的方式來儲存。

起始於版本 4.0，netCDF API 允許使用 HDF5 資料格式。NetCDF 使用者可以建立 HDF5 檔案從而獲得 netCDF 格式不具備的利益，比如更大的檔案和多重無限制的維度。

完全後向相容，可存取舊有 netCDF 檔案並支援以前版本的 C 和 Fortran API。

## 軟體

netCDF 常用於氣候學、氣象學和海洋學應用，如天氣預報、氣候變化；也用於地理資訊系統應用，是很多 GIS 應用的輸入 / 輸出格式；並用於通用科學資料交換。從它的站點引述如下：netCDF（網路公用資料格式）是用於面向陣列資料存取的一組介面，和針對 C、Fortran、C++、Java 和其他語言的一套自由發行的資料存取庫。netCDF 庫支援用來表示科學資料的一種機器無關格式。介面、庫和格式一起支援建立、存取和共享科學資料。

### 存取庫

UCAR 發布的軟體庫提供了對 netCDF 檔案的讀寫存取，編碼和解碼所需的陣列和元資料。核心庫是用 C 編寫的，並為 C、C++ 應用提供 API，為 Fortran 應用提供兩個 API，一個給 Fortran 77，一個給 Fortran 90。Unidata 還開發維護一個獨立實現，使用 100% Java 寫成，它擴充了核心資料模型並增加了額外的功能。還可獲得其他語言的到基於 C 庫的 netCDF 的介面，包括 R（ncdf、ncvar 和 RNetCDF 包）、Perl 資料語言、Python、Ruby、Haskell、Mathematica、MATLAB、IDL 和 Octave。API 呼叫規定在不同語言間非常類似，儘管有著不可避免的不同語法。版本 2 的 API 呼叫與版本 3 的呼叫相當不同，但出於後向相容而被版本 3 和版本 4 支援。應用編程者使用受支援語言，在正常情況下不需要關心檔案結構自身，即使它是作為開放格式而獲得的。

### 應用

現在已經寫出了使用 netCDF 檔案的範圍廣泛的應用程式。它們的範圍從命令列實用程式到圖形視覺化包。下面列出其中一小部分，而更長的列表可見於 UCAR 網站列表：

* NetCDF 算子（NCO），這個套件是針對 netCDF 檔案的常用 Unix 命令列實用工具集，它提供一套命令來操縱和分析 netCDF 檔案，包括基本記錄串接、陣列分片和平均。
* ncview，它是 netCDF 格式檔案的可視瀏覽器。這個程式是視覺化在 netCDF 檔案中的場的簡單、快速、基於 GUI 的工具。
* NCAR 命令語言（NCL），它可用來分析和視覺化 netCDF 中的資料（還支援其他格式）。
* 網格分析和顯示系統（GrADS），它是互動式桌面工具，用來容易的存取、操縱和視覺化地球科學資料。
* Python 語言存取 netCDF 檔案，可以用 PyNIO 模組（還支援其他格式）；還可以用 Python 模組 `netCDF4-python` 來讀取；還可以用 `xarray` 模組變成類似 pandas`DataFrame` 的物件。
* R 語言通過包來支援 netCDF，包括 ncdf4（也支援 HDF5），和 RNetCDF（不支援 HDF5）。
* 地理資料抽象庫（GDAL），它提供對 netCDF 資料的讀寫存取支援。
* Panoply，它是 netCDF 檔案檢視器，它關注地理網格資料的表示。它是用 Java 寫成因而跨平台。
* ECMWF 的 Metview，這個工作站和批次處理系統可以處理 NetCDF 和 GRIB 及 BUFR。
* Ferret，它是互動式電腦視覺化和分析環境，設計用來滿足海洋學者和氣象學者分析巨大而且複雜的網格資料。
* HDFql，它使使用者能在 C、C++、Java、Python、C#、Fortran 和 R 語言中通過高層語言（類似 SQL）來管理 netCDF-4/HDF5 檔案。

## 元資料約定

氣候和預報（CF）約定是對地球科學資料的元資料約定，意圖用於促進處理和共享通過 NetCDF 應用編程介面（API）建立的檔案。CF 約定於 2003 年建立，普遍化並擴充了早期的協同運作海洋 / 大氣研究資料服務（COARDS）約定和對氣候資料的 Gregory/Drach/Tett（GDT）約定。CF 約定定義了與資料包含在同一個檔案中的元資料，從而使得檔案「自我描述」，提供對在每個變數中的資料表示的是什麼的確切描述，和資料的空間的和時間的屬性的確切描述，包括關於網格的資訊，比如網格單元邊界和單元平均方法。這使得能夠使用來自不同來源的資料，確定哪些資料是可比較的，並允許建造有著強力的提取、重新插值和顯示能力的應用。Unidata 在 2007 年至 2011 年開發了 LibCF 庫。

## 並列 - NetCDF

並列 - NetCDF 擴充建造在 MPI-IO 之上，它是對 MPI 的 I/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 格式的資料可以讀取，但有一些限制。使用 HDF4 科學資料（SD）API 建立的 HDF4 格式的資料，可以用 netCDF C 庫讀取。

## NetCDF-Java 通用資料模型

NetCDF-Java 庫目前已經能夠讀取很多檔案格式和遠端存取協定，並且正在開發對一些其他的格式的支援。因為這些都是通過 NetCDF API 透明的進行存取，NetCDF-Java 庫被稱為實現了科學資料集的「通用資料模型」。

## 參見

* 通用資料格式 (CDF)
* CGNS (CFD General Notation System)
* EAS3 (Ein-Ausgabe-System)
* FITS (Flexible Image Transport System)
* GRIB (GRIdded Binary)
* 層級資料格式（HDF）
* OPeNDAP 客戶 - 伺服器協定
* Tecplot 二進位檔案
* XMDF (eXtensible Model Data Format)

## 參照

## 外部連結

* 官方網站
* CF Metadata Home Page（頁面存檔備份，存於網際網路檔案館）
* PnetCDF: A Parallel I/O Library for NetCDF File Access（頁面存檔備份，存於網際網路檔案館）
* netCDF-Java project（頁面存檔備份，存於網際網路檔案館） at UCAR