COG—云优化GeoTIFF生成器

3.1 新版功能.

司机简称

COG

Driver built-in by default

This driver is built-in by default

此驱动程序支持创建云优化GeoTIFF(COG)

它基本上依赖于 GTiff—GeoTIFF文件格式COPY_SRC_OVERVIEWS=YES 创建选项,但如果尚未完成,则自动执行所需的预处理阶段(如果要求,则重新投影,并创建有关图像和/或遮罩的概述),并在使用某些压缩类型时将输入数据集变形为预期形式(例如,选择JPEG压缩时,RGBA数据集将透明地转换为RGB+掩码数据集)

驱动程序功能

Supports CreateCopy()

This driver supports the GDALDriver::CreateCopy() operation

Supports Georeferencing

This driver supports georeferencing

Supports VirtualIO

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

创建选项

常规创建选项

  • BLOCKSIZE=n :以像素为单位设置平铺宽度和高度。默认为512。

  • COMPRESS=[NONE/LZW/JPEG/DEFLATE/ZSTD/WEBP/LERC/LERC_DEFLATE/LERC_ZSTD/LZMA]: Set the compression to use. Defaults to LZW starting with GDAL 3.4 (default in previous version is NONE).

    • JPEG should generally only be used with Byte data (8 bit per channel). But if GDAL is built with internal libtiff and libjpeg, it is possible to read and write TIFF files with 12bit JPEG compressed TIFF files (seen as UInt16 bands with NBITS=12). See the "8 and 12 bit JPEG in TIFF" wiki页面了解更多详细信息。对于COG驱动程序,3或4波段图像的JPEG压缩自动选择光度=YCBCR颜色空间,Y、Cb、Cr分量的子采样为4:2:2。

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

    • ZSTD 在使用内部libtiff和针对libzstd>=1.0构建的GDAL,或针对具有zstd支持的外部libtiff构建的GDAL时可用。

    • LERC 使用内部libtiff时可用。

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

  • LEVEL=integer_value: DEFLATE/ZSTD/LERC_DEFLATE/LERC_ZSTD/LZMA compression level. A lower number will result in faster compression but less efficient compression rate. 1 is the fastest.

    • For DEFLATE/LZMA, 9 is the slowest/higher compression rate (or 12 when using a libtiff with libdeflate support). The default is 6.

    • 对于最慢的压缩率,ZSTD/ZSTD更高。默认值为9。

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

  • QUALITY=integer_value :JPEG/WEBP质量设置。值100表示最佳质量(最小压缩),值1表示最差质量(最佳压缩)。默认值为75。对于WEBP,QUALITY=100会自动打开无损模式。

  • NUM_THREADS=number_of_threads/ALL_CPUS :通过指定工作线程数启用多线程压缩。默认值是主线程中的压缩。这也决定了当使用TILINGu SCHEME或TARGETu SRS创建选项完成重投影时使用的线程数。(自gdal3.2以来,概览生成也是多线程的)

  • [PREDICTOR=[YES/NO/STANDARD/FLOATING_POINT]] :设置LZW、DEFLATE和ZSTD压缩的预测值。默认值为“否”。如果指定“是”,则整数数据类型使用标准预测器(预测器=2),浮点数据类型使用浮点预测器(预测器=3)(在某些情况下,标准预测器在浮点数据上的性能可能优于浮点预测器)。标准或浮点也可用于选择所需的精确算法。

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

    • YES 强迫大人物。

    • NO 强制经典的TIFF。

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

    • IF_SAFER 如果生成的文件 * 可以 * 超过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”。

  • [RESAMPLING=[NEAREST/AVERAGE/BILINEAR/CUBIC/CUBICSPLINE/LANCZOS]] :用于生成或重新投影概述的重新采样方法。对于调色板图像,默认情况下使用“最近”,否则为立方体。

  • [OVERVIEW_RESAMPLING=[NEAREST/AVERAGE/BILINEAR/CUBIC/CUBICSPLINE/LANCZOS]] :(自GDAL 3.2以来)用于生成概述的重采样方法。对于调色板图像,默认情况下使用“最近”,否则为立方体。为生成概述,此操作将覆盖 RESAMPLING 如果有规定。

  • [WARP_RESAMPLING=[NEAREST/AVERAGE/BILINEAR/CUBIC/CUBICSPLINE/LANCZOS]] :(自GDAL 3.2)重投影使用的重采样方法。对于调色板图像,默认情况下使用“最近”,否则为立方体。对于重投影,这将覆盖 RESAMPLING 如果有规定。

  • [OVERVIEWS=[AUTO/IGNORE_EXISTING/FORCE_USE_EXISTING/NONE]] :描述有关概述生成和使用源概述的行为。

    • AUTO (默认):如果存在,将使用源概述(即使最小级别的维度不小于512像素),如果不存在,将在输出文件中自动生成概述。

    • IGNORE_EXISTING :将忽略源数据集上潜在的现有概述,并自动生成新的概述。

    • FORCE_USE_EXISTING :将使用源的潜在现有概述(即使最小级别的维度不小于512像素)。如果没有源代码概述,这相当于指定 NONE .

    • NONE :将忽略潜在的源概述,并且不会生成概述。

      备注

      使用gdal_translate实用程序时,如果使用常规选项(即不是创建选项的选项,如子设置等),则源概述将不可用。

  • OVERVIEW_COMPRESS=[AUTO/NONE/LZW/JPEG/DEFLATE/ZSTD/WEBP/LERC/LERC_DEFLATE/LERC_ZSTD/LZMA]: Set the compression method (see COMPRESS) to use when storing the overviews in the COG.

    By default (AUTO) the overviews will be created with the same compression method as the COG.

  • OVERVIEW_QUALITY=integer_value: JPEG/WEBP quality setting. A value of 100 is best quality (least compression), and 1 is worst quality (best compression). By default the overviews will be created with the same quality as the COG, unless the compression type is different then the default is 75.

  • OVERVIEW_PREDICTOR=[YES/NO/STANDARD/FLOATING_POINT]: Set the predictor for LZW, DEFLATE and ZSTD overview compression. By default the overviews will be created with the same predictor as the COG, unless the compression type of the overview is different, then the default is NO.

  • [GEOTIFF_VERSION=[AUTO/1.0/1.1]] :选择用于编码地理参考信息的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或更高版本。

  • SPARSE_OK=TRUE/FALSE (GDAL >= 3.2): Should empty blocks be omitted on disk? When this option is set, any attempt of writing a block whose all pixels are 0 or the nodata value will cause it not to be written at all (unless there is a corresponding block already allocated in the file). Sparse files have 0 tile/strip offsets for blocks never written and save space; however, most non-GDAL packages cannot read such files. On the reading side, the presence of a omitted tile after a non-empty one may cause optimized readers to have to issue an extra GET request to the TileByteCounts array. The default is FALSE.

文件格式详细信息

高水平

云优化GeoTIFF具有以下特征:

  • TIFF或BigTIFF文件

  • 图像、遮罩和俯视图的平铺(默认为512像素)

  • 概述,直到最小概述级别的最大维度低于512像素。

  • 是否压缩

  • 多波段数据集的像素交织

  • 优化TIFF节的布局,以最小化执行随机读取访问的读卡器所需的GET请求数。

低水平

COG文件的组织如下(如果使用libtiff>=4.0.11或GDAL internal libtiff)。对于其他版本,布局将不同,某些优化将不可用)。

  • TIFF/BigTIFF头/签名和指向第一个IFD(图像文件目录)的指针

  • 使用COG优化的“重影区域”(请参见 Header ghost area

  • 全分辨率图像的IFD,后跟TIFF标记值,不包括tileoffset和TileByteCounts数组。

  • 全分辨率图像掩码的IFD(如果存在),后跟TIFF标记值,不包括tileoffset和TileByteCounts数组。

  • 第一个(尺寸最大)概述级别的IFD(如果存在)

  • 最后(最小)概览级别的IFD(如果存在)

  • 遮罩的第一个(尺寸最大)概述级别的IFD(如果存在)

  • 面具最后(最小)概览级别的IFD(如果存在)

  • tileOffset和TileByteCounts以上IFD的数组

  • 最小概览的平铺数据(如果存在)(每个平铺后面跟着相应的遮罩数据平铺,如果存在) leader and trailer bytes

  • 最大概览的平铺数据(如果存在)(如果存在,则与掩码数据交错)

  • 全分辨率图像的平铺数据(如果存在)(如果存在,则与相应的遮罩数据交错)

头部重影区

To describe the specific layout of COG files, a description of the features used is located at the beginning of the file, so that optimized readers (like GDAL) can use them and take shortcuts. Those features are described as ASCII strings "hidden" just after the 8 first bytes of a ClassicTIFF (or after the 16 first ones for a BigTIFF). That is the first IFD starts just after those strings. It is completely valid to have ghost areas like this in a TIFF file, and readers will normally skip over them. So for a COG file with a transparency mask, those strings will be:

GDAL_STRUCTURAL_METADATA_SIZE=000174 bytes
LAYOUT=IFDS_BEFORE_DATA
BLOCK_ORDER=ROW_MAJOR
BLOCK_LEADER=SIZE_AS_UINT4
BLOCK_TRAILER=LAST_4_BYTES_REPEATED
KNOWN_INCOMPATIBLE_EDITION=NO
MASK_INTERLEAVED_WITH_IMAGERY=YES

备注

  • 换行符 \n 用于分隔这些字符串。

  • 在下列换行符后插入空格字符 KNOWN_INCOMPATIBLE_EDITION=NO

  • 对于一个没有面具的齿轮 MASK_INTERLEAVED_WITH_IMAGERY 物品当然不会出现。

鬼区从 GDAL_STRUCTURAL_METADATA_SIZE=XXXXXX bytes\n 表示行的起始字节数(其中,行的起始字节数为xxxxx6)。

  • LAYOUT=IFDS_BEFORE_DATA :ifd位于文件的开头。GDAL还将确保tile索引数组是在ifd之后和图像之前写入的,因此16kb的第一个范围请求将始终获得所有ifd

  • BLOCK_ORDER=ROW_MAJOR :(strile是“strip或tile”的缩写)tile的数据按tile id的递增顺序写入。未来的增强可能实现其他布局。

  • BLOCK_LEADER=SIZE_AS_UINT4 :在 区域,指示实际的平铺大小(以小的尾数顺序)。见 Tile data leader and trailer 了解更多详细信息。

  • BLOCK_TRAILER=LAST_4_BYTES_REPEATED :就在平铺数据之后,重复平铺数据的最后4个字节。见 Tile data leader and trailer 了解更多详细信息。

  • KNOWN_INCOMPATIBLE_EDITION=NO :生成COG时,始终写入COG。如果使用GDAL修改COG文件,就像对现有COG文件所做的大多数更改一样,会破坏优化的结构,GDAL会将此元数据项更改为KNOWN_INCOMPATIBLE_EDITION=YES,并在写入和重新打开此类文件时发出警告,以便用户知道 破碎的 他们的齿轮文件

  • MASK_INTERLEAVED_WITH_IMAGERY=YES :表示遮罩数据紧跟图像数据。所以当读取偏移量为TileOffset的数据时 [i] -4和大小=平铺偏移 [i+1] -平铺偏移 [i] +4,你会得到一个缓冲区:

    • 带图像平铺大小的引线(4字节)

    • 图像数据(从TileOffset开始 [i] 大小为TileByteCounts [i] )

    • 图像尾部(4字节)

    • 带掩码平铺大小的引线(4字节)

    • 掩码数据(从mask.TileOffsets文件 [i] 大小不一掩码.TileByteCounts [i] ,但实际上不需要阅读它们)

    • 掩码数据的尾部(4字节)

备注

可以通过获取 GDAL_STRUCTURAL_METADATA 的元数据项 TIFF datasett对象上的元数据域(使用GetMetadataItem())

平铺数据引线和尾部

每个平铺数据前面紧跟着一个前导符,前导符由一个无符号的4字节整数组成,以小尾数顺序排列,给出 有效载荷 后面的平铺数据。这个领导是 从某种意义上说,平铺偏移 []数组不指向它,而是指向真正的负载。因此,引线的偏移量是tileoffset[i] -4.

一个优化的读者看到 BLOCK_LEADER=SIZE_AS_UINT4 因此,元数据项将查找TileOffset [i] 和TileOffset [i+1] 要推断它必须从offset=TileOffset开始获取数据 [i] -4和大小=TileOffset [i+1] -平铺偏移 [i] +四。然后它检查前4个字节,看这个引导标记中的大小是否与TileOffset一致 [i+1] -平铺偏移 [i] . 当没有遮罩时,它们通常应该相等(与BLOCK_LEADER和BLOCK_TRAILER所取的大小成模数)。如果有一个遮罩,并且遮罩与图像交错=是,则引线中指示的平铺大小将小于TileOffset [i+1] -平铺偏移 [i] 因为遮罩的数据将跟随图像数据(请参见遮罩与图像交错=是)

每个磁贴数据后面紧跟着一个尾部,由磁贴数据有效负载的最后4个字节的重复组成。这个拖车的尺寸是 not 包含在TileBytes计数中 [] array. The purpose of this trailer is forces readers to be able to check if TIFF writers, not aware of those optimizations, have modified the TIFF file in a way that breaks the optimizations. If an optimized reader detects an inconsistency, it can then fallbacks to the regular/slower method of using TileOffsets[i] +颚化字节计数 [i] .

实例

gdalwarp src1.tif src2.tif out.tif -of COG
gdal_translate world.tif world_webmerc_cog.tif -of COG -co TILING_SCHEME=GoogleMapsCompatible -co COMPRESS=JPEG

也见