如何格式化 netCDF 数据集以与 Thredds OGC 服务兼容
How to format netCDF datasets to be compatible with Thredds OGC services
我有一个从 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 可读该文件?
THREDDS 数据服务器 (TDS) 附带一个名为 ncWMS 的 WMS 服务器作为插件。简短的回答是,我认为 ncWMS 不适用于具有整体维度的数据,因为似乎没有一种方法可以通过 getMap request.
请求整体成员
如果我的理解不正确,并且 ncWMS 将支持具有整体维度的数据,那么您将需要确保 netCDF-java 能够识别示例数据集中的整体 dimension/variable(其中目前没有)。第一个问题是 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, 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 将能够完全识别示例数据集中的网格。
我有一个从 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 可读该文件?
THREDDS 数据服务器 (TDS) 附带一个名为 ncWMS 的 WMS 服务器作为插件。简短的回答是,我认为 ncWMS 不适用于具有整体维度的数据,因为似乎没有一种方法可以通过 getMap request.
请求整体成员如果我的理解不正确,并且 ncWMS 将支持具有整体维度的数据,那么您将需要确保 netCDF-java 能够识别示例数据集中的整体 dimension/variable(其中目前没有)。第一个问题是 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, 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 将能够完全识别示例数据集中的网格。