0

我有一个从 NASA LIS 模型生成的 netcdf 数据集,我希望能够使用 Thredds 服务器通过 WMS 显示该数据集。具体的数据集和 thredds 服务器可以在https://tethys.byu.edu/thredds/catalog/testAll/anomaly/catalog.html找到,您还可以在其中下载数据集。

数据集的变量都具有时间、集合、纬度和经度维度,并且一些变量具有附加维度。这些维度有相应的变量。当我打开 wms 端点查看 xml 时,我在图层下看到有

<Layer>
<Title>LIS land surface model output</Title>
</Layer>

但它下面没有变量列表。我找不到有关 Thredds 所需的 netcdf 结构的任何文档,我尝试将其与其他用于查找差异的数据集进行比较,但我被卡住了。配置目录文件,以便您可以读取 .nc 文件、公开 wms 服务等。

我需要更改什么才能使这个文件可以被 thredds 读取?

4

1 回答 1

0

THREDDS 数据服务器 (TDS) 附带一个名为 ncWMS 的 WMS 服务器作为插件。简短的回答是,我认为 ncWMS 不适用于具有集合维度的数据,因为似乎没有一种方法可以通过getMap 请求请求集合成员。

如果我的理解不正确,并且 ncWMS 将支持具有集合维度的数据,那么您将需要确保 netCDF-java 能够识别示例数据集中的集合维度/变量(它目前不能识别)。第一个问题是 netCDF-java 没有将 ensemble 变量视为坐标变量。要解决这个问题,您可以_CoordinateAxisType向 ensemble 变量添加一个属性,以告诉 netCDF-Java 它是一个坐标变量。您可以使用 NcML 执行此操作,这样您就不需要重写文件:

<?xml version="1.0" encoding="UTF-8"?>
<ncml:netcdf xmlns:ncml="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" location="/path_to_file/processed_LIS_HIST_201908010000.d01.nc">
  <ncml:variable name="ensemble">
    <ncml:attribute name="_CoordinateAxisType" value="Ensemble" />
  </ncml:variable>
</ncml:netcdf>

但是,示例数据集中的 ensemble 变量有两个维度,[ensemble, time]netCDF-Java 当前无法处理。令人惊讶的是(可能是因为时间维度的大小为1),netCDF-Java 和 NcML 可以通过logicalReduce向 NcML 添加元素再次做到这一点:

<?xml version="1.0" encoding="UTF-8"?>
<ncml:netcdf xmlns:ncml="http://www.unidata.ucar.edu/namespaces/netcdf/ncml-2.2" location="/path_to_file/processed_LIS_HIST_201908010000.d01.nc">
  <ncml:variable name="ensemble">
    <ncml:attribute name="_CoordinateAxisType" value="Ensemble" />
    <ncml:logicalReduce dimNames="time" />
  </ncml:variable>
</ncml:netcdf>

此时,netCDF-Java 将能够完全识别示例数据集中的网格。

于 2019-04-30T01:12:10.473 回答