GDAL COG 驱动(Cloud Optimized GeoTIFF 生成器)完整指南:从创建选项到文件布局原理

📅 发布时间:2026/10/12 3:07:06
GDAL COG 驱动(Cloud Optimized GeoTIFF 生成器)完整指南:从创建选项到文件布局原理
GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载本指南以 GDAL 3.1 起内置的COGCloud Optimized GeoTIFF栅格驱动为专题系统讲解如何借助gdal_translate、gdalwarp等工具把普通栅格一键转换为面向云端随机读取优化的 GeoTIFF涵盖全部创建选项、重投影与切片方案Tiling Scheme、金字塔策略并深入到文件底层布局与GDAL_STRUCTURAL_METADATA幽灵区ghost area机制。读完本文你将掌握 COG 文件的完整参数语义、压缩与交错INTERLEAVE选型、瓦片对齐技巧以及如何用gdal driver cog validate校验产物是否合规。COG 驱动官方文档见 doc/source/drivers/raster/cog.rst其 C 实现位于 frmts/gtiff/cogdriver.cpp。驱动概览本质是 GTiff 的自动化预处理外壳COG 驱动不支持随机写入本质上是封装了 raster.gtiff 驱动 的生成器它借助 GTiff 的COPY_SRC_OVERVIEWSYES创建选项并自动完成以下预处理参见 cogdriver.cpp 中COGCreateCopy()对GDALCOGCreator的调用若指定了目标 SRS自动执行重投影内部调用 GDAL 重投影/重采样管线若源数据没有金字塔自动生成 overviews影像与 mask 都会生成针对特定压缩类型自动改形输入数据例如选择 JPEG 压缩时RGBA 数据集会被透明转换为 RGB 1-bit maskGTIFF_EXTRA_DUMMY_ALPHA相关逻辑见 cogdriver.cpp。从 GDALRegister_COG() 可以看到驱动注册时声明了长名称 Cloud optimized GeoTIFF generator扩展名为tif/tiff支持从Byte到CFloat64的全部 GDAL 数据类型GDAL_DMD_CREATIONDATATYPES支持GDAL_DCAP_VIRTUALIO虚拟文件系统与坐标纪元GDAL_DCAP_COORDINATE_EPOCHpfnCreateCopy COGCreateCopy自 3.1 起、pfnCreate COGCreate自 3.13 起注册了名为validate的算法gdal driver cog validate用于校验 TIFF 是否为合法 COG。临时文件与磁盘占用通过CreateCopy写入时若需要生成金字塔overviews 会先写入临时数据集随后再搬运进输出文件因此需要约最终文件大小 1/3 的额外存储空间。临时文件的默认放置策略对应源码GetTmpFilename()见 cogdriver.cpp目标文件系统支持随机写、且未设置CPL_TMPDIR配置项时临时文件创建在最终文件同一目录否则如写入/vsicurl/或设置了CPL_TMPDIR改用系统临时目录CPLGenerateTempFilenameSafe。自 GDAL 3.13 起GDALDriver::Create()也可用其实现COGCreate()见 cogdriver.cpp是先创建一个无损压缩的临时 GeoTIFF优先 ZSTD、否则 LZWBLOCKSIZE默认 512、强制BIGTIFFYES因此至少需要最终文件两倍的存储空间若最终 COG 采用有损压缩临时文件需求可能更多。驱动的能力标记按文档与源码 GDALRegister_COG() 可确认支持CreateCopy3.1 起、Create3.13 起支持地理参考写入依赖 GeoTIFF / libgeotiff支持虚拟文件系统GDAL_DCAP_VIRTUALIOYES输出文件在关闭时才真正可见GDAL_DCAP_CREATE_ONLY_VISIBLE_AT_CLOSE_TIMEYES并支持关闭后删除。通用创建选项详解创建选项的完整清单含默认值、取值范围由GDALCOGDriver::InitializeCreationOptionList()动态生成见 cogdriver.cpp其中 COMPRESS 等选项会依据当前 libtiff 实际可用的编解码器动态列出可通过gdalinfo --format COG查看你本地构建的可用取值。BLOCKSIZE瓦片尺寸类型整数默认512必须能被 16 整除源码中 BLOCKSIZE 最小值约束为 128见创建选项列表min128。同时决定瓦片宽与高像素影像、mask、overview 均使用该尺寸分块。INTERLEAVE波段交错方式GDAL 3.11 起取值BAND、PIXEL、TILE默认PIXEL。对应 TIFFPlanarConfiguration的三种组织方式也与 GDAL 数据模型中的 INTERLEAVE 元数据概念一致参见 doc/source/user/raster_data_model.rstPIXELBIPBand Interleaved by Pixel每个空间块对应一个 TIFF tile/strip包含所有波段即 TIFF 术语中的contiguous配置。这是默认方式对某些应用仅支持像素交错 TIFF 的程序是必需项对基于图像的压缩方法如 JPEGPHOTOMETRICYCbCr或 WebP 压缩则是强制要求。GDAL 3.11 之前 COG 只支持 PIXEL。文档给出了CreateCopy时该布局的伪代码按 y→x→j→i→band 的顺序逐像素写所有波段每块一个 tile/strip。BANDBSQBand SeQuential每个空间块按波段拆分为多个 TIFF tile/strip即separate配置。CreateCopy时先写完整第一波段、再写第二波段……伪代码见文档。适合需要高效提取单波段的场景。TILEBIL 风格折中3.11 新增同样使用separate配置但同一空间块的所有波段写完后才写下一块当块高为 1 时即经典 BILBand Interleaved per Line。对数百波段的高光谱数据尤为有用——在空间查询效率与波段部分选取之间取得折中。补充要点见 cogdriver.cpp 与文档GDAL 3.5 起当源数据集多波段且通告了INTERLEAVE元数据时若未显式指定 INTERLEAVE 创建选项将自动沿用源的 INTERLEAVE——除非指定了 COMPRESS。COMPRESS压缩方法类型string-select可选NONE, LZW, JPEG, DEFLATE, ZSTD, WEBP, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA默认LZW自 GDAL 3.4 起此前默认为NONE若构建时无 LZW 则回退NONE见 cogdriver.cpp。可用值由 libtiff 编译期能力决定ZSTD 需要内部 libtiff libzstd≥1.0 或外部 libtiff 带 zstdWEBP 需 libwebp 支持且仅限 INTERLEAVEPIXELLERC 需要内部 libtiffLERC_ZSTD需 LERC 与 ZSTD 同时可用。JPEG一般只用于 8bit/通道的 Byte 数据配合内部 libtifflibjpeg 可读写 12bit JPEG TIFF表现为 NBITS12 的 UInt16。3 或 4 波段影像使用 JPEG 时默认 INTERLEAVEPIXEL 下自动选择PHOTOMETRICYCbCr且 4:2:2 子采样。对于单波段或 3 波段 Alpha 的输入Alpha 波段会被转换为1-bit DEFLATE 压缩的 mask。JXLJPEG-XLGDAL 3.4 起新增需要内部 libtiff 且构建时链接 libjxl仅可用于≤4 波段的数据集。LEVEL压缩级别DEFLATE / ZSTD / LERC_DEFLATE / LERC_ZSTD / LZMA 的压缩级别数值越小压缩越快、体积越大1最快DEFLATE / LZMA9最慢最高压缩率若 libtiff 带 libdeflate 支持可达 12默认6ZSTD22最慢最高压缩率默认9。MAX_Z_ERROR 与 MAX_Z_ERROR_OVERVIEWLERC 容差MAX_Z_ERRORLERC / LERC_DEFLATE / LERC_ZSTD 的值误差阈值默认0无损。MAX_Z_ERROR_OVERVIEW3.8 起overview 上的误差阈值默认继承MAX_Z_ERROR的值。QUALITYJPEG / WEBP 质量默认75100质量最高压缩率最低1质量最差压缩率最高。注意 WEBP 下QUALITY100会自动开启无损模式。JXL 系列选项JPEG-XL 专用JXL_LOSSLESS默认YES无损为NO时底层数据应为 gray / grayalpha / rgb / rgbalpha。JXL_EFFORT1–9默认 5数值越大文件越小、压缩越慢。JXL_DISTANCE0.01–25默认 1.0仅JXL_LOSSLESSNO时生效。单位为恰可察觉差异just-noticeable difference语义见 butteraugli的倍数0 数学无损、1 视觉无损推荐范围 [0.5, 3]。JXL_ALPHA_DISTANCE3.7 起libjxl 0.8.1Alpha 通道的有损距离默认特殊值-1表示与主通道JXL_DISTANCE相同。NUM_THREADS多线程指定压缩时的 worker 线程数默认在主线程压缩也可设为ALL_CPUS。该值同时决定使用TILING_SCHEME或TARGET_SRS时重投影所用的线程数overview 生成自 GDAL 3.2 起同样支持多线程。NBITS亚字节位深3.7 起传入 1–7 生成每样本不足 8 bit 的文件表观类型须为 Byte也接受 9–15UInt16与 17–31UInt3216用于 Float32 生成半精度浮点。PREDICTOR预测器LZW / DEFLATE / ZSTD 压缩的预测器默认NOYES整数数据用标准预测器Predictor2浮点数据用浮点预测器Predictor3某些情况下标准预测器对浮点数据反而更优STANDARD/FLOATING_POINT精确指定 Predictor2 / 3。源码映射逻辑见GetPredictor()cogdriver.cpp。BIGTIFF控制创建 BigTIFF 还是经典 TIFF可选YES/NO/IF_NEEDED/IF_SAFER默认IF_NEEDED需要 libtiff ≥ 4.0YES强制 BigTIFFNO强制经典 TIFFIF_NEEDED仅在无压缩且影像 4GB时创建 BigTIFF压缩时无影响IF_SAFER结果文件可能超过 4GB 时创建启发式不保证准确。关键细节无压缩时 GDAL 可预估文件大小并自动升级 BigTIFF有压缩时无法预知最终大小因此默认会选经典 TIFF——若预计文件超 4GB 必须显式BIGTIFFYES否则 libtiff 会报错TIFFAppendToStrip:Maximum TIFF file size exceeded。RESAMPLING / OVERVIEW_RESAMPLING / WARP_RESAMPLING重采样RESAMPLINGoverview 生成或重投影时使用的重采样方法可选NEAREST, AVERAGE, BILINEAR, CUBIC, CUBICSPLINE, LANCZOS, MODE, RMS调色板影像默认 NEAREST否则默认 CUBIC源码GetResampling()见 cogdriver.cpp。OVERVIEW_RESAMPLING3.2 起overview 专用的重采样方法额外支持GAUSS, AVERAGE_MAGPHASE覆盖RESAMPLING中用于 overview 的部分。WARP_RESAMPLING3.2 起重投影专用额外支持MIN, MAX, MED, Q1, Q3覆盖RESAMPLING中用于重投影的部分。OVERVIEWS金字塔行为可选AUTO默认/IGNORE_EXISTING/FORCE_USE_EXISTING/NONEAUTO源有 overviews 则使用没有则自动生成到输出文件IGNORE_EXISTING忽略源 overviews强制重新生成FORCE_USE_EXISTING强制使用源 overviews若源没有等价于NONENONE忽略源 overviews 且不生成。注意使用gdal_translate且应用了非创建选项如子集裁剪时源 overviews 将不可用见文档说明。OVERVIEW_COUNT金字塔层数3.6 起控制 COG 中金字塔层数当 GDAL 从全分辨率自行计算金字塔无源 overview 或OVERVIEWSIGNORE_EXISTING时可增/减层数在AUTO/FORCE_USE_EXISTING模式下可减少从源复制的层数。未指定时自动模式沿用源全部 overviews自行生成时默认使最小一级 overview 的尺寸 ≤ BLOCKSIZE。OVERVIEW_COMPRESS / OVERVIEW_QUALITY / OVERVIEW_PREDICTOR金字塔的压缩、质量与预测器可独立控制OVERVIEW_COMPRESS可选值与COMPRESS相同默认AUTO与主影像同压缩OVERVIEW_QUALITYJPEG/WEBP 质量默认与主影像相同若压缩类型不同则默认 75OVERVIEW_PREDICTOR默认与主影像相同若压缩类型不同则默认NO。对应测试示例见 autotest/gcore/cog.pyCOMPRESSLZWOVERVIEW_COMPRESSJPEGOVERVIEW_QUALITY50时主影像为 LZW、overview 为 JPEG。GEOTIFF_VERSION3.x选择编码地理参考信息的 GeoTIFF 标准版本1.01995 原始规范或1.1OGC 19-008澄清了 1.0 的歧义主要修正 CRS 垂直部分处理。默认AUTO一般选 1.0但当 CRS 带垂直分量或是 3D CRS 时选 1.1。写入 1.1 需要 libgeotiff ≥ 1.6.0源码中该选项受LIBGEOTIFF_VERSION 1600条件编译保护见 cogdriver.cpp。SPARSE_OK稀疏文件3.2 起默认FALSE。为TRUE时全 0 或全为 nodata 的块将不写入磁盘除非文件里已存在对应块对应块的 tile/strip 偏移为 0可显著节省空间——但大多数非 GDAL 软件无法读取这种稀疏文件。此外在读取侧非空块之后出现被省略的块可能迫使优化读取器额外发起一次 GET 请求获取 TileByteCounts 数组。STATISTICS统计信息3.8 起AUTO默认/YES/NO是否把波段统计信息写入输出文件。AUTO仅在源数据已含统计信息时写入。重投影相关创建选项TILING_SCHEME瓦片矩阵方案默认CUSTOM。设置为其他值时COG 驱动会按该方案定义的 CRS重投影数据集选择与数据分辨率最接近的zoom level可用ZOOM_LEVEL/ZOOM_LEVEL_STRATEGY精确控制在该分辨率下对齐到瓦片边界。瓦片尺寸默认取方案定义值通常 256但若用户显式指定BLOCKSIZE256 时会以用户值为准——相当于为 HiDPI 瓦片修改了原始方案。非 CUSTOM 模式下TARGET_SRS、RES、EXTENT选项会被忽略源码COGGetWarpingCharacteristics()中会发出 Ignoring TARGET_SRS/EXTENT/RES option 警告见 cogdriver.cpp。从 GDAL 3.2 起TILING_SCHEME还可以是符合OGC Two Dimensional Tile Matrix Set 标准的 JSON 文件路径、该文件的 URL、GDAL data 目录中定义文件的根名如FOO对应tms_FOO.json或内联 JSON 定义。内置与预设方案代码 tilematrixset.cpp 的listPredefinedTileMatrixSets()声明了GoogleMapsCompatible、WorldCRS84Quad、WorldMercatorWGS84Quad、GoogleCRS84Quad、PseudoTMS_GlobalMercator以及隐藏的GlobalGeodeticOriginLat270此外会扫描 GDAL data 目录下的tms_*.json文件。当前仓库gcore/data/中即带有 tms_LINZAntarticaMapTileGrid.json、tms_MapML_APSTILE.json、tms_MapML_CBMTILE.json、tms_NZTM2000.json 等定义。可用方案列表可通过gdalinfo --format COG查看。对TILING_SCHEME的解析在gdal::TileMatrixSet::parse()中完成tilematrixset.cpp要求所有 zoom level 具有相同 top-left 角与相同瓦片尺寸、且矩阵宽度固定否则 COG 驱动会报错见 cogdriver.cpp。ZOOM_LEVEL3.5 起与 ZOOM_LEVEL_STRATEGY3.2 起ZOOM_LEVEL指定 zoom 编号0 为最粗级别仅TILING_SCHEME ! CUSTOM时生效指定后ZOOM_LEVEL_STRATEGY被忽略。越界值会报 Invalid zoom levelcogdriver.cpp。ZOOM_LEVEL_STRATEGYAUTO默认选最接近的 zoom level/LOWER选理论非整数层级下方的层级导致子采样/UPPER选上方的层级导致过采样。源码中当计算分辨率与候选层级差超过 1e-8 相对误差时按此策略调整cogdriver.cpp。TARGET_SRS / RES / EXTENTTARGET_SRS强制把输入重投影到目标 SRS接受 WKT 字符串、EPSG:XXXX或 PROJ 字符串。RES目标分辨率单位为目标 SRS 的单位仅与TARGET_SRS同时指定时生效。EXTENT目标范围格式minx,miny,maxx,maxy单位同TARGET_SRS仅与TARGET_SRS同时指定时生效。源码解析见 cogdriver.cpp。ALIGNED_LEVELS层级对齐指定有多少个分辨率级别的 GeoTIFF 瓦片与 tiling scheme 的瓦片精确匹配指定时会在目标栅格左侧和顶部按需添加 padding 瓦片。仅TILING_SCHEME ! CUSTOM时生效且只有设为 ≥2 才有可见效果全分辨率级别默认已对齐。相邻 zoom 分辨率差 2 倍的方案下最多可在每个维度增加 2^(ALIGNED_LEVELS-1) 个瓦片驱动强制硬上限为 10。源码使用 60 的魔法除数对分辨率比值进行整数化对齐见 cogdriver.cpp。ADD_ALPHA默认YES重投影时是否追加 Alpha 波段。重投影可能使边缘出现空洞Alpha 波段可标记无效像素。更新Update行为的限制直接更新update 模式打开一个 COG 文件通常会破坏部分优化布局但仍会生成合法 GeoTIFF。因此自 GDAL 3.8 起若未显式设置IGNORE_COG_LAYOUT_BREAK打开选项为YES以更新模式打开 COG 文件会被拒绝。对应的打开时检查在 frmts/gtiff/gtiffdataset_read.cpp检测到LAYOUTIFDS_BEFORE_DATA等优化标记且以GA_Update打开、又未设该选项时直接报错关闭。另有一部分操作允许在只读模式下进行例如元数据编辑含统计信息存储这些会写入旁侧的.aux.xml文件。文件格式细节高层次的 COG 特征一个 Cloud Optimized GeoTIFF 具备以下特征文档 High level 一节TIFF 或 BigTIFF 文件影像、mask、overview 均分块tiled默认 512×512生成 overviews 直到最小一级 overview 的最大维度低于 512 像素可压缩或不压缩多波段数据集使用像素交错PIXEL interleaving对 TIFF 各 section 的布局做了优化使随机读取的读者所需的 GET 请求数最少。文件格式细节底层布局Low level以下布局要求 libtiff ≥ 4.0.11 或使用 GDAL 内部 libtiff其他版本布局不同、部分优化不可用。文档 Low level 一节给出了完整的字节级组织顺序TIFF/BigTIFF 头/签名及指向首个 IFD 的指针含 COG 优化的ghost area见下文全分辨率影像的 IFD 及其标签值不含TileOffsets / TileByteCounts 数组全分辨率影像 mask 的 IFD如有第一个尺寸最大overview 级别的 IFD如有……直至最后一个最小overview 级别的 IFD第一个 overview 级别 mask 的 IFD如有……直至最后一个 mask overview 的 IFD上述各 IFD 的 TileOffsets 与 TileByteCounts 数组最小 overview 的瓦片数据如有每个瓦片后紧跟对应 mask 瓦片每个瓦片带 leader/trailer 字节……直至最大 overview 的瓦片数据与 mask 数据交错全分辨率影像的瓦片数据与对应 mask 数据交错。这样的顺序保证优化读取器先拿到所有 IFD 与索引数组再顺序获取瓦片数据从而把随机 GET 请求数量降到最低。Header ghost area文件头幽灵区为了描述 COG 文件的特殊布局文件开头经典 TIFF 前 8 字节之后、BigTIFF 前 16 字节之后会隐藏一段 ASCII 字符串——即 ghost area之后才是首个 IFD。TIFF 规范允许这种幽灵区存在普通读取器会直接跳过。带透明 mask 的 COG 文件其内容为GDAL_STRUCTURAL_METADATA_SIZE000174 bytes LAYOUTIFDS_BEFORE_DATA BLOCK_ORDERROW_MAJOR BLOCK_LEADERSIZE_AS_UINT4 BLOCK_TRAILERLAST_4_BYTES_REPEATED KNOWN_INCOMPATIBLE_EDITIONNO MASK_INTERLEAVED_WITH_IMAGERYYES细节约定见文档 note各字符串以\n分隔KNOWN_INCOMPATIBLE_EDITIONNO行后的换行后插入一个空格无 mask 的 COG 自然没有MASK_INTERLEAVED_WITH_IMAGERY项起始行GDAL_STRUCTURAL_METADATA_SIZEXXXXXX bytes\n固定 43 字节其中 XXXXXX 为 6 位数字表示该行换行符之后剩余段的大小。各标记语义LAYOUTIFDS_BEFORE_DATAIFD 位于文件开头GDAL 还会保证瓦片索引数组紧跟在 IFD 之后、影像数据之前使首次 16KB 范围请求即可取到全部 IFD。BLOCK_ORDERROW_MAJORstrilestrip 或 tile 的缩称数据按瓦片 id 递增顺序写入未来可能支持其他布局。BLOCK_LEADERSIZE_AS_UINT4每个瓦片数据前有 4 字节同样位于 ghost 区小端序整数表示瓦片真实大小。BLOCK_TRAILERLAST_4_BYTES_REPEATED瓦片数据后紧跟着其最后 4 字节的重复。作用是让优化读取器能检测不了解这些优化的 TIFF 写入器是否修改破坏了优化检测到不一致时可回退到常规的TileOffsets[i] TileByteCounts[i]慢速读取。KNOWN_INCOMPATIBLE_EDITIONNOCOG 生成时总是写入。若之后 GDAL 修改了该文件大部分修改会破坏优化结构GDAL 会将其改为YES并在写入与重开时发出警告。MASK_INTERLEAVED_WITH_IMAGERYYESmask 数据紧跟在影像数据之后。读取器在offsetTileOffset[i]-4、sizeTileOffset[i1]-TileOffset[i]4范围内一次取回影像 leader 影像数据 影像 trailer mask leader mask 数据 mask trailer。仅在 INTERLEAVEPIXEL 时写入。INTERLEAVEBAND或INTERLEAVETILEGDAL ≥ 3.11反映INTERLEAVE创建选项的值缺省即意味着 PIXEL。可通过GetMetadataItem(GDAL_STRUCTURAL_METADATA, TIFF)从数据集对象直接取回该幽灵区内容。GTiff 读取端正是靠解析这些标记来开启优化读取路径的frmts/gtiff/gtiffdataset_read.cpp并将LAYOUTCOG写入IMAGE_STRUCTURE域。瓦片数据的 leader 与 trailer每个瓦片数据前紧邻 4 字节小端序无符号整数 leader表示其后 payload 的字节数。leader 是幽灵性质的TileOffsets[]数组不指向它而是指向真正的 payload故 leader 偏移为TileOffsets[i]-4。INTERLEAVEPIXEL 或 TILE优化读取器看到BLOCK_LEADERSIZE_AS_UINT4后会用TileOffset[i]与TileOffset[i1]推断应取offsetTileOffset[i]-4, sizeTileOffset[i1]-TileOffset[i]4的数据再核对 leader 中声明的大小与区间长度是否一致。无 mask 时二者应相等扣除 leader/trailer 所占字节有 mask 且MASK_INTERLEAVED_WITH_IMAGERYYES时 leader 声明的大小 区间长度因为 mask 数据跟在影像数据之后。INTERLEAVEBAND上述规则同样成立但瓦片 i 的后继不是i1而是inTilesPerBand每波段瓦片数。每个瓦片数据后紧跟 trailerpayload 最后 4 字节的重复其大小不计入 TileByteCounts[]。测试验证autotest/gcore/cog.py的test_cog_write_interleave_with_maskcog.py会逐一校验瓦片在文件中的物理顺序校验脚本 validate_cloud_optimized_geotiff.py 也实现了对 leader 大小与 trailer 字节的完整检查full_check_band()中读取offset-4处的 4 字节并比对BLOCK_SIZE。实操示例示例 1用 gdalwarp 生成 COG$ gdalwarp src1.tif src2.tif out.tif -of COG多个输入影像拼接/融合后直接输出为 COG需多源数据时注意 COG 驱动要求源数据集输入这正是CreateCopy语义。示例 2Web Mercator COG Google Maps 兼容切片 JPEG 压缩$ gdal_translate world.tif world_webmerc_cog.tif -of COG \ -co TILING_SCHEMEGoogleMapsCompatible -co COMPRESSJPEG该命令把任意投影的影像重投影到GoogleMapsCompatibleEPSG:3857 Web Mercator瓦片矩阵并按最接近的 zoom level 对齐瓦片边界再以 JPEGYCbCr、4:2:2压缩——这正是地图瓦片服务XYZ 风格直接消费的 COG 形态。GoogleMapsCompatible的完整定义见gdal::TileMatrixSet::parse()的内置处理gcore/tilematrixset.cpp。示例 3用 SPARSE_OK 生成空白GeoTIFF3.x 新增的 gdal raster create 语法$ gdal raster create --like in.tif out.tif --of COG \ --co SPARSE_OKON \ --overwrite借助SPARSE_OK创建与输入具有相同地理参考与分块方式、但不实际写入零填充瓦片的空文件。文档给出的实例输入尺寸7640 × 8133输出仅约4 KB若完整写零填充瓦片约需 242 MB。注意稀疏 GeoTIFF 不受非 GDAL 软件广泛支持。校验 COGgdal driver cog validate判断一个 TIFF 是否为合法 COG可用 3.13 引入的校验算法源码实现为COGValidateAlgorithmcogdriver.cpp官方说明见 doc/source/programs/gdal_driver_cog_validate.rst$ gdal driver cog validate [--full-check auto|yes|no] file.tif--full-check是否执行逐瓦片校验 leader/trailer 字节的深度检查auto默认对本地文件执行、对远程文件不执行远程文件逐瓦片校验代价过高。该命令需要GDAL Python 绑定可用实现会内嵌调用osgeo_utils.samples.validate_cloud_optimized_geotiff即 swig/python/gdal-utils/osgeo_utils/samples/validate_cloud_optimized_geotiff.py。返回码非 0 表示校验失败COG 结构不合规。更轻量的校验方式打开文件后检查IMAGE_STRUCTURE元数据域中的LAYOUTCOG自动化测试test_cog_basic即如此断言见 autotest/gcore/cog.py并比对GDAL_STRUCTURAL_METADATATIFF 域中LAYOUTIFDS_BEFORE_DATA等标记。参考与延伸doc/source/drivers/raster/cog.rst本文依据的官方驱动文档doc/source/drivers/raster/gtiff.rst底层 GeoTIFF 驱动COPY_SRC_OVERVIEWS等机制doc/source/programs/gdal_driver_cog_validate.rstgdal driver cog validate用法doc/source/user/raster_data_model.rstINTERLEAVEBIP/BSQ/BIL数据模型说明frmts/gtiff/cogdriver.cppCOG 驱动核心实现GDALCOGCreator、COGCreateCopy、COGCreate、GDALRegister_COGfrmts/gtiff/gtiffdataset_read.cppCOG 布局标记解析与更新拒绝逻辑gcore/tilematrixset.cppTileMatrixSet解析与预定义方案gcore/datatms_*.json瓦片矩阵集定义文件autotest/gcore/cog.pyCOG 驱动的自动化测试集swig/python/gdal-utils/osgeo_utils/samples/validate_cloud_optimized_geotiff.pyCOG 结构校验器实现。此外如果源数据集本身已是内部分块、地理参考与压缩均满足要求的 GeoTIFF那么使用专门的cogger工具配合gdaladdo生成金字塔通常比 COG 驱动快得多——COG 驱动适合一步到位的自动化转换场景。赞分享GIS遥感数据工程【免费下载链接】gdalGDAL is an open source MIT licensed translator library for raster and vector geospatial data formats.项目地址https://gitcode.com/gh_mirrors/gd/gdal点击查看免费下载相关推荐免费开源数据集大全指南30主题900免费开源数据集大全指南30主题900 开始新项目时你是否曾为找一份靠谱的数据卡住两小时Awesome Public Datasets 是一份按主题整理文档知识库数据集MotionDiffuse文本驱动人体动作生成终极指南从原理到实战完整教程MotionDiffuse文本驱动人体动作生成终极指南从原理到实战完整教程 MotionDiffuse是一个基于扩散模型的文本驱动人体动作生成工具能够将自然AnyPixel.js硬件设计文件解读从原理图到PCB布局的完整指南AnyPixel.js硬件设计文件解读从原理图到PCB布局的完整指南 AnyPixel.js是一个让任何人都能轻松构建独特显示的web友好框架其硬件设计文件前端后端IoT/嵌入式硬件开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考