首页 > 解决方案 > 如何将 TRE 添加到 gdal 中的 NITF 图像文件?

问题描述

我正在尝试将位图对象转换为 NITF 2.1(国家图像传输格式)文件,并且需要包含 TRE(标记记录扩展名),特别是 SENSRB 块。如何以简单的方式将 TRE 添加到 gdal 中的 NITF 文件的数据集?

我正在使用 NuGet 包 GDAL.NET/GDAL.NET.Core v2.3.1 并成功编写了一个 NITF 文件。我还可以读取包含任何 TRE 块的 NITF 文件。

阅读效果很好:


Dataset dsIn = Gdal.Open(infilepath, Access.GA_ReadOnly);
metadata = dsIn.GetMetadata("xml:TRE");

变量 metadata 接收包含 TRE 的 xml-text 块。但是用同样的方式写是行不通的:

DataSet dsOut = driver.CreateCopy(outfilePath, dsIn, 0, options, null, null);
dsOut.SetMetadata(metadata , "xml:TRE");

xml 块最终位于外部 .aux.xml 文件中,而不是位于 NITF 文件中。

通过在选项参数中指定显式记录,我设法创建了一个小型 TRE:

metadataStrings = new[] {"FILE_TRE=CCINFA=0012AS 17ge:GENC:3:3-5:AUS00000"};
var dsOut = _drvOut.CreateCopy(outfilePath, ds, 0, metadataStrings, null, null);

这会在 NITF 文件中创建 CCINFA 记录。但随后我将不得不创建整个 SENSRB 记录,这相当复杂。

我错过了什么吗?

标签: c#imagegdal

解决方案


推荐阅读