DB2栅格¶
司机简称
DB2
生成依赖项
ODBC(以及任何或所有PNG、JPEG、WEBP驱动程序)
注解
DB2驱动程序主要基于OGR/DB2 GeoPackage(GPKG)驱动程序的源代码,用相应的DB2功能替换SQLITE功能。对生成GeoPackage驱动程序所需的主要开发表示赞赏,这大大减少了生成DB2驱动程序的工作量。在某种程度上,可能有必要探讨重构类结构以共享公共功能是否可行。
DB2驱动程序主要实现GeoPackage标准,主要区别是在DB2表名中将“gpkg”前缀替换为“gpkg”,并将它们分配给不同的数据库模式。
下面的文档主要是从 GPKG—地质包栅格 文档。对地质包标准的参考就这样留下了。对实现的引用已更改为DB2。在某些情况下,我们不清楚是应该引用“DB2 tiles”还是“GeoPackage tiles”。
此驱动程序实现了对中包含栅格分幅的表的完全读取/创建/更新 OGC GeoPackage format standard . GeoPackage标准使用SQLite数据库文件作为通用容器,标准定义:
需要元数据表 (
gpkg.contents,gpkg.spatial_ref_sys,gpkg.tile_matrix,gpkg.tile_matrix_set,…)平铺格式编码(基本规范为PNG和JPEG,扩展为WebP)和平铺惯例
扩展名的命名和约定
这个驱动程序在DB2数据库中读取和写入DB2表,因此它必须由对其使用的数据库具有create权限的用户运行。
驱动程序还可以处理DB2向量。见 DB2 vector 文档页
可以将各种输入数据集转换为DB2栅格:
单波段灰度
带R、G、B或R、G、B、A色表的单波段
两个波段:第一个带灰度级,第二个带阿尔法通道
三个乐队:红,绿,蓝
四个波段:红,绿,蓝,阿尔法
DB2 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
打开选项¶
默认情况下,驱动程序将把一个DB2数据集公开为一个四波段(红色、绿色、蓝色、Alpha)数据集,这使其与可以存储的各种tile编码具有最大的兼容性。可以使用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规范语言中)。如果DB2数据集只包含一个表,则不需要此选项。否则,这是必需的。
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:用于存储磁贴的格式。见 Tile format 章节。仅在更新模式下使用。默认为PNG-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调用指定。
创建问题¶
根据输入数据集的频带数和所选的平铺格式,驱动程序将进行必要的转换以与平铺格式兼容。
若要将多个平铺表添加到一个DB2数据集(称为GDAL子数据集),或将平铺表添加到现有的仅矢量的DB2,必须提供通用的APPEND_SUBDATASET=YES创建选项。
根据格式允许,完全透明的磁贴将不会写入数据库。
驱动程序实现了Create()和IWriteBlock()方法,因此可以任意编写栅格块,从而可以直接使用DB2作为gdalwarp等实用程序的输出数据集。
创建时,仅当使用SetGeoTransform()设置了geotransform矩阵时,才能写入栅格块。这是根据像素分辨率、数据集和平铺尺寸确定全分辨率数据集的缩放级别所必需的。
技术/实现说明:当使用非默认感兴趣区域(即使用MINX、MINY、MAXX、MAXY或use_TILE_EXTENT open选项)打开数据集时,或者使用非自定义平铺方案创建/打开数据集时,GDAL块可能与单个DB2平铺不完全匹配。在这种情况下,每个GDAL块将重叠四个DB2块。这在读取端很容易处理,但在创建/更新端,这样的配置可能会导致大量解压缩/重新压缩磁贴,这可能会在使用有损压缩(JPEG、WebP)时造成不必要的质量损失。为了避免这种情况,驱动程序将在主DB2表旁边创建一个临时数据库,以无损(和未压缩)的方式存储部分DB2块。一旦磁贴接收到四个象限和所有频带的数据(或者数据集已关闭或使用FlushCache()显式刷新),这些未压缩的磁贴肯定会通过适当的压缩传输到DB2表。所有这些对GDAL API/utilities的用户都是透明的
平铺格式¶
DB2可以以不同的格式存储tile,PNG和/或JPEG是基线规范,WebP是扩展的DB2。对这些平铺格式的支持取决于底层驱动程序是否在GDAL中可用,这通常适用于PNG和JPEG,但不一定适用于WebP,因为它需要根据可选的libwebp编译GDAL。
默认情况下,GDAL将混合使用PNG和JPEG平铺。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。
平铺方案¶
默认情况下,转换到DB2将创建一个自定义平铺方案,以便在像素和地理参考级别(如果使用PNG等无损平铺格式)对输入数据集进行无损转换。瓦片方案的起源( min_x , max_y 在 gpkg.tile_matrix_set 表与数据集的左上角和选定的分辨率完全匹配( pixel_x_size , pixel_y_size )在计算的最大缩放级别 gpkg.tile_matrix 表格将匹配栅格的像素宽度和高度。
但是,为了简化与其他实现的互操作性,并允许将DB2与tile服务软件结合使用,可以选择具有全球覆盖范围的预定义tile方案。可用的平铺方案有:
谷歌CRS84quad ,如中所述 OGC 07-057r7 WMTS 1.0 规范,附件E.3。该平铺方案由一个256x256平铺组成,其缩放级别为0,EPSG:4326 CRS,经纬度在范围内 [-180,180] . 因此,在缩放级别为0时,该平铺的顶部和底部未使用64行。这可能会导致规范的某些实现出现问题,并且对于这个平铺方案的确切定义存在一些模糊之处。因此,建议使用InspireCRS84Quad/PseudoTMS_GlobalGeodetic。
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的完全互操作性是不可能的,因为tiles的编号来源是DB2中的左上角(与WMTS约定一致),而TMS使用左下角作为来源。
PseudoTMS_GlobalMercator ,基于 global-mercator OSGeo-TMS(Tile-Map-Service)规范简介。该平铺方案由四个256x256平铺组成,其缩放级别为0,在EPSG:3857 CRS中,其范围为东距和北距 [-20037508.34,20037508.34] . 关于与TMS的互操作性,与PseudoTMS的GlobalGeodetic相同。
在所有上述平铺方案中,连续的缩放级别延迟一个因子2的分辨率。
创建选项¶
以下创建选项可用:
RASTER_TABLE =字符串。平铺用户表的名称。默认情况下,基于源文件名。
APPEND_SUBDATASET =YES/NO:如果设置为YES,则不会优先销毁现有的DB2表,以便能够向其添加新内容。默认为否。
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:用于存储磁贴的格式。见 Tile formats 章节。默认为PNG-JPEG。
QUALITY =1-100:JPEG和WEBP压缩的质量设置。默认为75。
ZLEVEL =1-9:PNG平铺的放气压缩级别。默认为6。
DITHER =是/否:是否使用Floyd Steinberg抖动(对于TILE_FORMAT=PNG8)。默认为否。
TILING_SCHEME =自定义/谷歌CRS84四元/谷歌地图兼容/激励84四元/伪数字信号处理器/伪数字信号处理器。见 Tiling schemes 章节。默认为自定义。
ZOOM_LEVEL_STRATEGY =自动/下降/上升。确定缩放级别的策略。仅用于平铺方案与自定义方案不同。LOWER将选择紧靠在理论计算的非积分缩放级别之下的缩放级别,从而导致子采样。相反,UPPER将选择紧靠放大级别之上的,导致过采样。默认为自动,选择最近的缩放级别。
RESAMPLING =最近/双线性/立方/立方线/LANCZOS/模式/平均值。重采样算法。仅用于平铺方案与自定义方案不同。默认为双线性。
概览¶
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_引用中,此条目是用引用_scope=table和table_name={name of the raster table}引用的
通过使用 GEOPACKAGE 元数据域。
驱动程序可以读取非源于GDAL的元数据,并将其公开为具有gpkg.Metadatau ITEMu XXX格式键的元数据项,并将 元数据 gpkg.metadata表的列。目前不支持通过GDAL接口(尽管可以通过直接的SQL命令)更新此类元数据。
默认元数据域的特定描述和标识符元数据项可用于读/写以从gpkg.contents表的相应列读取/更新。
实例¶
GeoTIFF到DB2的简单转换。表“byte”将使用tiles创建。
% gdal_translate -of DB2ODBC byte.tif DB2ODBC:database=sample;DSN=SAMPLE
使用WebP tiles将GeoTIFF转换为DB2
% gdal_translate -of DB2ODBC byte.tif DB2ODBC:database=sample;DSN=SAMPLE -co TILE_FORMAT=WEBP
使用GoogleMapsCompatible平铺方案将GeoTIFF转换为DB2(如果需要,可以重新投影和重新采样)
% gdal_translate -of DB2ODBC byte.tif DB2ODBC:database=sample;DSN=SAMPLE -co TILING_SCHEME=GoogleMapsCompatible
构建现有DB2的概述
% gdaladdo -oo RASTER_TABLE=world -r cubic DB2ODBC:database=sample;DSN=SAMPLE 2 4 8 16 32 64
向现有的DB2添加新的子数据集,并为栅格表选择非默认名称。
% gdal_translate -of DB2ODBC new.tif DB2ODBC:database=sample;DSN=SAMPLE -co APPEND_SUBDATASET=YES -co RASTER_TABLE=new_table
将输入数据集重新投影到DB2
% gdalwarp -of DB2ODBC -co RASTER_TABLE=new_table in.tif DB2ODBC:database=sample;DSN=SAMPLE -t_srs EPSG:3857
在DB2中打开特定的栅格表
% gdalinfo DB2ODBC:database=sample;DSN=SAMPLE -oo TABLE=a_table
也见¶
DB2 vector 文档页
PNG driver 文档页
JPEG driver 文档页
WEBP driver 文档页