|
|
1
3
使现代化 : 下面的解决方案 出现 工作,但它 不 :从中提取数据 失败 ,正如约翰·M发现的那样(见其他答案)。我们认为我们已经发现维护单一维度是解决方案,但从四个维度到一个维度最终会导致错误。正如Sean A.所指出的,你不能使用NcML来改变变量的形状。 原始“解决方案”(实际上不起作用):
如果您的目标是使数据符合CF-1.6,那么您可以使该维度
|
|
|
2
3
Rich的解决方案在某种程度上适用于这个非常具体的案例,但原因是错误的。在NcML中,您可以删除维度对象,但不能重塑数据变量。对于这种特定的情况,当您试图删除单例维度(大小为1)时,事情似乎会成功,因为它并没有真正改变数据在磁盘上的布局方式。例如,如果您使用Unidata的toolsUI,使用Rich的答案中的NcML为临时变量进行ncdump,您将看到singleton维度仍然存在,并且没有真正删除。我不确定这会对文件的读取产生什么影响——我认为这将取决于客户端。然而,如果你试图去除非单体尺寸,那么这将在表面上失败。 如果你真的想正确地重塑你的数据,你必须重写你的netCDF文件。不幸的是,据我所知,这方面没有任何“捷径”。例如,如果您在Unidata的toolsUI中使用Rich中的NcML,并试图基于它写出一个新文件,您将得到一个错误,例如“错误:对于变量z,部分(1)中的范围数必须为=0。”这是因为单例维度仍然存在于netCDF文件中,但NcML文件试图将范围强制为0。然而,如果您了解python,那么编写一个脚本来重写netCDF文件应该非常简单。 请注意,使用NcML重塑变量的能力是我们定期听到的功能请求——向support-netcdf-java@unidata.ucar.edu.还要注意,Unidata是一个社区驱动的组织,Rich是我们的用户委员会成员,该委员会将于下个月举行会议。我建议他在会议上也提到这个功能要求。 干杯 肖恩 |
|
|
3
2
Rich是正确的,这样做的目的是试图将我们的数据提高到CF-1.6,这样做是为了让我们可以通过SOS提供数据。更具体地说,我们想要使用ncSOS(基于TDS构建),而这种特殊风格的SOS需要CF-1.6。在这方面,通过NCML进行的修改似乎有效(加上一些额外的修改;见下文)。 我宁愿不必修改数据集,其中一些数据集可以追溯到几年前。Sean关于客户端工具的观点也很中肯,因为我们的许多用例都涉及到需要变量具有lat/lon维度的工具。因此,我们的解决方案是通过两个NCML“包装器”通过TDS提供一个数据集,一个用于ncSOS,另一个用于通过OPeNDAP访问的需要lat/lon的特定客户端。 除了Rich上面的建议外,为了在ncSOS工作,我们必须:
结果如下:
|
|
|
4
2
为了跟进Jim的上述帖子,虽然Rich的NcML解决方案最初似乎有效,但通过OPeNDAP或ncSOS获取数据的尝试没有成功,这证实了Sean上述的怀疑态度。 目录成功出现,OPeNDAP表格显示了CF-1.6的新维度和重塑变量。此外,ncSOS GetCapabilities文档也成功出现。 但是,尝试使用OPeNDAP表单下载某些数据会出现问题。我无法在OPeNDAP表单上获取变量的子集。例如: http://oos.soest.hawaii.edu/thredds-test/dodsC/hioos/nss/ns01/ns01_2012_02_23.nc.html 如果我尝试使用此URL获取第一个临时值: http://oos.soest.hawaii.edu/thredds-test/dodsC/hioos/nss/ns01/ns01_2012_02_23.nc.ascii?temp[0:1:0] 它给了我一个错误:
唯一成功的是获取所有值: http://oos.soest.hawaii.edu/thredds-test/dodsC/hioos/nss/ns01/ns01_2012_02_23.nc.ascii?temp[0:1:359] 此外,尝试通过ncSOS GetObservation获取数据也会失败。尝试使用以下URL: 这将导致threddsServlet.log中出现以下错误消息:
|
|
|
5
2
NcML现在(自版本4.4以来)有一个删除长度为1的尺寸的操作,例如:
看见 |