GPKG—地质包栅格

司机简称

GPKG

生成依赖项

libsqlite3(以及任何或所有PNG、JPEG、WEBP驱动程序)

此驱动程序实现了对中包含栅格分幅的表的完全读取/创建/更新 OGC GeoPackage format standard . GeoPackage标准使用SQLite数据库文件作为通用容器,标准定义:

  • 需要元数据表 (gpkg_contentsgpkg_spatial_ref_sysgpkg_tile_matrixgpkg_tile_matrix_set ,…)

  • 平铺格式编码(基本规范为PNG和JPEG,扩展为WebP)和平铺惯例

  • 扩展名的命名和约定

此驱动程序从文件系统读取和写入SQLite文件,因此必须由对其使用的文件具有读/写访问权限的用户运行。

驱动程序还可以处理地质包向量。见 GeoPackage vector 文档页

各种输入数据集可以转换为地质包栅格:

  • 单波段灰度

  • 带R、G、B或R、G、B、A色表的单波段

  • 两个波段:第一个带灰度级,第二个带阿尔法通道

  • 三个乐队:红,绿,蓝

  • 四个波段:红,绿,蓝,阿尔法

GeoPackage raster只支持字节数据类型。

读取和创建时支持由GeoPackage规范标准化的所有栅格扩展:

  • gpkg_webp :存储WebP磁贴时,前提是GDAL是根据libwebp编译的。

  • gpkg_zoom_other :当连续缩放级别的分辨率不随系数2变化时。

驱动程序功能

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.)

打开选项

默认情况下,驱动程序将把GeoPackage数据集公开为一个四波段(红、绿、蓝、Alpha)数据集,该数据集与可以存储的各种分幅编码具有最大的兼容性。可以使用BAND_COUNT opening选项指定显式的带数。

驾驶员将使用 gpkg_contents 表,并在需要时进行必要的剪裁,以尊重该范围。但是,该信息是可选的,如果省略,驱动程序将使用 gpkg_tile_matrix_set ,它覆盖所有缩放级别的范围。用户还可以指定“USE_TILE_EXTENT=YES open”选项,以在最大缩放级别使用平铺的实际范围。或者它可以指定MINX/MINY/MAXX/MAXY中的任意一个具有自定义范围。

以下打开选项可用:

  • TABLE =table_name:包含平铺的表的名称(称为 "Tile Pyramid User Data Table" 在GeoPackage规范语言中)。如果GeoPackage数据集仅包含一个表,则不需要此选项。否则,这是必需的。

  • ZOOM_LEVEL =值:0到最大值之间的整数值,填入 gpkg_tile_matrix 桌子。默认情况下,驱动程序将选择最大缩放级别,例如在栅格表中至少可以找到该缩放级别的一个平铺。

  • BAND_COUNT =1/2/3/4:打开后暴露的数据集的带数。一些转换将在可能的情况下完成并实现,但这在某些情况下可能会失败,具体取决于磁贴的带区计数值和带区数。默认值为4(这是始终安全的值)。

  • MINX =值:感兴趣区域的最小经度/东距。

  • MINY =值:感兴趣区域的最小纬度/北距。

  • MAXX =值:感兴趣区域的最大经度/东距。

  • MAXY =值:感兴趣区域的最大纬度/北距。

  • USE_TILE_EXTENT =是/否:是否在全分辨率数据集的缩放级别使用实际现有平铺的范围。默认为否。

  • TILE_FORMAT =PNG_JPEG/PNG/PNG8/JPEG/WEBP:用于存储磁贴的格式。见 平铺格式 . 仅在更新模式下使用。默认为PNGU JPEG。

  • QUALITY =1-100:JPEG和WEBP压缩的质量设置。仅在更新模式下使用。默认为75。

  • ZLEVEL =1-9:PNG平铺的放气压缩级别。仅在更新模式下使用。默认为6。

  • DITHER =是/否:是否使用Floyd Steinberg抖动(对于TILE_FORMAT=PNG8)。仅在更新模式下使用。默认为否。

注意:在大多数GDAL实用程序中,open选项通常使用“-oo name=value”语法指定,或者使用GDALOpenEx()API调用指定。

创建问题

根据输入数据集的频带数和所选的平铺格式,驱动程序将进行必要的转换以与平铺格式兼容。

要将多个平铺表添加到GeoPackage数据集(称为GDAL子数据集),或将平铺表添加到现有的仅矢量GeoPackage,必须提供generic APPEND_SUBDATASET=YES创建选项。

根据格式允许,完全透明的磁贴将不会写入数据库。

驱动程序实现了Create()和IWriteBlock()方法,因此可以任意写入栅格块,从而可以直接使用GeoPackage作为gdalwarp等实用程序的输出数据集。

创建时,仅当使用SetGeoTransform()设置了geotransform矩阵时,才能写入栅格块。这是根据像素分辨率、数据集和平铺尺寸确定全分辨率数据集的缩放级别所必需的。

技术/实现说明:当使用非默认感兴趣区域打开数据集(即使用MINX、MINY、MAXX、MAXY或use_TILE_EXTENT open选项)时,或使用非自定义平铺方案创建/打开数据集时,GDAL块可能与单个GeoPackage平铺不完全匹配。在这种情况下,每个GDAL块将重叠四个地质包块。这在读取端很容易处理,但在创建/更新端,这样的配置可能会导致大量解压缩/重新压缩磁贴,这可能会在使用有损压缩(JPEG、WebP)时造成不必要的质量损失。为了避免这种情况,驱动程序将在主GeoPackage文件旁边创建一个临时数据库,以无损(和未压缩)的方式存储部分GeoPackage块。一旦磁贴接收到其四个象限和所有频带的数据(或数据集已关闭或使用FlushCache()显式刷新),这些未压缩的磁贴肯定会通过适当的压缩传输到GeoPackage文件。所有这些对GDAL API/utilities的用户都是透明的

The driver updates the GeoPackage last_change timestamp when the file is created or modified. If consistent binary output is required for reproducibility, the timestamp can be forced to a specific value by setting the OGR_CURRENT_DATE global configuration option. When setting the option, take care to meet the specific time format requirement of the GeoPackage standard, e.g. for version 1.2.

平铺格式

平铺栅格

GeoPackage可以以不同格式存储磁贴,PNG和/或JPEG用于基线规范,WebP用于扩展GeoPackage。对这些平铺格式的支持取决于底层驱动程序是否在GDAL中可用,这通常适用于PNG和JPEG,但不一定适用于WebP,因为它需要根据可选的libwebp编译GDAL。

默认情况下,GDAL将混合使用PNG和JPEG平铺(PNG-JPEG平铺格式,或AUTO)。PNG平铺将用于存储不完全不透明的平铺,这可能是因为输入数据集有一个包含非完全不透明内容的alpha通道,也可能是由于在栅格的右边缘或底边进行剪切,或者当数据集以非默认感兴趣区域打开,或者使用非自定义平铺方案打开时,平铺是部分的。相反,对于完全不透明的平铺,将使用JPEG格式。

通过将“创建/打开”选项“平铺格式”设置为PNG、JPEG或WEBP之一,可以选择一种唯一的平铺格式。使用JPEG时,不会存储alpha通道。使用WebP时 gpkg_webp 将注册分机。采用WebP有损压缩。请注意,必须使用足够新的libwebp(>=0.1.4)来支持WebP tiles中的alpha通道。

可以选择PNG8使用8位PNG,颜色表最多256色。创建时,将为每个平铺计算优化的颜色表。抖动选项可以设置为是以使用Floyd/Steinberg抖动算法,该算法将量化误差扩展到相邻像素上以获得更好的渲染效果(注意,与放大时相比,这可能会导致不理想的视觉伪影)。将其设置为“是”通常会导致压缩效率降低。请注意,当时,这种8位PNG公式仅用于完全不透明的瓷砖,因为当前用于计算最佳颜色表的中值切割算法不支持alpha通道(即使PNG8格式可能允许具有透明度的颜色表)。因此,当选择PNG8时,非完全不透明的平铺将存储为32位PNG。

平铺网格覆盖率数据

从GDAL 2.3开始, tiled gridded coverage data 可以使用PNG无符号16位平铺(具有潜在的偏移和缩放,以便能够表示浮点数据)或TIFF 32位浮点LZW压缩平铺进行存储。

转换GDAL Int16或UInt16数据集时,将使用PNG平铺。转换GDAL Float32数据集时,默认情况下将使用TIFF tiles,除非显式选择PNG,在这种情况下,将自动计算每个tile的缩放和偏移。

警告

这个 tiled gridded extension 最初在GDAL 2.2中实现的并没有被正式采用,后来被OGC重新设计。领养人 tiled gridded coverage data 有一些差异会使GDAL 2.2数据集与最终扩展不兼容。GDAL 2.3可以打开gdal2.2生成的文件。

平铺方案

默认情况下,转换为GeoPackage将创建自定义平铺方案,以便输入数据集可以在像素和地理参考级别进行无损转换(如果使用无损平铺格式,如PNG)。瓦片方案的起源( min_xmax_ygpkg_tile_matrix_set 表与数据集的左上角和选定的分辨率完全匹配( pixel_x_sizepixel_y_size )在计算的最大缩放级别 gpkg_tile_matrix 表格将匹配栅格的像素宽度和高度。

但是,为了简化与其他实现的互操作性,并使GeoPackage能够与tile服务软件一起使用,可以选择具有全球覆盖范围的预定义tile方案。可用的平铺方案有:

  • GoogleMapsCompatible ,如WMTS 1.0规范附件E.4所述。该平铺方案由一个256x256平铺组成,其缩放级别为0,在EPSG:3857 CRS中,范围为东距和北距 [-20037508.34,20037508.34] .

  • 灵感四驱 ,如中所述 Inspire View Services . 该平铺方案由两个256x256平铺组成,其缩放级别为0,在EPSG:4326 CRS中,经度范围在该范围内 [-180,180] 在纬度范围内 [-90,90] .

  • PseudoTMS_GlobalGeodetic ,基于 global-geodetic OSGeo-TMS(Tile-Map-Service)规范简介。这个定义和 灵感四驱 平铺方案。但是,请注意,与TMS的完全互操作性是不可能的,因为在GeoPackage中,tiles的编号原点是左上角(与WMTS惯例一致),而TMS使用左下角作为原点。

  • PseudoTMS_GlobalMercator ,基于 global-mercator OSGeo-TMS(Tile-Map-Service)规范简介。该平铺方案由四个256x256平铺组成,其缩放级别为0,在EPSG:3857 CRS中,其范围为东距和北距 [-20037508.34,20037508.34] . 关于与TMS的互操作性,与PseudoTMS的GlobalGeodetic相同。

  • 谷歌CRS84quad ,如中所述 OGC 07-057r7 WMTS 1.0 规范,附件E.3。该平铺方案由一个256x256平铺组成,其缩放级别为0,EPSG:4326 CRS,经纬度在范围内 [-180,180] . 因此,在缩放级别为0时,该平铺的顶部和底部未使用64行。这可能会导致规范的某些实现出现问题,并且对于这个平铺方案的确切定义存在一些模糊之处。因此,建议使用InspireCRS84Quad/PseudoTMS_GlobalGeodetic。注: OGC WMTS Simple Profile 13-082r2 更改了GoogleCRS84Quad的定义(因此不是由驱动程序实现)。新定义包括一个-1级别(在给定缩放级别为正或0的限制条件下,不能在GeoPackage中建模),在原点有一个-180,90平铺,其底部128行为空。0级或更高级别与InspireCRS84四元平铺方案相同。因此,出于实际目的,GeoPackage中的InspireCRS84Quad符合新的GoogleCRS84Quad定义。

在所有上述平铺方案中,连续的缩放级别延迟一个因子2的分辨率。

从gdal3.2开始,还可以使用Tile矩阵集定义,根据 OGC Two Dimensional Tile Matrix Set standard 此类文件的示例可在http://schemas.opengis.net/tms/1.0/json/examples/GDAL数据目录还包含前缀为 tms_.json 分机。如果有 tms_FOO.json 文件,然后 FOO 选项可以用作值创建方案。支持的平铺矩阵集的类型有限制:

  • 所有缩放级别必须具有相同的原点

  • 连续的缩放级别以两倍的分辨率延迟。

  • 所有缩放级别必须具有相同的平铺尺寸

  • 不支持设置可变平铺宽度矩阵。

Nodata值

nodata值的概念仅支持平铺网格高程数据集。对于常规平铺栅格,必须使用alpha带。

对于具有TIFF tiles的Float32数据集,GDAL中的nodata和GeoPackage内部的空值的概念完全匹配。

对于带PNG平铺的Int16、UInt16或Float32,GDAL通常会将输入的nodata值重新映射到另一个值。

写入时,对于PNG tiles,行为如下:

GDAL数据类型

输入GDAL nodata值

以GPKG GPKG_2d_grided_coverage_辅助值表示的空值

国际16

任何

65535

UInt16标准

X(如果覆盖偏移量=0,覆盖比例=1)

X

浮动32

任何

65535

读取时,对于PNG tiles,行为如下:

GDAL数据类型

以GPKG GPKG_2d_grided_coverage_辅助值表示的空值

暴露的GDAL nodata值

国际16

>=32768个

-32768

国际16

X<=32767

X

UInt16标准

X

X

浮动32

X

X

因此,在以下情况下可以实现完美的往返:

GDAL数据类型

GDAL nodata值

以GPKG GPKG_2d_grided_coverage_辅助值表示的空值

国际16

-32768

65535

UInt16标准

X(如果覆盖偏移量=0,覆盖比例=1)

X

浮动32

65535

65535

创建选项

以下创建选项可用:

  • RASTER_TABLE =字符串。平铺用户表的名称。默认情况下,基于文件名(即,如果文件名为foo.gpkg,则该表将被称为“foo”)。

  • APPEND_SUBDATASET =是/否:如果设置为是,则不会预先销毁现有的GeoPackage,以便能够向其添加新内容。默认为否。

  • RASTER_IDENTIFIER=string. Human-readable identifier (e.g. short name), put in the identifier column of the gpkg_contents table.

  • RASTER_DESCRIPTION=string. Human-readable description, put in the description column of the gpkg_contents table.

  • BLOCKSIZE =整数。块的宽度和高度以像素为单位。默认为256。支持的最大值为4096。使用非自定义平铺方案时不应设置。

  • BLOCKXSIZE =整数。块宽度(像素)。默认为256。支持的最大值为4096。

  • BLOCKYSIZE =整数。块高度(像素)。默认为256。支持的最大值为4096。

  • TILE_FORMAT =PNG_JPEG/PNG/PNG8/JPEG/WEBP/TIFF/AUTO:用于存储磁贴的格式。见 平铺格式 . 默认为自动。

  • QUALITY =1-100:JPEG和WEBP压缩的质量设置。默认为75。

  • ZLEVEL =1-9:PNG平铺的放气压缩级别。默认为6。

  • DITHER =是/否:是否使用Floyd Steinberg抖动(对于TILE_FORMAT=PNG8)。默认为否。

  • TILING_SCHEME =CUSTOM/GoogleCRS84Quad/GoogleMapsCompatible/InspireCRS84Quad/PseudoTMSu GlobalGeodetic/PseudoTMSu GlobalMercator/其他。看到了吗 平铺方案 . 默认为“自定义”。从gdal3.2开始,TILINGu SCHEME的值也可以是JSON文件的文件名 OGC Two Dimensional Tile Matrix Set standard ,该文件的URL,GDAL数据目录中定义文件的字根(例如。 FOO 以文件命名 tms_FOO.json )或者内联JSON定义。注意:具有非自定义值的TILINGu SCHEME选项最好与gdalu translate utility/CreateCopy()API操作一起使用。如果与gdalwarp一起使用,则需要将-tr开关设置为平铺方案的一个缩放级别所期望的精确值。

  • ZOOM_LEVEL_STRATEGY =自动/下降/上升。确定缩放级别的策略。仅由CreateCopy()用于平铺与自定义方案不同的方案。LOWER将选择紧靠在理论计算的非积分缩放级别之下的缩放级别,从而导致子采样。相反,UPPER将选择紧靠放大级别之上的,导致过采样。默认为自动,选择最近的缩放级别。

  • RESAMPLING =最近/双线性/立方/立方线/LANCZOS/模式/平均值。重采样算法。仅由CreateCopy()用于平铺与自定义方案不同的方案。默认为双线性。

  • PRECISION =以垂直单位表示的浮点值:最小有效值。仅用于平铺网格覆盖率数据集。默认为1。

  • UOM =字符串:(GDAL>=2.3)测量单位。仅用于平铺网格覆盖率数据集。也通过SetUnitType()设置

  • FIELD_NAME =字符串:(GDAL>=2.3)字段名。仅用于平铺网格覆盖率数据集。默认为高度。

  • QUANTITY_DEFINITION =字符串:(GDAL>=2.3)字段的说明。仅用于平铺网格覆盖率数据集。默认为高度。

  • GRID_CELL_ENCODING =网格值为中心/网格值为区域/网格值为角点:(GDAL>=2.3)网格单元编码。仅用于平铺网格覆盖率数据集。未设置区域或点元数据项时,默认为网格值为中心。

  • VERSION=AUTO/1.0/1.1/1.2/1.3: (GDAL >= 2.2) Set GeoPackage version (for application_id and user_version fields). In AUTO mode, this will be equivalent to 1.2 starting with GDAL 2.3. 1.3 is available starting with GDAL 3.3

  • ADD_GPKG_OGR_CONTENTS =是/否:(GDAL>=2.2)定义是否添加gpkg_ogr_contents表以保持向量层和关联触发器的特征计数。默认为“是”。

概览

gdaladdo/BuildOverviews()可用于计算概述。两个概览因子(2,4,8,16,…)的幂应倾向于符合基线地质包规范。使用其他概述因素将与GDAL驱动程序一起工作,并导致 gpkg_zoom_other 要注册的扩展,但这可能会导致与不支持该扩展的其他实现的互操作性问题。

也可以使用gdaladdo的-clean选项清除概述(或使用nOverviews=0的BuildOverviews())

元数据

GDAL使用标准 `gpkg_metadata <http://www.geopackage.org/spec/#_metadata_table>`__ 和 `gpkg_metadata_reference <http://www.geopackage.org/spec/#_metadata_reference_table>`__ 用于读取和写入元数据的表。

来自默认元数据域和其他元数据域的GDAL元数据在单个XML文档中序列化,与GDAL PAM(Persistent Auxiliary metadata).aux.XML文件中使用的格式一致,并在gpkg_metadata中使用md_scope=dataset和md_standard_uri=http://GDAL.org进行注册。在gpkg_metadata_reference中,这个条目是用一个reference_scope=table和table_name={name of the raster table}引用的

通过使用 GEOPACKAGE 元数据域。

驱动程序可以读取非源于GDAL的元数据,并将其公开为具有GPKG_Metadata_ITEM_XXX格式键的元数据项,并将 元数据 gpkg_元数据表的列。目前不支持通过GDAL接口(尽管可以通过直接的SQL命令)更新此类元数据。

默认元数据域的特定描述和标识符元数据项可用于读/写以从gpkg_contents表的相应列读取/更新。

可以将“创建元数据表”配置选项设置为“否”,以避免创建和填充元数据表。

地质包扩展的支持级别

(仅限于具有栅格范围的设备)

扩展

扩展名

OGC采用了扩展?

由GDAL支持?

Zoom Other intervals

是的

是的

Tiles Encoding WebP

是的

是的

Metadata

是的

是的

WKT for Coordinate Reference Systems (第二周)

是的

部分,自GDAL 2.2以来。GDAL可以使用此扩展读取数据库。GDAL 3.0支持WKT v2条目。

Tiled Gridded Coverage Data

是的

是的,因为GDAL 2.3(gdal2.2支持此扩展的初步版本)

实例

  • GeoTIFF到GeoPackage的简单转换。表“byte”将使用tiles创建。

    gdal_translate -of GPKG byte.tif byte.gpkg
    
  • 使用WebP tiles将GeoTIFF转换为GeoPackage

    gdal_translate -of GPKG byte.tif byte.gpkg -co TILE_FORMAT=WEBP
    
  • 使用GoogleMapsCompatible tiling scheme将GeoTIFF转换为GeoPackage(如果需要,可以重新投影和重新采样)

    gdal_translate -of GPKG byte.tif byte.gpkg -co TILING_SCHEME=GoogleMapsCompatible
    
  • 构建现有地质包的概述,并强制使用JPEG平铺

    gdaladdo -r cubic -oo TILE_FORMAT=JPEG my.gpkg 2 4 8 16 32 64
    
  • 将新的子数据集添加到现有的GeoPackage,并为栅格表选择非默认名称。

    gdal_translate -of GPKG new.tif existing.gpkg -co APPEND_SUBDATASET=YES -co RASTER_TABLE=new_table
    
  • 将输入数据集重新投影到地质包

    gdalwarp -of GPKG in.tif out.gpkg -t_srs EPSG:3857
    
  • 打开地质包中的特定栅格表

    gdalinfo my.gpkg -oo TABLE=a_table
    

也见

其他注记

在GeoPackage driver中开发栅格支持是由 Safe Software .