GTiff—GeoTIFF文件格式

司机简称

GTiff

Driver built-in by default

This driver is built-in by default

大多数形式的TIFF和GeoTIFF文件都由GDAL支持读取,但可以编写的种类较少。

GDAL还支持读取和写入BigTIFF文件(TIFF格式的演变以支持大于4gb的文件)。

当前字节、UInt16、Int16、UInt32、Int32、Float32、Float64、CInt16、CInt32、CFloat32和CFloat64的带区类型支持读写。调色板图像将返回与波段相关联的调色板信息。下面列出的压缩格式也应支持读取。

此外,一位文件和GeoTIFF文件的一些其他不寻常的公式(例如YCbCr颜色模型文件)会自动转换为RGBA(红色、绿色、蓝色、alpha)格式,并被视为四个八位带。

驱动程序功能

Supports CreateCopy()

This driver supports the GDALDriver::CreateCopy() operation

Supports Create()

This driver supports the GDALDriver::Create() operation

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

This driver supports virtual I/O operations (/vsimem/, etc.)

影像配准

大多数GeoTIFF投影都应该得到支持,但需要注意的是,为了将不常见的投影和地理坐标系转换为OGC WKT,必须有项目项目数据库数据库可用。它必须位于PROJ_LIB环境变量所指向的位置,或者位于通过osrsetprojectsearchpaths()以编程方式设置的位置之一。

GeoTIFF的地理参考以一个tiepoint和像素大小、一个转换矩阵或一个gcp列表的形式受支持。

如果TIFF文件本身没有可用的地理参考信息,GDAL还将检查并使用ESRI world file 扩展名为.tfw、.tifw/.tiffw或.wld,以及MapInfo.tab文件。

默认情况下,信息按以下顺序获取(首先列出的是最优先的):PAM(永久辅助元数据).aux.xml sidecar文件、内部(GeoTIFF密钥和标记)、tab file(.tab)、WORLDFILE(.tfw、.tifw/.tiffw或.wld)。

从GDAL 2.2开始,可以使用GDAL GEOREF_sources配置选项(或GEOREF_sources open选项)更改允许的源及其优先级顺序,该选项的值是以下关键字的逗号分隔列表:PAM、INTERNAL、TABFILE、WORLDFILE、NONE。首先提到的消息来源是最优先于接下来的消息来源。将忽略未提及的源。

例如,将其设置为“WORLDFILE,PAM,INTERNAL”将使潜在的WORLDFILE优先于PAM或GeoTIFF生成地理转换矩阵。

GDAL 可以读写 RPCCoefficientTag 如中所述 RPCs in GeoTIFF 提议的延期。标记只为使用默认配置文件GDALGeoTIFF创建的文件编写。对于其他配置文件,将创建一个.RPB文件。在GDAL数据模型中,RPC系数存储在RPC元数据域中。有关详细信息,请参见 RFC 22:RPC地理参考 . 如果找到.RPB或\u RPC.TXT文件,它们将用于读取RPC,即使 RPCCoefficientTag 标记已设置。

内部 nodata 掩码

TIFF文件可以包含内部透明遮罩。当在TIFFTAG_子文件类型标记上设置FILETYPE_mask位值时,GeoTIFF驱动程序将内部目录识别为透明掩码。根据TIFF规范,这种内部透明遮罩包含1个1位数据样本。尽管TIFF规范允许内部透明遮罩具有更高的分辨率,但GeoTIFF驱动程序仅支持与主图像具有相同维度的内部透明遮罩。还支持内部概述的透明遮罩。

当GDALu TIFFu INTERNALu MASK configuration选项设置为YES并且GeoTIFF文件以更新模式打开时,TIFF数据集或栅格带上的CreateMaskBand()方法将创建一个内部透明掩码。否则,将使用nodata掩码创建的默认行为,即创建一个.msk文件,如 RFC 15:带屏蔽 .

1位内部遮罩带被放气压缩。当读取它们时,为了使蒙版带和阿尔法带之间的转换更容易,蒙版带向用户公开为提升到满8位(即,未蒙版像素的值为255),除非将GDAL_TIFF_INTERNAL_mask_to_8BIT配置选项设置为否。这不会影响蒙版带的写入方式(始终为1位)。

概览

GeoTIFF驱动程序支持读取、创建和更新内部概述。可以在以更新模式打开的GeoTIFF文件上创建内部概述(例如使用gdaladdo)。如果GeoTIFF文件以只读方式打开,则将在外部.ovr文件中创建概述。概述仅在请求时使用BuildOverviews()方法更新。

通过将GDAL-TIFF-OVR-block size环境变量设置为64和4096之间的二次幂,可以指定用于俯视图(内部或外部)的块大小(平铺宽度和高度)。默认值为128,或者从GDAL 3.1开始,尽可能使用与全分辨率数据集相同的块大小(即块的高度和宽度相等,二次幂,介于64和4096之间)。

概述和nodata掩码

根据overview和nodata掩码是否是内部的,可能会遇到以下配置。

有两种受支持的配置:

  • 内部概述,内部节点数据掩码:如果GeoTIFF文件具有内部透明度掩码(且GDAL_TIFF_Internal_mask环境变量未设置为“否”),并且GeoTIFF文件以更新模式打开,则BuildOverviews()将自动为内部透明度掩码创建概述。

  • 外部概述,外部节点数据掩码:以只读模式打开时,BuildOverviews()将自动为外部透明度掩码创建概述(在.msk.ovr文件中)

对于其他两种混合配置,行为不太明显:

  • 内部概述,外部nodata mask:在.tif文件的更新模式下运行BuildOverviews()时,将只生成主带区的概述。外部.msk文件的概述必须通过在.msk上运行BuildOverviews()显式生成。

  • 外部概述,内部nodata mask:在.tif文件上以只读模式运行BuildOverviews()时,将只生成主带区的概述。驱动程序当前不支持生成内部nodata掩码的概述。

实用说明:从命令行的角度来看,update模式下的BuildOverview()表示“gdaladdo the.tiff”(不带-ro)。而只读模式下的BuildOverviews()表示“gdaladdo-ro the.tiff”。

元数据

GDAL可以将以下基线TIFF标记作为数据集级别的元数据处理:

  • TIFFTAG_DOCUMENTNAME

  • TIFFTAG_IMAGEDESCRIPTION

  • TIFFTAG_SOFTWARE

  • TIFFTAG_DATETIME

  • TIFFTAG_ARTIST

  • TIFFTAG_HOSTCOMPUTER

  • TIFFTAG_COPYRIGHT

  • TIFFTAG_XRESOLUTION

  • TIFFTAG_YRESOLUTION

  • TIFFTAG_RESOLUTIONUNIT

  • TIFFTAG_MINSAMPLEVALUE(只读)

  • TIFFTAG_MAXSAMPLEVALUE(只读)

  • GEO_METADATA :此标记可用于嵌入使用基于19139的架构(GeoTIFF DGIWG)准备的XML编码实例文档(GDAL>=2.3)

  • TIFF_RSID :根据DMF定义(GeoTIFF DGIWG)(GDAL>=2.3),此标记指定文件通用唯一标识符(RSID)

要使用的元数据项的名称是上述名称之一(“TIFFTAG_DOCUMENTNAME”,…)。例如,在创建时,可以使用

gdal_translate in.tif out.tif -mo {TAGNAME}=VALUE

其他非标准元数据项可以存储在使用概要文件GDALGeoTIFF创建的TIFF文件中(默认情况下,请参见下面的“创建问题”部分)。这些元数据项被组合成一个XML字符串,存储在非标准TIFFTAG-GDAL-u元数据ASCII标记(代码42112)中。使用BASELINE或GeoTIFF配置文件时,这些非标准元数据项存储在PAM.aux.xml文件中。

GDALMD_AREA_或_POINT(“AREA_或_POINT”)元数据项的值存储在GDALGeoTIFF或GeoTIFF配置文件的GeoTIFF key RasterPixelIsPoint中。

XMP元数据可以从文件中提取,并在xml:XMP元数据域名。

EXIF元数据可以从文件中提取,并将在EXIF元数据域中报告。

颜色配置文件元数据

GDAL可以处理颜色配置文件域中的以下颜色配置文件元数据:

  • 源ICC配置文件(文件中嵌入Base64编码的ICC配置文件)。如果可用,则忽略其他标记。)

  • SOURCE_PRIMARIES_RED(对于RED primary,x y y采用“x,y,1”格式。)

  • SOURCE_PRIMARIES_GREEN(对于GREEN primary,x y y采用“x,y,1”格式)

  • SOURCE_PRIMARIES_BLUE(对于BLUE primary,x y y格式为“x,y,1”)

  • SOURCE_WHITEPOINT(WHITEPOINT格式为“x,y,1”的xyY)

  • TIFFTAG_TRANSFERFUNCTION_RED(TIFFTAG_TRANSFERFUNCTION的红色表)

  • TIFFTAG_TRANSFERFUNCTION_GREEN(TIFFTAG_TRANSFERFUNCTION的绿色表格)

  • TIFFTAG_TRANSFERFUNCTION_BLUE(TIFFTAG_TRANSFERFUNCTION的蓝色表)

  • TIFFTAG_TRANSFERRANGE_BLACK(TIFFTAG_TRANSFERRANGE的最小范围)

  • TIFFTAG_TRANSFERRANGE_WHITE(TIFFTAG_TRANSFERRANGE的最大范围)

请注意,这些元数据属性只能用于原始像素数据。如果已自动转换为RGB,则无法使用颜色配置文件信息。

所有这些元数据标记都可以重写和/或用作创建选项。

Nodata值

对于使用默认配置文件GDALGeoTIFF创建的文件,GDAL将band nodata值存储在非标准TIFFTAG_GDAL_nodata ASCII标记(代码42113)中。请注意,所有频带都必须使用相同的nodata值。使用BASELINE或GeoTIFF配置文件时,nodata值存储在PAM.aux.xml文件中。

稀疏文件

GDAL makes a special interpretation of a TIFF tile or strip whose offset and byte count are set to 0, that is to say a tile or strip that has no corresponding allocated physical storage. On reading, such tiles or strips are considered to be implicitly set to 0 or to the nodata value when it is defined. On writing, it is possible to enable generating such files through the Create() interface by setting the SPARSE_OK creation option to YES. Then, blocks that are never written through the IWriteBlock()/IRasterIO() interfaces will have their offset and byte count set to 0. This is particularly useful to save disk space and time when the file must be initialized empty before being passed to a further processing stage that will fill it. To avoid ambiguities with another sparse mechanism discussed in the next paragraphs, we will call such files with implicit tiles/strips "TIFF sparse files". They will be likely not interoperable with TIFF readers that are not GDAL based and would consider such files with implicit tiles/strips as defective.

从GDAL 2.2开始,这个机制也扩展到CreateCopy()和Open()接口(用于更新模式)。如果SaleSyk OK创建选项(或OpenSUSER(SuffSeOK Open选项))设置为“是”,则将尝试写入所有0 /NODATA块,从而不分配瓦片/条(如果它已经被分配,则其内容将被0 /NODATA内容替换)。

从GDAL 2.2开始,在SabSeSoK的情况下 not 在Create()和CreateCopy()模式下,对于nodata值未设置或设置为0的未压缩文件(或设置为默认值FALSE),驱动程序将延迟0块的分配,直到文件关闭,以便能够在文件的最末端写入它们,以兼容文件系统稀疏文件机制的方式(与前面讨论的TIFF稀疏文件扩展名不同)。也就是说,从TIFF的角度来看,所有空块都将被视为已正确分配(相应的条带/块将具有有效的偏移量和字节计数),但没有相应的物理存储。前提是文件系统支持这种稀疏文件,这是大多数Linux流行的文件系统(ext2/3/4、xfs、btfs,…)或Windows上的NTFS的情况。如果文件系统不支持稀疏文件,则将分配物理存储并用零填充。

原始模式

对于一些具有“奇数”光度颜色空间的TIFF公式,将动态解码为RGBA。在某些用例中,这可能并不理想。可以通过在文件名前面加上GTIFFu RAW来禁用此行为:

例如,要将CMYK文件转换为另一个文件:

gdal_translate GTIFF_RAW:in.tif out.tif -co PHOTOMETRIC=CMYK

打开选项

  • NUM_THREADS=number_of_threads/ALL_CPUS :(来自gdal2.1)通过指定工作线程的数量来启用多线程压缩。对于像DEFLATE或LZMA这样的慢压缩算法来说是值得的。默认值是主线程中的压缩。

  • GEOREF_SOURCES=string :(GDAL>2.2)定义允许哪些地理参考源及其优先级顺序。见 Georeferencing 段落。

  • SPARSE_OK=TRUE/FALSE (GDAL>2.2):磁盘上应该省略空块吗?设置此选项时,任何试图写入所有像素都为0或nodata值的块的尝试都将导致根本不写入该块(除非文件中已分配了相应的块)。稀疏文件对于从未写入的块有0个平铺/条带偏移量并节省空间;但是,大多数非GDAL包无法读取此类文件。默认值为FALSE。

创建问题

GeoTIFF文件可以使用任何GDAL定义的标注栏类型(包括复杂类型)创建。创建的文件可以有任意数量的标注栏。只有3个波段的Byte类型的文件将获得RGB的光度解释,只有4个波段的Byte类型的文件将获得RGB a的光度解释,而所有其他组合将具有MIN_IS_BLACK的光度解释。从GDAL 2.2开始,非标准(关于intrinsics TIFF功能)波段颜色解释(如BGR排序)将在创建和读取时处理,方法是将它们存储在GDAL内部元数据TIFF标记中。

TIFF格式仅支持调色板/颜色表的R、G、B组件。因此,在写入alpha信息时将被静默地丢弃。

您可能需要阅读提示 generate and read cloud optimized GeoTIFF files

创建选项

  • TFW=YES :强制生成关联的ESRI世界文件(.tfw)。请参见 World Files 详细信息请参见第页。

  • RPB=YES :如果RPC信息可用,则强制生成相关的.RPB文件以描述RPC(有理多项式系数)。如果未指定,则如果存在RPC信息并且配置文件不是默认的GDALGeoTIFF,则会自动生成此文件。

  • RPCTXT=YES :强制生成关联的_RPC.TXT文件描述RPC(有理多项式系数)的文件,如果RPC信息可用。

  • INTERLEAVE=[BAND,PIXEL]: By default TIFF files with pixel interleaving (PLANARCONFIG_CONTIG in TIFF terminology) are created. These are slightly less efficient than BAND interleaving for some purposes, but some applications only support pixel interleaved TIFF files. Starting with GDAL 3.5, when copying from a source dataset with multiple bands which advertises a INTERLEAVE metadata item, if the INTERLEAVE creation option is not specified, the source dataset INTERLEAVE will be automatically taken into account, unless the COMPRESS creation option is specified.

  • TILED=YES :默认情况下,创建条带化TIFF文件。此选项可用于强制创建平铺的TIFF文件。

  • BLOCKXSIZE=n :设置平铺宽度,默认值为256。

  • BLOCKYSIZE=n :设置瓷砖或条带高度。平铺高度默认为256,条带高度默认为8K或更低的值。

  • NBITS=n :从一个小于7位的文件创建一个值。明显的像素类型应该是Byte。也接受n=9…15(UInt16型)和n=17…31(UInt32型)的值。从gdal2.2开始,Float32类型接受n=16来生成半精度浮点值。

  • COMPRESS=[JPEG/LZW/PACKBITS/DEFLATE/CCITTRLE/CCITTFAX3/CCITTFAX4/LZMA/ZSTD/LERC/LERC_DEFLATE/LERC_ZSTD/WEBP/JXL/NONE]: Set the compression to use.

    • JPEG should generally only be used with Byte data (8 bit per channel). Better compression for RGB images can be obtained by using the PHOTOMETRIC=YCBCR colorspace with a 4:2:2 subsampling of the Y,Cb,Cr components.

      Starting with GDAL 3.4, if GDAL is built with its internal libtiff, read and write support for JPEG-in-TIFF compressed images with 12-bit sample is enabled by default (if JPEG support is also enabled), using GDAL internal libjpeg (based on IJG libjpeg-6b, with additional changes for 12-bit sample support). Support for JPEG with 12-bit sample is independent of whether 8-bit JPEG support is enabled through internal IJG libjpeg-6b or external libjpeg (like libjpeg-turbo)

    • CCITTFAX3CCITTFAX4CCITRLE 压缩只能用于1位(NBITS=1)数据

    • LZWDEFLATEZSTD 压缩可以与预测器创建选项一起使用。

    • ZSTD 当使用内部libtiff时,如果GDAL基于libzstd>=1.0构建,或者如果GDAL基于外部libtiff构建并支持zstd,则从GDAL 2.3开始可用。

    • LERC and LERC_DEFLATE are available only when using internal libtiff for GDAL < 3.3.0. Since GDAL 3.3.0, LERC compression is also available when building GDAL against external libtiff >= 4.3.0, built itself against https://github.com/esri/lerc

    • LERC_ZSTD 在以下情况下可用 LERCZSTD 是可用的。

    • JXL is for JPEG-XL, and is only available when using internal libtiff and building GDAL against https://github.com/libjxl/libjxl . JXL compression may only be used alongside INTERLEAVE=PIXEL (the default) on datasets with 4 bands or less.

    • NONE 是默认值。

  • NUM_THREADS=number_of_threads/ALL_CPUS :(来自GDAL2.1)通过指定工作线程数启用多线程压缩。值得缓慢压缩,如放气或LZMA。对于JPEG将被忽略。默认值是主线程中的压缩。

  • PREDICTOR=[1/2/3]: Set the predictor for LZW, DEFLATE and ZSTD compression. The default is 1 (no predictor), 2 is horizontal differencing and 3 is floating point prediction. PREDICTOR=2 is only supported for 8, 16, 32 and 64 bit samples (support for 64 bit was added in libtiff > 4.3.0). PREDICTOR=3 is only supported for 16, 32 and 64 bit floating-point data.

  • DISCARD_LSB=nbits or nbits_band1,nbits_band2,...nbits_bandN :设置要清除的最低有效位数,每个频带可能不同。有损压缩方案最好与PREDICTOR=2和LZW/DEFLATE/ZSTD压缩一起使用。

  • SPARSE_OK=TRUE/FALSE :是否应允许新创建的文件(通过Create()接口)稀疏?对于从未写入的块,稀疏文件的平铺/条带偏移量为0,这样可以节省空间;但是,大多数非GDAL包无法读取此类文件。从gdal2.2开始,CreateCopy()接口也支持SPARSE_OK=TRUE。从gdal2.2开始,即使尝试写入所有像素都为0或nodata值的块,也会导致根本不写入(除非文件中已经分配了相应的块)。默认值为FALSE。

  • [JPEG_QUALITY=[1-100]] :使用JPEG压缩时设置JPEG质量。值100表示最佳质量(最小压缩),值1表示最差质量(最佳压缩)。默认值为75。

  • JPEGTABLESMODE=0/1/2/3 :配置在TIFF JpegTables标记和条带/平铺中写入JPEG量化和哈夫曼表的方式和位置。默认为1。

    • 0:未写入JPEG表。每个条带/平铺包含自己的量化表,并使用优化的哈夫曼编码。

    • 1: JpegTables只使用量化表编写。每个条带/平铺都引用那些量化表,并使用优化的哈夫曼编码。这通常是最小文件大小的最佳选择,因此是默认值。

    • 2: JpegTables只使用默认的Huffman表编写。每个条带/平铺都引用那些哈夫曼表(因此没有优化的哈夫曼编码),并包含自己的量化表(相同)。这一选择没有预期的实际价值。

    • 3: JpegTables是用量化和默认的Huffman表编写的。每个条带/平铺都指那些表(因此没有优化的哈夫曼编码)。这种选择可能在某些数据下比1更有效率,但这种情况只应在极少数情况下发生。

  • [ZLEVEL=[1-9] or [1-12]] :设置使用DEFLATE compression(或LERCu DEFLATE)时的压缩级别。值为9(分别。12) 使用zlib时最好/最慢。libdeflate),1是最小/最快的压缩。默认值为6。

  • [ZSTD_LEVEL=[1-22]] :设置使用ZSTD压缩(或LERC_ZSTD)时的压缩级别。值22是最好的(非常慢),1是最小的压缩。默认值为9。

  • MAX_Z_ERROR=threshold :设置LERC/LERC_DEFLATE/LERC_ZSTD压缩值的最大错误阈值。默认值为0(无损)。

  • [WEBP_LEVEL=[1-100]] :使用WEBP压缩时设置WEBP质量级别。值100表示最佳质量(最小压缩),值1表示最差质量(最佳压缩)。默认值为75。

  • WEBP_LOSSLESS=True/False :(GDAL>=2.4.0和libwebp>=0.1.4):默认情况下,使用有损压缩。如果设置为True,将使用无损压缩。使用无损WebP压缩时,每个磁贴/条带都会有明显的时间损失,因此您可能需要增加条带布局的BLOCKYSIZE值。

  • JXL_LOSSLESS=YES/NO: Set whether JPEG-XL compression should be lossless (YES, default) or lossy (NO). For lossy compression, the underlying data should be either gray, gray+alpha, rgb or rgb+alpha.

  • JXL_EFFORT=[1-9]: Level of effort for JPEG-XL compression. The higher, the smaller file and slower compression time. Default is 5.

  • JXL_DISTANCE=[0.1-15]: Distance level for lossy JPEG-XL compression 0=mathematically lossless, 1.0=visually lossless, usual range [0.5,3]. Default is 1.0

  • [PHOTOMETRIC=[MINISBLACK/MINISWHITE/RGB/CMYK/YCBCR/CIELAB/ICCLAB/ITULAB]] :设置光度学解释标记。默认为miniBlack,但如果输入图像有3或4个字节类型的频带,则将选择RGB。可以使用此选项替代默认光度控制。

  • [ALPHA=[YES/NON-PREMULTIPLIED/PREMULTIPLIED/UNSPECIFIED]] :如果有任何额外样本,则第一个“extrasample”标记为alpha。如果要生成带有alpha带的灰度TIFF文件(例如),这是必需的。是非预乘alpha的别名。

  • [PROFILE=[GDALGeoTIFF/GeoTIFF/BASELINE]] :控制GDAL发出的非基线标记。

    • GDALGeoTIFF (默认)可以编写各种GDAL自定义标记。

    • GeoTIFF 只有GeoTIFF标记将添加到基线。

    • BASELINE 不会写入GDAL或GeoTIFF标记。当编写文件供应用程序读取时,基线有时很有用,因为应用程序不能容忍无法识别的标记。

  • BIGTIFF=YES/NO/IF_NEEDED/IF_SAFER :控制创建的文件是BigTIFF还是classic TIFF。

    • 是的,迫使大人物。

    • 不强迫经典的TIFF。

    • 如果需要,只会在明显需要的情况下创建一个BigTIFF(在未压缩的情况下,图像大于4GB)。所以使用压缩时没有效果)。

    • 如果安全将创建BigTIFF如果结果文件 * 可以 * 超过4GB。注意:这只是一种启发式方法,可能并不总是根据压缩比工作。

    BigTIFF是一种TIFF变体,它可以包含超过4GiB的数据(经典TIFF的大小受该值的限制)。如果GDAL使用libtiff library 4.0或更高版本构建,则此选项可用。默认值为“如果需要”。

    当创建没有压缩的新GeoTIFF时,GDAL会预先计算结果文件的大小。如果计算出的文件大小超过4GiB,GDAL将自动决定创建BigTIFF文件。但是,当使用压缩时,不可能提前知道文件的最终大小,因此将选择经典TIFF。在这种情况下,如果预期最终文件对于经典的TIFF格式来说太大,则用户必须显式地要求创建BigTIFF=YES的BigTIFF。如果未明确询问或猜测big TIFF创建,并且生成的文件对于经典TIFF来说太大,libtiff将失败,并显示错误消息,如“TIFFAppendToStrip:Maximum TIFF file size exceeded”。

  • [PIXELTYPE=[DEFAULT/SIGNEDBYTE]] :通过将其设置为signed Byte,可以强制将新的字节文件写入为SIGNEDBYTE。

  • [COPY_SRC_OVERVIEWS=[YES/NO]] :(仅限CreateCopy())通过将其设置为YES(默认值为NO),源数据集的潜在现有概述将被复制到目标数据集,而无需重新计算。此选项通常用于生成云优化的Geotiff(从GDAL 3.1开始 COG—云优化GeoTIFF生成器 司机可以作为一个方便的捷径)。如果还存在遮罩带的概述,只要将GDAL_TIFF_INTERNAL_mask configuration选项设置为YES,它们也将被复制。请注意,此创建选项将具有 no effect 如果使用了gdal_translate的常规选项(即不是创建选项的选项)。与压缩相关的创建选项也应用于输出概述。

  • [GEOTIFF_KEYS_FLAVOR=[STANDARD/ESRI_PE]] :(GDAL>=2.1.0)确定写入SRS信息必须使用哪个GeoTIFF键的“风格”。标准方法(默认选择)将使用GeoTIFF密钥的通用公式,包括将ProjectedCSTypeGeoKey接受的值扩展到新的EPSG代码。ESRI_PE风味将编写(更)兼容ArcGIS的配方。在撰写本文时,ESRI_PE选择在撰写EPSG:3857(Web Mercator)SRS时主要起作用。对于其他SRS,将使用标准方式,并添加一个ESRI-PE-WKT字符串作为PCSCitationGeoKey的值。

  • [GEOTIFF_VERSION=[AUTO/1.0/1.1]] :(GDAL>=3.1.0)选择用于编码地理参考信息的GeoTIFF标准版本。 1.0 与原件相对应 1995, GeoTIFF Revision 1.0, by Ritter & Ruth . 1.1 与OGC标准19-008相对应,OGC标准是1.0的一个演变,它主要在CRS的垂直部分的处理过程中清除歧义并修复不一致。 AUTO 模式(默认值)通常选择1.0,除非要编码的CRS具有垂直分量或是3D CRS,在这种情况下使用1.1。

    备注

    对GeoTIFF 1.1的编写支持需要libgeotiff1.6.0或更高版本。

子数据集

多页TIFF文件作为子数据集公开。打开时,子数据集的名称是GTIFF目录:{index}:filename.tif,其中{index}从1开始。

从GDAL 3.0开始,可以使用APPEND_subdataset=YES创建选项创建子数据集。传递给Create()/CreateCopy()的文件名应为常规文件名(不使用GTIFF目录:语法)。不支持在多页TIFF上创建概述。

从gdal3.2开始,只要父IFD通过 TIFFTAG_SUBIFD 标签。

关于RGB图像的JPEG压缩

在TIFF中将RGB图像转换为JPEG时,使用“光度学=YCBCR”可以使图像的大小通常比默认光度学值(RGB)小2到3倍。使用光度控制=YCBCR时,交错选项必须保持其默认值(像素),否则libtiff将无法压缩数据。

还要注意,对于光度=RGB,瓷砖或条带的尺寸必须是8的倍数,对于光度=YCBCR,必须是16的倍数

Lossless conversion of JPEG into JPEG-in-TIFF

The conversion of a JPEG file (but not a JPEG-in-TIFF file) to a JPEG-in-TIFF file without decompression and compression cycles, and thus without any additional quality loss, can be done with gdal_translate (or the CreateCopy() API), if all the following conditions are met:

  • the source dataset is a JPEG file (or a VRT with a JPEG as a single SimpleSource)

  • the target dataset is a JPEG-in-TIFF file

  • no explicitly target JPEG quality is specified

  • no change in colorspace is specified

  • no sub-windowing is requested

  • and more generally, no change that alters pixel values

The generation of a tiled JPEG-in-TIFF from the original JPEG image is possible. Explicit assignment of target SRS and bounds are also possible.

So, the following commands will use the lossless copy method :

gdal_translate in.jpg out.tif -co COMPRESS=JPEG

gdal_translate in.jpg out.tif -co COMPRESS=JPEG -co TILED=YES

gdal_translate in.jpg out.tif -co COMPRESS=JPEG -a_srs EPSG:4326 -a_ullr -180 90 180 -90

whereas the following commands will not (and thus cause JPEG decompression and compression):

gdal_translate in.jpg out.tif -co COMPRESS=JPEG -co JPEG_QUALITY=60

gdal_translate in.jpg out.tif -srcwin 0 0 500 500 -co COMPRESS=JPEG

流操作

GeoTIFF驱动程序可以支持以流兼容的方式读取或写入TIFF文件(下面有一些详细的限制)。

当从/vsistdin/、命名管道(在Unix上)读取文件时,或者如果通过将TIFF_READ_STREAMING配置选项设置为YES强制流式读取,GeoTIFF驱动程序将假定TIFF图像文件目录(IFD)位于文件的开头,即对于经典TIFF文件,位于偏移量8处,对于BigTIFF文件,位于偏移量16处。数组类型标记的值必须包含在文件开头、IFD结束之后和第一个图像条带/平铺之前。读卡器必须按照写入文件的顺序读取条带/分幅。对于像素交错文件(PlanarConfiguration=Contig),写入程序的建议顺序,因此对于读卡器,是条带组织文件的自上而下顺序,或者是条带组织文件的自上而下顺序,这是块高度的块,对于平铺组织文件是从左到右顺序。对于带组织的文件(PlanarConfiguration=Separate),建议按上述顺序排列第一个带的内容,然后是第二个带的内容等。。。从技术上讲,此顺序对应于TileOffsets/strippoffsets标记中的偏移量增加。这是GDAL栅格复制例程将采用的顺序。

如果顺序不是上述顺序,则无序块=是数据集元数据项将在TIFF元数据域中设置。每个块偏移量可以通过查询“块偏移量”来确定_ [xblock] [yblock公司] “TIFF元数据域中的带区元数据项(其中xblock、yblock是块的坐标),读取器可以使用该信息来确定图像块的适当读取顺序。

流入GeoTIFF驱动程序的文件可能会被压缩,即使GeoTIFF驱动程序无法在可流式输出模式下生成此类文件(定期创建TIFF文件将生成此类兼容文件以供流式读取)。

在将文件写入/vsistdout/、命名管道(在Unix上)或定义STREAMABLE_OUTPUT=YES创建选项时,GeoTIFF驱动程序的CreateCopy()方法将生成具有上述定义的约束(与IFD的位置和块顺序相关)的文件,而这仅对未压缩的文件支持。Create()方法还支持创建可流式兼容的文件,但编写器在写入图像块之前必须小心设置投影、geotransform或元数据(以便在文件开头写入IFD)。并且在写图像块时,块的顺序必须是上述段落之一,否则将报告错误。

一些例子:

gdal_translate in.tif /vsistdout/ -co TILED=YES | gzip | gunzip | gdal_translate /vsistdin/ out.tif -co TILED=YES -co COMPRESS=DEFLATE

mkfifo my_fifo
gdalwarp in.tif my_fifo -t_srs EPSG:3857
gdal_translate my_fifo out.png -of PNG

注意:并非所有实用程序都与此类输入或输出流操作兼容,甚至那些可能处理此类文件的实用程序也可能无法在所有情况下处理它们,例如,如果由输出文件驱动的读取驱动程序与流输入的块顺序不兼容。

配置选项

本段列出了可设置为更改GTiff驱动程序默认行为的配置选项。

  • GTIFF_IGNORE_READ_ERRORS :可以设置为TRUE,以避免将libtiff错误转换为GDAL错误。可以帮助读取部分损坏的TIFF文件

  • ESRI_XML_PAM :可以设置为TRUE以强制将xml:ESRI域中的元数据写入PAM。

  • COMPRESS_OVERVIEW : See Creation Options COMPRESS section. Set the compression type to use for overviews

  • PHOTOMETRIC_OVERVIEW : YCBCR Set the photometric color space for overview creation

  • PREDICTOR_OVERVIEW : Integer 1,2 or 3. Set the predictor to use for overviews with LZW, DEFLATE and ZSTD compression

  • JPEG_QUALITY_OVERVIEW : Integer between 0 and 100. Default value: 75. Quality of JPEG compressed overviews, either internal or external.

  • WEBP_LEVEL_OVERVIEW : Integer between 1 and 100. Default value: 75. WEBP quality level of overviews, either internal or external.

  • ZLEVEL_OVERVIEW : Integer between 1 and 9 (or 12 when libdeflate is used). Default value: 6. Deflate compression level of overviews, for COMPRESS_OVERVIEW=DEFLATE or LERC_DEFLATE, either internal or external. Added in GDAL 3.4.1

  • ZSTD_LEVEL_OVERVIEW : Integer between 1 and 22. Default value: 9. ZSTD compression level of overviews, for COMPRESS_OVERVIEW=DEFLATE or LERC_ZSTD, either internal or external. Added in GDAL 3.4.1

  • MAX_Z_ERROR_OVERVIEW : Floating-point value. Default value: 0 (lossless) Maximum error threshold on values for LERC/LERC_DEFLATE/LERC_ZSTD compression of overviews, either internal or external. Added in GDAL 3.4.1

  • SPARSE_OK_OVERVIEW :Boolean value. Default value: OFF When set to ON, blocks whose pixels are all at nodata (or 0 if no nodata is defined) will not be written. Added in GDAL 3.4.1

  • GDAL_TIFF_INTERNAL_MASKInternal nodata masks 章节。默认值:FALSE。

  • GDAL_TIFF_INTERNAL_MASK_TO_8BITInternal nodata masks 章节。默认值:真

  • USE_RRD :可以设置为TRUE以强制以RRD格式进行外部概述。默认值:FALSE

  • TIFF_USE_OVR :可以设置为TRUE以强制使用GeoTIFF(.ovr)格式的外部概述。默认值:FALSE

  • GTIFF_POINT_GEO_IGNORE : Can be set to TRUE to revert back to the behavior of ancient GDAL versions regarding how PixelIsPoint is interpreted w.r.t geotransform. See RFC 33:GTiff-固定像素点解释 更多细节。默认值:FALSE

  • GTIFF_REPORT_COMPD_CS :可以设置为TRUE,以避免在读取文件的SRS时剥离复合CRS的垂直CRS。不影响书写。默认值:对于GeoTIFF 1.0文件为FALSE,对于geotiff1.1文件为TRUE(从GDAL 3.1开始)。

  • GDAL_ENABLE_TIFF_SPLIT :可以设置为FALSE,以避免“一体式”条形图文件显示为具有。默认值:真

  • GDAL_TIFF_OVR_BLOCKSIZEOverviews 部分。

  • GTIFF_LINEAR_UNITS :可以设置为“断开”以读取以米为单位的错误东距/北距设置不正确的GeoTIFF文件,而该文件应以坐标系线性单位表示。 (Ticket #3901 ②)

  • TAB_APPROX_GEOTRANSFORM =YES/NO:决定在读取.tab文件时是否可以接受近似地理变换。默认值:否

  • GTIFF_DIRECT_IO =YES/NO:可以设置为YES,以便在读取未压缩的TIFF文件时使用专用的RasterIO()实现(仅在GDAL 2.0中取消平铺,在GDAL 2.1中取消平铺和平铺),以避免使用块缓存。即使优化的案例不适用,将其设置为YES也应该是安全的(将使用通用实现)。违约值:否

  • GTIFF_VIRTUAL_MEM_IO =YES/NO/如果有足够的内存:可以设置为YES,以便在读取未压缩的TIFF文件时使用专门的RasterIO()实现,以避免使用块缓存。此实现依赖于内存映射文件I/O,目前仅在Linux(强烈建议使用64位构建)上受支持,或者从GDAL2.1开始,在其他类似POSIX的系统上受支持。即使优化的情况不适用,将其设置为YES也应该是安全的(将使用通用实现),但是如果文件超过RAM,则在读取整个文件时可能会发生磁盘交换。如果将其设置为“是否有足够的内存”,将首先检查未压缩的文件大小是否不大于物理内存。违约值:否。如果GTIFFu VIRTUALu MEMu IO和GTIFFu DIRECTu IO都已启用,前者优先使用,如果不可能,则尝试后者。

  • GDAL_GEOREF_SOURCES =逗号分隔列表,包含一个或多个PAM、INTERNAL、TABFILE或WORLDFILE。(GDAL>=2.2)。见 Georeferencing 段落。

  • GDAL_NUM_THREADS =线程数/所有CPU:(GDAL>=2.1)通过指定工作线程数启用多线程压缩。值得用于诸如DEFLATE或LZMA之类的慢压缩算法。对于JPEG将被忽略。默认值是主线程中的压缩。注意:此配置选项也适用于GDAL的其他部分(扭曲、网格化等)。

  • GTIFF_WRITE_TOWGS84 =自动/是/否:(GDAL>=3.0.3)。当设置为自动时,如果CRS没有附加EPSG代码,或者附加到CRS的TOWGS84转换与从EPSG代码导入的转换不匹配,则将使用TOWGS843或7参数Helmert转换写入GeogTOWGS84GeoKey。如果设置为“是”,则将始终写入附加到CRS的TOWGS84转换。如果设置为“否”,则在任何情况下都不会写入转换。

也见