0

我正在尝试valid_range使用 NetCDF-Java 4.3 将无符号值写入 nc4 文件中的属性,但它始终写为有符号。这使得查看应用程序无法正确显示数据。示例代码:

Array array = Array.factory(DataType.byte, new int[] { 2 });
array.setUnsigned(true);
array.setObject(0, 0);
array.setObject(1, 255);
Attribute attr = new Attribute("valid_range", array);
log.debug("{}", attr);

这打印出来:

valid_range = 0UB, -1UB

但是结果文件中该属性的 CDL 是:

colour1:valid_range = 0b, -1b ;

当我在 ToolsUI 4.3 中查看该变量时,它都是空白的,因为一切都超出了错误范围。我尝试使用短裤来表示无符号字节;对属性有效valid_range但失败:_FillValue

WARN  Nc4Iosp - _FillValue type must agree with var = colour2 type short!=byte

无符号类型应该如何写入属性?

4

2 回答 2

3
  1. Netcdf-Java 稳定版是 4.6,而 4.3 已经过时了,尤其是写入 netcdf4。所以你应该看看 4.6 是如何工作的。

  2. Netcdf-Java 版本 5 添加了无符号数据类型以使这更容易,尽管这还不稳定。

  3. 扩大有效范围是一个很好的解决方案。您必须将 _FillValue 保留为与变量相同的类型,尽管如您所述。

  4. 为什么要设置valid_range?IMO,这不是一个好习惯,因为它强制客户端软件检查有效性。除非你真的需要它,否则不要使用它。记录实际范围更有用。

于 2015-10-19T00:41:07.747 回答
1

如果变量是无符号的,valid_range 值应该被扩大并存储为无符号整数。

Array array = Array.factory(DataType.byte, new int[] { 2 });

将其更改为...

Array array = Array.factory(DataType.INT, new int[] { 2 });

这来自 Unidata 的网站。

https://www.unidata.ucar.edu/software/netcdf/docs/BestPractices.html

于 2014-03-13T02:15:01.500 回答