# NITF -- National Imagery Transmission Format

GDAL supports reading of several subtypes of NITF image files, and writing simple NITF 2.1 files. NITF 1.1, NITF 2.0, NITF 2.1 and NSIF 1.0 files with uncompressed, ARIDPCM, JPEG compressed, JPEG2000 (with Kakadu or ECW SDKs) or VQ compressed images should be readable. Other compression mechanisms are not supported at this time. The read support test has been tested on CIB and CADRG RPF products.

Color tables for pseudocolored images are read. In some cases nodata values may be identified. In theory all input pixel types except 1bit are supported, but only 8bit and 16bit types have actually been tested.

Lat/Long extents are read from the IGEOLO information in the image header if available. If high precision lat/long georeferencing information is available in RPF auxilary data it will be used in preference to the low precision IGEOLO information. In case a BLOCKA instance is found, the higher precision coordinates of BLOCKA are used if the block data covers the complete image - that is the L_LINES field with the row count for that block is equal to the row count of the image. Additionally, all BLOCKA instances are returned as metadata.

Most file header and image header fields are returned as dataset level metadata.

## Creation Issues

On export NITF files are always written as NITF 2.1 with one image and no other auxilary layers. Images are uncompressed by default, but JPEG and JPEG2000 compression are also available. Georeferencing can only be written for images using a geographic coordinate system or a UTM WGS84 projection. Coordinates are implicitly treated as WGS84 even if they are actually in a different geographic coordinate system. Pseudo-color tables may be written for 8bit images.

In addition to the export oriented CreateCopy() API, it is also possible to create a blank NITF file using Create() and write imagery on demand. However, using this methology writing of pseudocolor tables and georeferencing is not supported unless appropriate IREP and ICORDS creation options are supplied.

Creation Options:

- Most file header, imagery header metadata and security fields can be set with appropriate creation options (although they are reported as metadata item, but must not be set as metadata). For instance setting `"FTITLE=Image of abandoned missle silo south west of Karsk"` in the creation option list would result in setting of the FTITLE field in the NITF file header. Use the official field names from the NITF specification document; do not put the "NITF_" prefix that is reported when asking the metadata list.

- IC=NC/C3/M3/C8 : Set the compression method.
  - NC is the default value, and means no compression.
  - C3 means JPEG compression and is only available for the CreateCopy() method. The QUALITY and PROGRESSIVE JPEG-specific creation options can be used. See the JPEG driver documentation. Starting with GDAL 1.7.0, multi-block images can be written.
  - M3 is a variation of C3. The only difference is that a block map is written, which allow for fast seeking to any block. (Starting with GDAL 1.7.0.)
  - C8 means JPEG2000 compression (one block) and is available for both CreateCopy() and Create() methods. JPEG2000 compression is only available if the JP2ECW driver is available. The TARGET and PROFILE JP2ECW-specific creation options can be used. See the JP2ECW driver documentation. Starting with GDAL 1.7.0, if JP2ECW driver is not available, Jasper JPEG2000 driver can be used in the CreateCopy() case.

- NUMI=n : (Starting with GDAL 1.7.0) Number of images. Default = 1. This option is only compatible with IC=NC (uncompressed images).

- ICORDS=G/D/N/S: Set to "G" to ensure that space will be reserved for geographic corner coordinates (in DMS) to be set later via SetGeoTransform(), set to "D" for geographic coordinates in decimal degrees, set to "N" for UTM WGS84 projection in Northern hemisphere or to "S" for UTM WGS84 projection in southern hemisphere (Only needed for Create() method, not CreateCopy()). If you Create() a new NITF file and have specified "N" or "S" for ICORDS, you need to call later the SetProjection method with a consistent UTM SRS to set the UTM zone number (otherwise it will default to zone 0).

- FHDR: File version can be selected though currently the only two variations supported are "NITF02.10" (the default), and "NSIF01.00".

- IREP: Set to "RGB/LUT" to reserve space for a color table for each output band. (Only needed for Create() method, not CreateCopy()).

- LUT_SIZE: Set to control the size of pseudocolor tables for RGB/LUT bands. A value of 256 assumed if not present. (Only needed for Create() method, not CreateCopy()).

- BLOCKXSIZE=n: Set the block width.

- BLOCKYSIZE=n: Set the block height.

- BLOCKA_*=: If a complete set of BLOCKA options is provided with exactly the same organization as the NITF_BLOCKA metadata reported when reading an NITF file with BLOCKA TREs then a file will be created with BLOCKA TREs.

- TRE=tre-name=tre-contents: One or more TRE creation options may be used provided to write arbitrary user defined TREs to the image header. The tre-name should be at most six characters, and the tre-contents should be "backslash escaped" if it contains blackslashes or zero bytes. The argument is the same format as returned in the TRE metadata domain when reading.

## Credit

The author wishes to thank AUG Signals and the GeoConnections program for supporting development of this driver, and to thank Steve Rawlinson (JPEG), Reiner Beck (BLOCKA) for assistance adding features.

See Also:

- Advanced GDAL NITF Driver Information
- NITFS Technical Board Public Page
- The OGDI driver supports many NITF based RPF products including CIB and CADRG.

- The RPFTOC driver is an alternative to the OGDI driver for CIB and CADRG products.