✍️ 田冬冬 , 姚家园  •  📅 2024-09-09

写 netCDF 文件

文件名格式

GMT生成网格数据时默认使用 nf 格式(默认网格文件格式由GMT参数 IO_GRIDFILE_FORMAT 控制)。 可以通过在网格文件名后加上额外的信息以指定网格文件的格式。 网格文件的文件名格式为:

name[=ID][+ddivisor][+ninvalid][+ooffset|a][+sscale|a][:driver[dataType][+coptions]]

  • name 是网格文件名

  • ID 是写网格文件时要使用的网格文件格式

  • +d 将网格除以一个数 divisor [默认为 1]

  • +n 将网格中的 invalid 替换为 NaN

  • +o 将网格中的值进行一定的偏移,即加一个数 offset,或使用 a 自动对值进行调整以保证整数网格的精度 [默认为 0]

  • +s 将网格中的值缩放,即乘以 scale,或使用 a 自动对网格缩放以保证整数网格的精度 [默认为 1]

scaleoffset 都可以取为 a,表明由程序自动决定比例因子和偏移量的值。 在写网格文件时,会先加上偏移量,再乘以比例因子。+sa 将会同时设置 +oa。 如果需使用 GDAL 指定网格格式,则 ID 应设置为 gd,并指定 :driver 和可选的数据类型 dataType, 以及 +c\ options 选项传递给 GDAL 的 -co 选项。

分块与压缩

出于性能的考虑,GMT在输出超过16384个网格单元的网格文件时,会启用分块功能。 所谓分块,即数据不是按照一行一行序列存储的,而是将整个网格分成若干个区块, 然后依次存储每个区块的数据。

在读取数据时,若只需要读取数据的一部分,netCDF只需要读取相应的区块即可, 无需读取整个数据。

由于数据的压缩和解压比磁盘IO要快,因而可以对netCDF数据进行压缩,使得磁盘占用更少, IO负载更少。netCDF的压缩可以分为若干等级,压缩级别越高,文件越小,读写数据越快, 但压缩/解压越耗时。通常,压缩级别取1到3效果比较好。

GMT参数 IO_NC4_CHUNK_SIZE 可以控制分块的大小, IO_NC4_DEFLATION_LEVEL 可以控制压缩等级。