如何格式化netCDF数据集以与Thredds OGC服务兼容

时间:2019-04-30 00:09:52

标签: netcdf thredds

我有一个由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可读此文件,我需要更改什么?

1 个答案:

答案 0 :(得分:0)

THREDDS数据服务器(TDS)带有一个称为ncWMS的WMS服务器作为插件。简短的答案是,我认为ncWMS不适用于具有整体维的数据,因为似乎没有一种通过getMap request请求整体成员的方法。

如果我的理解不正确,并且ncWMS将支持具有整体维的数据,那么您将需要确保netCDF-java将识别示例数据集中的整体维/变量(当前尚不支持)。第一个问题是netCDF-java不会将集合变量视为坐标变量。要解决此问题,您可以在集合变量中添加一个_CoordinateAxisType属性,以告诉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可以通过在NcML上添加logicalReduce元素来再次实现此目的:

<?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将能够完全识别示例数据集中的网格。