NITF—高级驱动程序信息

GDAL中的NITF(国家图像传输格式)驱动程序包括许多高级的、有些深奥的选项,不适合 general end user documentation 为了司机。此信息在此处收集,主要针对开发人员和高级用户。

CGM段

具有CGM数据(即段类型GR-graphics或STYPE值为“C”的SY)的NITF文件将使该信息作为CGM域中的元数据可用。返回的元数据将类似于:

SEGMENT_COUNT=1
SEGMENT_0_SLOC_ROW=25
SEGMENT_0_SLOC_COL=25
SEGMENT_0_SDLVL=2
SEGMENT_0_SALVL=1
SEGMENT_0_CCS_ROW=00025
SEGMENT_0_CCS_COL=00025
SEGMENT_0_DATA=\0!\0...

SLOC_ROW和SLOC_COL值是CGM对象相对于基础(SALVL)图像的位置。CCS_行/列值相对于公共坐标系。SDLVL是显示级别。数据是应用了“反斜杠可引用”转义的原始CGM数据。所有出现的ASCII零都将转换为“0”,所有反斜杠和双引号都将被反斜杠转义。函数的作用是:使用CPLES_backlashquotable方案将数据转换成二进制格式。

要将CGM数据添加到NITF图像,可以按以下格式传递创建选项:

CGM=SEGMENT_COUNT=1
CGM=SEGMENT_0_SLOC_ROW=25
CGM=SEGMENT_0_SLOC_COL=25
CGM=SEGMENT_0_SDLVL=2
CGM=SEGMENT_0_SALVL=1
CGM=SEGMENT_0_DATA=\0!\0...

请注意,将CGM作为创建选项传递将覆盖CGM元数据域中读取的现有CGM段。

虽然GDAL不支持解析或呈现CGM数据,但至少有一个用户找到了 UniConverter 为此目的有用的库。

多图像NITF文件

具有多个图像段(IM)的NITF文件将图像段显示为子数据集。按文件名打开多个NITF文件将提供对第一个图像段的访问。3映像NITF文件的子数据集元数据可能如下所示:

Subdatasets:
  SUBDATASET_1_NAME=NITF_IM:0:multi_image_jpeg_2.0.ntf
  SUBDATASET_1_DESC=Image 1 of multi_image_jpeg_2.0.ntf
  SUBDATASET_2_NAME=NITF_IM:1:multi_image_jpeg_2.0.ntf
  SUBDATASET_2_DESC=Image 2 of multi_image_jpeg_2.0.ntf
  SUBDATASET_3_NAME=NITF_IM:2:multi_image_jpeg_2.0.ntf
  SUBDATASET_3_DESC=Image 3 of multi_image_jpeg_2.0.ntf

在这种情况下,直接打开“multi_image_jpeg_2.0.ntf”将允许访问“NITF_IM:0:multi_image_jpeg_2.0.ntf”。若要打开其他子数据集,请使用相应的子数据集名称。子数据集机制是在 栅格数据模型 文件。

文本段

具有文本段(即段类型TX)的NITF文件将使该信息在文本域中作为元数据可用。返回的元数据将类似于:

HEADER_0=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
DATA_0=This is test text file 01.

HEADER_1=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
DATA_1=This is test text file 02.

HEADER_2=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
DATA_2=This is test text file 03.

HEADER_3=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
DATA_3=This is test text file 04.

HEADER_4=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
DATA_4=This is test text file 05.

数据的参数是第n个(基于零的)文本段的原始文本,不应用任何转义。

文本段头数据保存在头元数据项中。NITF驱动程序上的CreateCopy()方法还支持在输出文件上创建文本段,只要输入文件在上面定义的文本域中有元数据。

要向NITF图像添加文本数据,还可以按以下格式传递创建选项:

TEXT=HEADER_0=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
TEXT=DATA_0=This is test text file 01.
TEXT=HEADER_1=TE       00020021216151629xxxxxxxxxxxxxxxxxxxxxxxxxxx
TEXT=DATA_1=This is test text file 02.

请注意,将文本作为创建选项传递将覆盖文本元数据域中读取的现有文本段。

TREs

已注册(或未注册)的NITF文件文件头上的扩展名或引用的图像头将使它们通过TRE域以原始形式在元数据中可用。TRE域将为每个TRE保存一个元数据项,该元数据项的名称为TRE,内容为TRE的数据。数据内容将像上面的CGM数据一样被“反斜杠转义”。

如果同一TRE出现多次,则第二次出现将命名为“TRE name_2”,第三次出现将命名为“TRENAME_3”,其中TRENAME是TRE名称。

Metadata (TRE):
  GEOPSB=MAPM  World Geodetic System 1984
               WGE World Geodetic System 1984
                   WE Geodetic
                      GEODMean Sea
                          MSL 000000000000000
                                                0000
  PRJPSB=Polar Stereographic
         PG2-00090.00000250000039.99999884000000000000000000000000000000
  MAPLOB=M  0598005958-000003067885.8-000002163353.8

TREs作为xml:TRE

在文件中找到的所有TRE,并且与 nitf_spec.xml 在GDAL中,数据目录将报告为XML:TRE元数据域中的XML内容。

Metadata (xml:TRE):
<tres>
  <tre name="RSMDCA" location="des TRE_OVERFLOW">
    <field name="IID" value="2_8" />
    <field name="EDITION" value="1101222272-2" />
    <field name="TID" value="1101222272-1" />
    <field name="NPAR" value="06" />
    <field name="NIMGE" value="001" />
    <field name="NPART" value="00006" />
    <repeated name="IMAGE" number="1">
      <group index="0">
        <field name="IID" value="2_8" />
        <field name="NPARI" value="06" />
      </group>
    </repeated>
    <field name="XUOL" value="-2.42965895449297E+06" />
    <field name="YUOL" value="-4.76049894293300E+06" />
    <field name="ZUOL" value="+3.46898407315533E+06" />
    <field name="XUXL" value="+8.90698769551156E-01" />
    <field name="XUYL" value="+2.48664813021570E-01" />
    <field name="XUZL" value="-3.80554217799520E-01" />
    <field name="YUXL" value="-4.54593996792805E-01" />
    <field name="YUYL" value="+4.87215943350720E-01" />
    <field name="YUZL" value="-7.45630553709282E-01" />
    <field name="ZUXL" value="+0.00000000000000E+00" />
    <field name="ZUYL" value="+8.37129879594448E-01" />
    <field name="ZUZL" value="+5.47004172461403E-01" />
[...]
    <repeated name="DERCOV" number="21">
      <group index="0">
        <field name="DERCOV" value="+5.77388827727787E+04" />
      </group>
[...]
      <group index="20">
        <field name="DERCOV" value="+1.14369570920252E-02" />
      </group>
    </repeated>
  </tre>
  <tre name="RSMECA" location="des TRE_OVERFLOW">
[...]
  </tre>
  <tre name="RSMIDA" location="des TRE_OVERFLOW">
[...]
  </tre>
  <tre name="RSMPCA" location="des TRE_OVERFLOW">
[...]
  </tre>
</tres>

从十六进制数据创建TRE

TRE数据可以以十六进制格式添加到新创建的NITF文件中,以对二进制数据(如无符号int或浮点类型)进行编码。十六进制TRE创建选项提供为“TRE=HEX/<TREu name>=<HEXu TREu data>”或“FILEu TRE=HEX/<TREu name>=<HEXu TREu data>

# Encode "ABC" as 3 bytes of hex data, "414243"
ds = gdal.GetDriverByName('NITF').Create('/vsimem/file.ntf', 1, 1, options=["TRE=HEX/TSTTRE=414243"])

数据扩展段(xml:DES)

数据扩展段(des)是用户定义的NITF格式的元数据扩展。DES元数据可通过xml:DES元数据域获得。xml:DES域返回一个xml字符串,其中标准和用户定义的DES字段为纯文本,用户定义的DES数据为Base64编码文本。以下是XML结构示例:

<des_list>
  <des name="TEST">
    <field name="NITF_DESVER" value="02" />
    <field name="NITF_DECLAS" value="U" />
    <field name="NITF_DESCLSY" value="" />
    [...]
    <field name="NITF_DESCTLN" value="" />
    <field name="NITF_DESSHL" value="0004" />
    <field name="NITF_DESSHF" value="ABCD" />
    <field name="NITF_DESDATA" value="MTIzNDU2Nzg5MA==" />
  </des>
</des_list>

原始文件/图像标题

在某些情况下,应用程序可能需要从通常不能作为元数据使用的图像或文件头中恢复非常特定的信息。在这种情况下,可以查询“NITF_METADATA”元数据域。完整的文件和图像头将以base64编码格式作为元数据返回。类似于:

Metadata (NITF_METADATA):
  NITFFileHeader=002213 TklURjAyLjAwMDEgICAgVTIxN0cwSjA...
  NITFImageSubheader=439 SU1NaXNzaW5nIElEMjUxNTI1NTlaTU...

注意,前缀base64编码头的ascii编码数值是字节长度(解码),后跟一个空格。

Writing multiple Image Segments

(GDAL >= 3.4)

Writing a NITF file with several image segments is done with the APPEND_SUBDATASET=YES creation option but requires some care.

The file must be created with the content of the first image segment with the NUMI creation option to specify the total number of image segments and optionally with the NUMDES creation option with the number of DE segments. TREs that apply to the whole file should also be specified at that stage. The APPEND_SUBDATASET creation option must NOT be specified.

Subsequent images are appended with the APPEND_SUBDATASET=YES creation option. The IDLVL, IALVL, ILOCROW and ILOCCOL creation option may be specified.

On the last image segment, the DES content, if any must be specified with the DES creation option.

备注

The file will only be valid if all NUMI images have been actually written.

例子:

gdal_translate first_image.tif  dest.tif -co NUMI=3 -co NUMDES=1
gdal_translate second_image.tif dest.tif -co APPEND_SUBDATASET=YES -co IC=C3 -co IDLVL=2
gdal_translate third_image.tif  dest.tif -co APPEND_SUBDATASET=YES -co IC=C8 -co IDLVL=3 -co "DES=DES1={des_content}"