GDAL 3.11 新命令 `gdal driver gti create` 完全指南:为 GTI 驱动构建高性能栅格瓦片索引

发布时间:2026/10/12 1:28:08
GDAL 3.11 新命令 `gdal driver gti create` 完全指南:为 GTI 驱动构建高性能栅格瓦片索引
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.11 新增的gdal driver gti create命令讲解如何为 GDAL Tile IndexGTI驱动生成兼容的矢量瓦片索引与可选的.gtiXML 包装文件。读完本文你将掌握该命令全部选项的语义与默认值、层元数据项与 XML 元素的对应关系并能直接照搬文中的示例命令在 GeoPackage / FlatGeoBuf / PostGIS 等格式上搭建可容纳数十万瓦片的虚拟镶嵌数据集。命令概述gdal driver gti create是什么gdal driver gti create关联文档.. versionadded:: 3.11会创建一个矢量数据集针对每一个输入栅格文件生成一条要素记录包含一个保存文件名的属性字段以及一个勾勒该栅格空间范围的多边形几何输出结果可直接作为 GTI 驱动的输入。从定位上看它是gdal raster index命令文档在 GTI 场景下的扩展——gdal raster index的输出主要用于 MapServer 的 raster tileindex而gdal driver gti create的输出则专门面向 GTI 驱动。该命令有两种典型使用方式直接使用把生成的矢量瓦片索引如.gti.gpkg直接作为 GTI 驱动的输入生成 XML 包装额外生成一个小巧的 XML.gti包装文件便于与数据库等非文件型格式配合或用于不支持写入图层元数据layer metadata的矢量格式。支持图层元数据的格式示例包括 GeoPackage--of GPKG、FlatGeoBuf--of FlatGeoBuf和 PostGIS--of PG。它们能把瓦片索引的“全局属性”分辨率、波段数、数据类型等作为图层元数据项持久化GTI 驱动打开时无需打开第一个瓦片即可获知镶嵌参数。与 GTI 驱动的关系背景速览GTI 驱动raster.gti 文档.. versionadded:: 3.9允许用一个矢量文件里的大量要素每个要素描述一块瓦片来构建虚拟镶嵌。相比 VRT 驱动GTI 的优势包括瓦片以任意 GDAL 支持矢量格式的要素形式列出配合 GeoPackage、FlatGeoBuf、PostGIS 等具备高效空间过滤能力的格式可支撑数十万级甚至更多瓦片支持瓦片间不同 SRS 的即时重投影支持对重叠瓦片合成顺序z-order的控制并尊重 mask/alpha 波段。GTI 驱动支持三类连接串带.gti.gpkg/.gti.fgb扩展名的矢量文件、以GTI:前缀限定的任意矢量文件如GTI:tileindex.shp、GTI:PG:databasemy_db schematileindex、以及引用矢量文件的 GTI XML 文件一般用.gti扩展名。gdal driver gti create生成的两种输出正好对应这三种连接串里的第一类和第三类。GTI 瓦片索引的最低要求是矢量格式 存储瓦片范围的多边形几何列 一个字符串类型的路径属性字段默认字段名为location相对文件名按相对瓦片索引所在路径解释。gdal driver gti create正是围绕这套规范自动产出合规索引的工具。命令用法Synopsisgdal driver gti create [OPTIONS] INPUTS... OUTPUTINPUTS...输入栅格文件或目录支持 GDAL 通配符/文件列表语法OUTPUT输出矢量数据集路径如tile_index.gti.gpkg。完整选项说明可随时用文档生成命令查看gdal driver gti create --help-doc标准选项详解以下选项由gdal driver gti create继承自 GDAL 命令行公共选项体系选项说明-f, --of, --format, --output-format OUTPUT-FORMAT输出矢量格式。可用格式可用gdal --formats \| grep vector \| grep rw \| sort查看见 of_vector.rst。--co, --creation-option NAMEVALUE数据集创建选项可重复。不同驱动支持的选项不同以对应格式驱动文档为准见 co.rst。--lco, --layer-creation-option NAMEVALUE图层创建选项可重复。与数据集创建选项有区别见 lco.rst。--overwrite允许覆盖已存在的目标数据集默认情况下目标已存在会报错见 overwrite.rst。--update以更新模式打开输出数据集隐含该数据集已存在。--overwrite-layer是否允许覆盖已存在的输出矢量图层。--append是否允许向已存在的输出矢量图层追加要素。-l, --nln, --layer LAYER为输出矢量图层命名。--recursive是否递归探索输入目录。--filename-filter FILENAME-FILTER输入目录内文件名需匹配的模式*匹配任意数量字符含 0 个?匹配单个字符比较不区分大小写可多次指定。例如--filename-filter *.tif,*.tiff。--min-pixel-size val栅格入选所需的最小像素尺寸每像素的地理范围/分辨率。像素尺寸在范围被重投影到--output-crs目标 CRS 之后评估。--max-pixel-size val栅格入选所允许的最大像素尺寸评估方式同上。-location-name LOCATION-NAME存放被索引栅格路径的字段名默认字段名为location。--absolute-path在索引中写入栅格文件的绝对路径默认按命令行原样写入文件名。--output-crs OUTPUT-CRS输入文件几何将被变换到目标坐标系默认在输入栅格同一坐标系下生成简单矩形多边形。--metadata KEYVALUE写入任意图层元数据项仅支持图层元数据的格式有效可重复。上述公共选项的实现在 gdalalg_raster_index.cpp 的GDALRasterIndexAlgorithm::AddCommonOptions()中定义包括recursive、filename-filter、min-pixel-size.SetMinValueExcluded(0)要求大于 0、max-pixel-size、location-name、绝对路径参数、output-crs别名dst-crs、t_srs以及metadata别名mo附带键值校验。命令行参数解析逻辑位于 gdaltindex_lib.cpp。GTI 专属选项详解以下选项专用于 GTI 场景其结果要么写入.gtiXML 文件要么写入图层的元数据项取决于是否指定--xml-filename或两者皆有选项说明--xml-filename name生成的 XML Virtual Tile Index 文件名可作为 GDAL GTI / Virtual Raster Tile Index 驱动的输入。当把瓦片索引写入不支持图层元数据项的矢量格式时非常有用。--resolution xres,yres目标分辨率CRS 单位/像素。指定时写入 XML 的ResX/ResY元素或写入RESX/RESY图层元数据项。--bbox xmin,ymin,xmax,ymax目标范围CRS 单位。地理 CRS 中x为经度、y为纬度投影 CRS 中x为东坐标、y为北坐标。写入 XML 的MinX/MinY/MaxX/MaxY元素或MINX/MINY/MAXX/MAXY图层元数据项。--ot, --datatype, --output-data-type datatype瓦片数据类型Byte、Int8、UInt16、Int16、UInt32、Int32、UInt64、Int64、Float32、Float64、CInt16、CInt32、CFloat32、CFloat64。写入 XML 的dataType属性或DATA_TYPE图层元数据项。--band-count val瓦片波段数。写入 XML 的BandCount元素或BAND_COUNT图层元数据项。允许 N 与 N1 波段的瓦片混合前提是第 (N1) 个波段的颜色解释为 alpha且此时波段数应写为 N1。若--nodata或--color-interpretation指定了多个值波段数也会从该数量推断。--nodata val[,val...]瓦片的 NoData 值可多波段逗号分隔。写入 XML 的NoDataValue元素或NODATA图层元数据项。--color-interpretation val[,val...]瓦片颜色解释red、green、blue、alpha、gray、undefined可多波段逗号分隔。写入 XML 的ColorInterp元素或COLOR_INTERPRETATION图层元数据项。--mask瓦片是否带 mask 波段。写入 XML 的MaskBand元素或MASK_BAND图层元数据项。--fetched-metadata gdal_md_name,fld_name,fld_type从栅格瓦片抓取一个元数据项并写为瓦片索引中的一个字段。gdal_md_name为栅格元数据项名可用特殊名{PIXEL_SIZE}表示像素尺寸fld_name为在索引中创建的字段名fld_type为字段类型取String、Integer、Integer64、Real、Date、DateTime之一。可重复。例如--fetched-metadata TIFFTAG_DATETIME,creation_date,DateTime。关于--band-count的推断逻辑源码中在生成 XML 时对--ot、--nodata、--color-interpretation的逗号分隔值个数取最大值作为波段数见 gdaltindex_lib.cpp随后逐波段生成Band bandi dataType...、NoDataValue、ColorInterp子元素gdaltindex_lib.cpp。使用建议来自官方文档的明确提示强烈建议设置--resolution与--ot否则 GTI 驱动将不得不通过打开索引中的第一块瓦片来推断分辨率与数据类型若瓦片存在 nodata 或 mask 波段还应该设置--nodata与--mask在 GTI 场景下索引中所有瓦片的范围必须表达在同一个 CRS 中因此当输入瓦片可能具有不同 CRS 时必须指定--output-crs。输出物一矢量瓦片索引中的图层元数据项当输出格式支持图层元数据GeoPackage、FlatGeoBuf、PostGIS 等且未指定--xml-filename时上述 GTI 专属选项会以图层元数据项形式写入索引。GTI 驱动在打开索引时读取的元数据项全集定义在 gdaltileindexdataset.cpp包括RESX、RESY沿 X/Y 轴分辨率SRS 单位/像素。设置它们可避免驱动打开瓦片推断。BAND_COUNT虚拟镶嵌波段数。若瓦片是单波段且带色表且各瓦片色表可能不同应设为 3或 4以展开为 RGB或 RGBA。DATA_TYPE瓦片数据类型取值同--ot。NODATA虚拟镶嵌各波段的 NoData 值。注意源瓦片自身可以有或没有 nodata且可与虚拟镶嵌的不同。MINX、MINY、MAXX、MAXY虚拟镶嵌的范围。对能高效获取图层范围的矢量格式并非必需。GEOTRANSFORM、XSIZE、YSIZE定义 GeoTransform 与像素尺寸的替代方案。COLOR_INTERPRETATION波段颜色解释。SRS、SRS_BEHAVIOR虚拟镶嵌的 SRS 及其与图层既有 SRS 的交互方式OVERRIDE/REPROJECT。LOCATION_FIELD瓦片位置字段名默认location。SORT_FIELD、SORT_FIELD_ASC重叠瓦片的合成顺序z-order控制。BLOCKXSIZE、BLOCKYSIZE波段块尺寸默认 256×256。MASK_BAND是否暴露数据集级 mask 波段默认 NO。RESAMPLING即时重投影或瓦片原点不在镶嵌网格时的重采样方法nearest、cubic、cubicspline、lanczos、average、rms、gauss默认nearest。INTERLEAVEGDAL 3.13 起PIXEL或BAND。使用gdal driver gti create时该值会被自动设置为与输入源一致的 interleave 模式。自动化测试 test_gdalalg_driver_gti_create.py 验证了层元数据项的写入当设置resolution[10,11]、datatypeUInt16、bbox[1,2,3,4]、band-count2、nodata[5,6]、color-interpretation[red,green]、maskTrue时输出图层元数据字典恰为BAND_COUNT2、COLOR_INTERPRETATIONred,green、DATA_TYPEUInt16、LOCATION_FIELDlocation、MASK_BANDYES、MINX1、MINY2、MAXX3、MAXY4、NODATA5,6、RESX10、RESY11。输出物二.gtiXML 包装文件当指定--xml-filename时命令会额外生成一个小型 XML 文件。它的适用场景包括瓦片索引不是普通文件例如存在数据库中、或矢量格式不支持写入图层元数据项。注意当使用-gti_filename时-mo--metadata不被支持见 gdaltindex_lib.cpp。XML 的根元素为GDALTileIndexDataset其生成逻辑位于 gdaltindex_lib.cpp依次写入IndexDataset指向瓦片索引数据集、IndexLayer、LocationField然后按需写入ResX/ResY、MinX/MinY/MaxX/MaxY、Band系列元素band属性必填、dataType推荐以及MaskBand。测试 test_gdalalg_driver_gti_create.py 展示了一个最小 XML 产物的精确内容输出为 MEM 格式并指定xml-filenameGDALTileIndexDataset IndexDataset/IndexDataset IndexLayermy_layer/IndexLayer LocationFieldlocation/LocationField /GDALTileIndexDatasetXML 格式的完整规范含SQL、SpatialSQL、Filter、SortField、SRS、GeoTransform、BlockXSize、Resampling、Overview、Interleave等元素与Band级Description/Offset/Scale/NoDataValue/UnitType/ColorInterp/ColorTable等子元素参见 raster.gti 文档 的 GTI XML format 章节其 XML Schema 为 gdaltileindex.xsd。除独立 XML 文件外同等信息也可放进图层的xml:GTI元数据域对支持备用元数据域的格式如 GeoPackage。实战示例示例一从 GeoTIFF 构建带完整元数据的瓦片索引下面的命令为当前目录下所有 GeoTIFF 构建瓦片索引并写入适合 GTI 驱动直接使用的元数据关联文档原始示例gdal driver gti create --ot Byte --resolution60,60 --band-count3 --color-interpretationRed,Green,Blue *.tif tile_index.gti.gpkg要点--ot Byte、--resolution60,60、--band-count3、--color-interpretationRed,Green,Blue会让 GTI 驱动打开该 GeoPackage 时无需打开任何一块瓦片即可获知镶嵌的数据类型、分辨率、波段数与颜色解释避免启动时的 I/O 开销。示例二跨 CRS 瓦片即时重投影 管线裁剪当输入瓦片处于不同坐标系时必须用--output-crs统一索引几何。以下命令把不同 CRS 的 JPEG2000 瓦片以 EPSG:4326 为目标 CRS 做即时重投影建索引并用--metadata把 GTI 驱动所用的重采样方法记录为RESAMPLING图层元数据项关联文档原始示例gdal driver gti create --output-crsEPSG:4326 --resolution0.0001,0.0001 --metadataRESAMPLINGcubic *.jp2 tile_index.gti.gpkg随后即可用gdal raster clip或gdal raster convert处理该 GTI 数据集。注意应避免之后再使用gdal raster reproject否则数据会被第二次重采样可能降低质量。在 GDAL 管线中直接按指定 bbox 裁剪并输出 COG 的等价做法bash 语法gdal pipeline read tile_index.gti.gpkg \ ! clip --bbox2.36,49.00,2.37,49.01 --bbox-crsEPSG:4326 \ ! write clipped.tif --output-format COG --creation-option COMPRESSDEFLATEPowerShell 语法gdal pipeline read tile_index.gti.gpkg ! clip --bbox2.36,49.00,2.37,49.01 --bbox-crsEPSG:4326 ! write clipped.tif --output-format COG --creation-option COMPRESSDEFLATE源码实现与原理支撑参数与执行链路gdal driver gti create的算法实现基于 gdalalg_raster_index.cpp其GDALRasterIndexAlgorithm::RunImpl()L186-L312把上层参数翻译成gdaltindex的选项--invoked-from-gdal-raster-index、-recursive、-filename_filter、-min_pixel_size、-t_srs、-mo等再调用GDALTileIndexOptionsNew与GDALTileIndexInternal完成实际建索引。GTI 上下文判定底层 gdaltindex_lib.cpp 中只要设置了分辨率、bbox、波段数、nodata、颜色解释、数据类型、mask、元数据或-gti_filename中的任意一项即认为处于 GTI 上下文bIsGTIContext从而启用 GTI 相关的校验与元数据写入。统一 CRS 强制在 GTI 上下文中若输入瓦片已存在 CRS 且与目标 CRS 不同但未通过-t_srs即--output-crs显式指定重投影目标则会报错提示 GTI use. Use -t_srs option to reproject tile extents见 gdaltindex_lib.cpp。这从实现层面印证了文档中GTI 上下文所有瓦片必须处于单一 CRS的要求。.gtiXML 生成XML 序列化逻辑见 gdaltindex_lib.cpp与 gdaltileindexdataset.cpp 中驱动读取 XML/元数据项的常量一一对应。自动化测试test_gdalalg_driver_gti_create.py 覆盖了 XML 文件生成、图层元数据项写入、nodata 数量与波段数一致性校验等行为可作为理解命令行为的补充证据。适用前提与限制需要 GDAL 3.11 及以上版本GTI 驱动本身自 GDAL 3.9 起内置输出矢量格式对图层元数据的支持程度决定了元数据项的落点支持则写图层元数据不支持则需搭配--xml-filename若输入瓦片 CRS 不一必须指定--output-crs否则命令会报错生成后的 GTI 数据集建议直接用于gdal raster clip/gdal raster convert避免二次重投影。延伸阅读命令官方文档doc/source/programs/gdal_driver_gti_create.rst基础命令gdal raster indexdoc/source/programs/gdal_raster_index.rstGTI 驱动完整文档含全部层元数据项与 GTI XML 规范doc/source/drivers/raster/gti.rstGTI 驱动实现frmts/gti/gdaltileindexdataset.cpp、XML Schema frmts/gti/data/gdaltileindex.xsd底层建索引实现apps/gdaltindex_lib.cpp、算法封装 apps/gdalalg_raster_index.cpp自动化测试autotest/utilities/test_gdalalg_driver_gti_create.py赞分享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 PMTiles 栅格驱动完全指南读取、创建与无服务器瓦片发布实战GDAL PMTiles 栅格驱动完全指南读取、创建与无服务器瓦片发布实战 导读 PMTiles 是一种将栅格瓦片归档为 单个文件 的开放格式可在 S3 等GIS遥感数据工程GDAL MBTiles 驱动完全指南基于 SQLite 的切片地图栅格与矢量瓦片读写GDAL MBTiles 驱动完全指南基于 SQLite 的切片地图栅格与矢量瓦片读写 MBTiles 驱动是 GDAL 内置的读写工具负责处理以 SQLiGIS遥感数据工程GDAL EHdr 驱动完全指南读写 ESRI .hdr / BIL 栅格格式GDAL EHdr 驱动完全指南读写 ESRI .hdr / BIL 栅格格式 导读 ESRI 的 .hdr Labelled通常称为 ESRI BIL GIS遥感数据工程上一篇JavaScript InfoVis Toolkit完全指南打造Web交互式数据可视化的终极工具下一篇HP-Socket技术文档错误反馈机制收集与修复流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考