我正在使用 .NET 的 GDAL 库(库版本 2.3.3)和 OSGeo4W shell。
我正在做的是将两个(或更多)光栅文件组合成一个 VRT,以供以后处理。这发生在代码中。
作为测试,在 shell 中,我可以发出以下 GDAL 命令:
gdalbuildvrt C:\Temp\GdalTests\z7_x43_y43.vrt F:\gdal\Aero\gnc\1\0000a013.gn1 F:\gdal\Aero\gnc\1\0000b013.gn1
正如预期的那样,它会在列出的文件夹中生成一个名为“z7_x43_y43.vrt”的 VRT 文件。
但是,相应的 GDAL C# 库似乎无法重现此正确行为;没有 VRT 文件写入vrtFile
.
我可以使用其他 GDAL C# 库,例如wrapper_GDALTranslate(...)
没有问题(意思是,当提供目标路径时,文件被写入那里),它似乎只是 BuildVRT 有问题。
这是我正在使用的代码,针对这个问题进行了简化:
GdalConfiguration.ConfigureGdal();
var vrtFile = @"C:\Temp\GdalTests\z7_x43_y43.vrt";
var aeroFiles = new List<string>();
aeroFiles.Add(@"F:\gdal\Aero\gnc\1\0000a013.gn1");
aeroFiles.Add(@"F:\gdal\Aero\gnc\1\0000b013.gn1");
var vrtOptions = new GDALBuildVRTOptions(new [] { "-overwrite" });
Gdal.wrapper_GDALBuildVRT_names(vrtFile, aeroFiles.ToArray(), vrtOptions, null, null);
源文件 (*.gn1) 使用 NITF 驱动程序和 WGS84 基准,并且在其他与 GDAL C# 库相关的代码任务中工作得很好(例如,我可以将它们加载为栅格,将 gdal_translate 应用于它们等)。
有人对 GDAL C# 库的 VRT 方面有经验吗?关于我可能做错了什么的建议,或者图书馆本身可能存在问题?
编辑:这并不是说调用wrapper_GDALBuildVRT_names
什么都不做......它确实有一个Dataset
返回对象,它正确表示VRT数据,并且可以传递给翻译函数等。
var vrtDataset = Gdal.wrapper_GDALBuildVRT_names(vrtFile, aeroFiles.ToArray(), vrtOptions, null, null);
Gdal.wrapper_GDALTranslate(outPath, vrtDataset, new GDALTranslateOptions(translateOptions.ToArray()),
null, null);
这将正确生成输出文件outPath
(例如,PNG、GeoTIFF 等,取决于选项)。我只是想知道为什么从来没有生成物理 VRT 文件,即使我们传入了目标名称 ( vrtFile
)。