VRT 的 GDAL C# 包装器不写入 VRT 文件
GDAL C# wrapper for VRT doesn't write a VRT file
我正在使用 .NET 的 GDAL 库(库版本 2.3.3)和 OSGeo4W shell。
我正在做的是将两个(或更多)光栅文件合并到一个 VRT 中,以供以后处理。这发生在代码中。
作为测试,在 shell 中,我可以发出此 GDAL 命令:
gdalbuildvrt C:\Temp\GdalTests\z7_x43_y43.vrt F:\gdal\Aero\gnc[=10=]00a013.gn1 F:\gdal\Aero\gnc[=10=]00b013.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[=11=]00a013.gn1");
aeroFiles.Add(@"F:\gdal\Aero\gnc[=11=]00b013.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
return 对象, 正确表示 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
)。
VRT 驱动程序在调用 dispose 之前不会写入 VRT 文件(这最初也让我感到困惑)。下面的代码应该会导致写入预期的 z7_x43_y43.vrt 文件。如果您计划在 VRT 上运行,您将希望在使用结束时将其丢弃,或者丢弃并重新加载 VRT 以供进一步使用。
GdalConfiguration.ConfigureGdal();
var vrtFile = @"C:\Temp\GdalTests\z7_x43_y43.vrt";
var aeroFiles = new List<string>();
aeroFiles.Add(@"F:\gdal\Aero\gnc[=10=]00a013.gn1");
aeroFiles.Add(@"F:\gdal\Aero\gnc[=10=]00b013.gn1");
var vrtOptions = new GDALBuildVRTOptions(new [] { "-overwrite" });
var vrtDataset = Gdal.wrapper_GDALBuildVRT_names(vrtFile, aeroFiles.ToArray(), vrtOptions, null, null);
vrtDataset.Dispose();
我正在使用 .NET 的 GDAL 库(库版本 2.3.3)和 OSGeo4W shell。
我正在做的是将两个(或更多)光栅文件合并到一个 VRT 中,以供以后处理。这发生在代码中。
作为测试,在 shell 中,我可以发出此 GDAL 命令:
gdalbuildvrt C:\Temp\GdalTests\z7_x43_y43.vrt F:\gdal\Aero\gnc[=10=]00a013.gn1 F:\gdal\Aero\gnc[=10=]00b013.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[=11=]00a013.gn1");
aeroFiles.Add(@"F:\gdal\Aero\gnc[=11=]00b013.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
return 对象, 正确表示 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
)。
VRT 驱动程序在调用 dispose 之前不会写入 VRT 文件(这最初也让我感到困惑)。下面的代码应该会导致写入预期的 z7_x43_y43.vrt 文件。如果您计划在 VRT 上运行,您将希望在使用结束时将其丢弃,或者丢弃并重新加载 VRT 以供进一步使用。
GdalConfiguration.ConfigureGdal();
var vrtFile = @"C:\Temp\GdalTests\z7_x43_y43.vrt";
var aeroFiles = new List<string>();
aeroFiles.Add(@"F:\gdal\Aero\gnc[=10=]00a013.gn1");
aeroFiles.Add(@"F:\gdal\Aero\gnc[=10=]00b013.gn1");
var vrtOptions = new GDALBuildVRTOptions(new [] { "-overwrite" });
var vrtDataset = Gdal.wrapper_GDALBuildVRT_names(vrtFile, aeroFiles.ToArray(), vrtOptions, null, null);
vrtDataset.Dispose();