GPKG—地质包栅格
司机简称
GPKG
生成依赖项
libsqlite3(以及任何或所有PNG、JPEG、WEBP驱动程序)
此驱动程序实现了对中包含栅格分幅的表的完全读取/创建/更新 OGC GeoPackage format standard . GeoPackage标准使用SQLite数据库文件作为通用容器,标准定义:
需要元数据表 (
gpkg_contents,gpkg_spatial_ref_sys,gpkg_tile_matrix,gpkg_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_x , max_y 在 gpkg_tile_matrix_set 表与数据集的左上角和选定的分辨率完全匹配( pixel_x_size , pixel_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支持? |
|---|---|---|
是的 |
是的 |
|
是的 |
是的 |
|
是的 |
是的 |
|
是的 |
部分,自GDAL 2.2以来。GDAL可以使用此扩展读取数据库。GDAL 3.0支持WKT v2条目。 |
|
是的 |
是的,因为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
也见
OGC GeoPackage format standard 规范,HTML格式(标准的当前/开发版本)
PNG driver 文档页
JPEG driver 文档页
WEBP driver 文档页
其他注记
在GeoPackage driver中开发栅格支持是由 Safe Software .