我正在将v2.3.3 C#绑定用于GDAL,处理多种类型的栅格文件。
使用HDF5栅格时,可以有很多子数据集(HDF5只是多个数据集或栅格的容器)。
我发现通过调用var ds = Gdal.Open(...)
或var ds = Gdal.OpenEx(...)
从HDF5内部打开特定的子数据集非常慢(平均约900毫秒)。
原因似乎是子数据集的每个打开都带有整个HDF5容器的所有元数据,而不仅仅是与指定子数据集有关的元数据。
var source = @"f:\mysource.h5";
var subName = "HDF5:\"F:\\mysource.h5\"://geo/0.05000/259_575/depth";
var openOptions = new[] {"NO_METADATA", "YES"};
var subDs = Gdal.OpenEx(subName, 0, null, openOptions, null);
在这里,我试图提供一个选项来抑制元数据,但无济于事。当我使用subDs
检查Gdal.GDALInfo(subDs, null)
对象时,我会看到所有预期的信息,例如驱动程序(HDF5Image / HDF5数据集),坐标系(wgs84),像素大小等,但也非常长元数据列表,其中包含有关所有子数据集的信息。一个示例(大约9000行文本中只有10个):
geo_0.05000_249_563_east=282
geo_0.05000_249_563_north=35
geo_0.05000_249_563_security_key=100
geo_0.05000_249_563_south=34.5
geo_0.05000_249_563_west=281.5
geo_0.05000_249_564_east=282.5
geo_0.05000_249_564_north=35
geo_0.05000_249_564_security_key=100
geo_0.05000_249_564_south=34.5
geo_0.05000_249_564_west=282
如您所见,这些子数据集名称与我打开的名称(259_575)不同。
即使对于较大的GeoTIFF文件,对Gdal.OpenEx(...)
的调用通常也非常快。相比之下,打开与数据大小和投影相当的GeoTIFF只需40毫秒。
我的问题是,是否有一个“开放选项”将抑制元数据的出现?我发现GDAL / HDF5 driver page没有任何帮助。
或者,也许有其他方法可以在打开子栅格时抑制元数据?