栅格数据结构和存储模型
影像和栅格数据通常以原始格式进行存储。极少数情况下,您可以编辑各个像素值,比如可能编辑矢量数据集中的一个要素。通常通过处理此数据来创建可以动态处理或可另存为其他版本的新格式。这些数据集和数据集的集合通常非常大,因此,拥有良好的管理功能至关重要,而 ArcGIS Desktop 则是专为此而设计的。
有三种方法可用于存储影像和栅格数据:存储为文件系统中的文件、在地理数据库中进行存储,或者从地理数据库中进行管理而存储在文件系统中。还包括确定是否将所有数据存储在一个单独的数据集中,或者存储在可能具有多个数据集的目录中。如果选择将数据存储在文件系统中,则选择了存储栅格数据集,而地理数据库既可以存储栅格数据集,也可以存储镶嵌数据集。第三个地理数据库选项是栅格目录;下面不对此选项进行讨论,因为它已被镶嵌数据集所取代,后者具有更多的功能、用途和作用。
栅格数据集
大多数影像数据和栅格数据(例如正射影像或 DEM)均作为栅格数据集提供。栅格数据集这个术语是指存储在磁盘上或可作为存储在云存储中的单个栅格进行访问的一切栅格模型。也可将其存储在地理数据库中,但不建议将栅格存储在数据库中。栅格数据集是构建其他数据集的最基本的栅格数据存储模型 - 镶嵌数据集管理栅格数据集。它还是许多处理栅格数据的地理处理工具的输出。以下是栅格数据集的示例。
栅格数据集是组织成一个或多个波段的任何有效的栅格格式。每个波段由一系列像素(像元)数组组成,每个像素都有一个值。栅格数据集至少具有一个波段。ArcGIS Desktop 支持超过 70 种不同的栅格数据集文件格式,其中包括 TIFF、JPEG 2000、Esri Grid 和 MrSid。
镶嵌数据集
镶嵌数据集是一组以目录形式存储并以单个镶嵌影像或单个影像(栅格)的方式显示或访问的栅格数据集(影像)。这些集合的总文件大小和数据集数量都会非常大。镶嵌数据集中的栅格数据集可以采用本机格式保留在磁盘上,也可以存在于地理数据库中。可通过栅格记录以及属性表中的属性来管理元数据。通过将元数据存储为属性,可以更方便地管理诸如传感器方向数据等参数,同时也可以提高对选择内容的查询速度。
镶嵌数据集中的数据不必相邻或叠置,也可以以未连接的不连续数据集的形式存在。例如,您可以使用完全覆盖某个区域的影像,也可使用没有连接到一起形成连续影像的多条影像(例如,沿管线)。
数据甚至可以完全或部分重叠,但需要在不同的日期进行捕获。镶嵌数据集是一种用于存储临时数据的理想数据集。您可以在镶嵌数据集中根据时间或日期查询所需的影像,也可以使用某种镶嵌方法来根据时间或日期属性显示镶嵌影像。
镶嵌数据集并不局限于某种特定类型的栅格数据。您可以从不同的传感器系统中添加不同投影、分辨率、像素深度以及波段数的栅格数据。可以生成整个数据集合的概视图(比如金字塔)。 这样便可更快速地查看数据,并且可以快速地使用这些数据集。此外,还存在许多其他关于查看(包括设置镶嵌方法)的属性,这些属性使得这些数据集在各种情况下具有独特性和功能性。您还可以根据空间和非空间查询约束来查询镶嵌数据集。查询结果可以是一组您能够依次处理的影像,也可以是一个动态生成的镶嵌影像。
除了栅格数据之外,您还可以按照与栅格数据集相同的方式在镶嵌数据集中存储和管理激光雷达数据,甚至与栅格数据集一起存储。激光雷达数据可以在文件系统中另存为 LAS 文件或 LAS 数据集,或者在地理数据库中另存为 terrain 数据集。
比较栅格数据存储模型
通常,当栅格数据集彼此不相邻或者很少在同一个工程中使用时,单独存储栅格数据集就是最佳方法。将输入数据集镶嵌在一起以形成一个单一范围的大型栅格数据文件通常适合许多应用项目,但在许多情况下可能需要使用镶嵌数据集:
- 栅格数据集的范围部分或完全叠置,而您需要保留公共区域。
- 栅格数据集表示在某个时间序列的不同时间点对同一区域的观察结果的集合。
- 您仅希望显示研究区域,而非整个影像集合。
- 您需要将一组影像作为一个整体进行管理,但同时又需要保留它们独立的状态。
- 您需要记录和管理用来描述各影像的其他属性列。
比较栅格数据存储模型
栅格数据集 | 镶嵌数据集 | |
---|---|---|
说明 | 某个对象的单张图片,或者覆盖某片空间连续区域的无缝影像。它可以是单张原始影像,也可以是许多影像合并(镶嵌)在一起而形成的结果。 | 以目录形式存储的栅格数据集的集合,通过该目录,可以存储、管理、查看以及查询栅格和激光雷达数据的集合。可将它视为镶嵌影像,但集合中的各个数据集可作为项目供您访问。 |
存储 | 存储为磁盘或地理数据库中的文件。 | 但是,在地理数据库中,可以参考以文件的形式存储在磁盘上的源数据。 |
地图图层 | 一个地图图层。 | 一个地图图层。 |
同类数据还是异类数据 | 同类数据:单一格式、数据类型和文件。 | 异类数据:多种格式、数据类型、文件大小和坐标系。 |
元数据 | 存储一次,并且应用于完整数据集。 | 可存储在栅格记录中,并且可在属性表中存储为属性。 |
缩减采样的数据集 | 整个栅格数据集的概述。 | 针对每个栅格数据集的金字塔,以及针对整个集合的概视图(类似于金字塔)。 |
地理处理和影像分析 |
|
|
优点 |
|
|
缺点 | 更新文件或个人地理数据库栅格数据集时速度较慢,因为必须重写整个文件。 | 生成概视图需要一定的时间。 |
用途 | 可直接用作影像服务。 | 可直接用作影像服务。 |
建议 | 如果不需要保留镶嵌影像之间的叠置部分,或者需要快速显示大量的栅格数据时,可使用栅格数据集。 | 可使用镶嵌数据集来管理和显示栅格和激光雷达数据。它非常适合多维数据、查询、存储元数据以及叠置数据,并且提供了良好的混合解决方案。 |
地理数据库中的栅格数据存储
在下述情况下可将栅格数据存储在地理数据库中:要管理栅格、添加行为和控制方案时;要将一组定义明确的栅格数据集作为 DBMS 的一部分进行管理时;要使用单一架构来管理全部内容时。地理数据库主要有三种类型:企业级地理数据库、个人地理数据库和文件地理数据库。
企业级地理数据库可以支持 DBMS 中的多种运算。单用户可以对文件地理数据库(比如个人地理数据)进行编辑,该类地理数据库不支持版本管理。它们位于文件系统目录中,因此不需要密码就可以进行访问。文件地理数据库和企业地理数据库共享相同的基本存储架构。
对文件地理数据库、企业级地理数据库和个人地理数据库中的栅格存储加以比较
栅格存储特征 | 文件地理数据库 | 企业级地理数据库 | 个人地理数据库 |
---|---|---|---|
大小限制 | 每个栅格数据集 1 TB | 无限制;取决于 DBMS 限制 | 每个地理数据库限制为 2 千兆字节 (GB)(此值为表的大小限制,而不是栅格数据集的大小限制。) |
栅格数据集文件格式 | 文件地理数据库栅格数据集 | 企业级地理数据库栅格数据集 | ERDAS IMAGINE、JPEG 或 JPEG 2000 |
存储 |
|
|
|
存储在文件系统中 | 存储在 RDBMS 中 | 存储在 Microsoft Access 中 | |
压缩 | LZ77、JPEG、JPEG 2000 或无 | LZ77、JPEG、JPEG 2000 或无 | LZ77、JPEG、JPEG 2000 或无 |
金字塔 | 支持部分构建金字塔 | 支持部分构建金字塔 | 重新构建整个金字塔 |
镶嵌 | 可以在镶嵌时追加栅格数据集 | 可以在镶嵌时追加栅格数据集 | 每次镶嵌至栅格数据集时都将重写一个新的数据集 |
更新 | 允许增量更新 | 允许增量更新 | n/a |
用户数 | 单个用户和较小的工作组;多位读取者和一位写入者 | 多用户;许多用户和许多写入者 | 单个用户和较小的工作组;多位读取者和一位写入者 |
文件地理数据库
文件地理数据库的存储模型混合了企业级地理数据库的存储模型和个人地理数据库的存储模型,其中,托管的栅格数据采用企业级地理数据库的存储模型,而非托管的栅格数据采用个人地理数据库的存储模型。另外,文件地理数据库旨在为个人用户提供编辑功能,且不支持版本管理,这点与个人地理数据库相似。它们位于文件系统目录中;因此不需要密码就可以进行访问。文件和企业级地理数据库共享相同的基本存储架构。
与使用个人地理数据库相比,使用文件地理数据库具有多项优势。文件地理数据库与企业级地理数据库一样,将数据存储在块中。这使访问数据更有效率,在执行镶嵌操作时体现得更为明显。当在文件地理数据库中镶嵌数据时,仅更新重叠块。如果不存在重叠块,则插入一个新块。部分块将使用 NoData 像素进行填充。此外,文件地理数据库和企业级地理数据库存储模型可以执行部分金字塔更新,从而节省时间。同时,由于文件地理数据库和企业级地理数据库的数据结构相同,因此可使用快速复制技术在两者之间进行数据复制和粘贴。
文件地理数据库也可以使用配置关键字,但不同于企业级地理数据库,文件地理数据库的配置关键字具有标准的预定义值。有关配置关键字的详细信息,请参阅文件地理数据库 (geodatabase) 的配置关键字。
企业级地理数据库
当栅格数据存储在企业级地理数据库时,将提供企业级功能,如安全、多用户访问和数据共享。以下是将栅格数据存储为企业级地理数据库的三个主要原因:
- 其更新周期没有严格的规律(如,每两年、每三年或更长时间)。
- 在只读使用情况下,仍可以进行访问(如,将其作为矢量数据下的底图数据进行使用)。
- 作为底图时,允许数百(或更多)用户进行访问。
由于存储结构的原因,栅格数据将被视为由地理数据库管理或完全控制。企业级地理数据库始终将栅格数据集和栅格属性的所有栅格信息(像素、空间参考、任何相关表以及其他元数据)存储在关联关系数据库中。这意味着所有输入栅格信息都将加载到数据库中,并且可将其视为一种格式转换。
根据用户定义的尺寸(默认值为 128 乘 128),企业级地理数据库均匀地将波段分割为像素块。将栅格波段数据进行分块可实现栅格数据的高效存储和检索。根据逐渐减小的分辨率来存储金字塔信息。金字塔高度由应用程序或用户指定的等级数量确定。
栅格块表(最大的表,且可以存储实际像素信息和金字塔)根据金字塔等级,在栅格数据集中每个波段的每块(分块)内存储一行。例如,划分为 12 块、且没有构建金字塔的三波段栅格将在 BLK 表中包含 36 行 - 每个波段具有 12 个独立块。包含块的像素数据的列是一个二进制大对象 (BLOB)。
适用于 Oracle、PostgreSQL 和 SQL Server 的企业级地理数据库
自 ArcGIS Desktop 10.5 版本开始,在 Oracle、PostgreSQL 或 SQL Server 地理数据库中创建的镶嵌数据集都将使用名为 RASTERBLOB 的新 RASTER_STORAGE 关键词进行创建。RASTERBLOB 关键词可以有效地将镶嵌数据集目录项转移至 DBMS。
软件的早期版本无法打开利用 RASTERBLOB 创建的镶嵌数据集。如果您要创建与早期版本兼容的镶嵌数据集,您需要为 RASTER_STORAGE 更改配置关键词,使其变为以下任一兼容的关键词:
- PostgreSQL 和 SQL Server 为 BINARY
- Oracle 为 BLOB。
个人地理数据库
在个人地理数据库中,栅格数据集被转换为 IMAGINE (.img) 文件,然后存储到图像数据库 (IDB) 文件夹中。IDB 文件夹位于个人地理数据库旁边的目录中。当删除栅格数据集时,IDB 文件夹中的栅格将被永久性删除。
在个人地理数据库中存储镶嵌数据集时,它将以表的形式指向所包含的已存储栅格数据集。在镶嵌数据集中,以非托管的形式存储栅格数据集;因此,它包含存储栅格数据集的位置路径。业务表中的每行都指向已存储的栅格数据集。对镶嵌数据集的操作不影响已存储的栅格文件;因此,如果删除了镶嵌数据集中的栅格数据集,这些数据集也只是从镶嵌数据集中删除,而不是从磁盘上的源数据中删除。
将栅格数据集作为属性存储时,栅格将作为 IMG 文件存储在系统定义的位置,或者存储在文件系统中,这取决于栅格是否为托管。
压缩、金字塔和分块大小
存储和管理数据时,有其他几种存储结构需要考虑,包括压缩、缩减采样的数据集(金字塔和概视图)和分块大小。
压缩
共有两种压缩类型:无损压缩和有损压缩。无损压缩意味着栅格数据集中的像素值不变,而有损压缩将导致像素值发生变化。压缩量取决于像素数据类型,图像相似度越高,压缩比越大。如果数据不仅要用于显示,还要用于分析,则应使用无损压缩来存储数据。压缩数据的主要好处是可以节省存储空间,节省的空间量取决于压缩方法以及数据的冗余量。额外的好处是极大地改善了性能,因为您传输的数据包更小了。例如,通过低带宽网络来访问栅格数据时,使用压缩功能可改善性能,因为需要传输的信息量显著降低,同时也使存储较大无缝栅格数据集并将其快速显示给用户成为可能。
镶嵌数据集也具有压缩功能。这不适用于存储托管的栅格数据集,但适用于压缩显示时生成的影像。通过网络访问数据时,还可以帮助减小所传输文件的大小。
缩减采样的数据集
缩减采样的数据集是从原始数据创建的栅格数据集或镶嵌数据集的栅格。这些数据集是为提高显示速度和性能而生成的。当为栅格数据集创建这些数据集时,它们称为金字塔;当为镶嵌数据集创建这些数据集时,它们称为概视图。
金字塔与概视图
金字塔 | 概视图 | |
---|---|---|
创建对象: | 栅格数据集 | 镶嵌数据集 |
格式 | 写入 .ovr 文件 - 存在一些例外。 将外部存储的金字塔读取为 .ovr 或 .rrd,或者在内部读取。 | 写入为 .tif 文件。 |
存储 | 存储在通常位于源栅格数据集旁边的单个文件中,使用的名称相同。 | 默认情况下,存储在具有 *.overviews 扩展名的地理数据库旁边的文件夹中,或为企业级地理数据库的内部存储。 存储位置可以自定义。 |
存储大小 | 2 至 10%(与原始栅格数据集相比) | |
缩减采样因子 | 2 | 3 |
范围 |
|
|
构建时的选项 |
|
|
切片大小
在企业级地理数据库中,存储栅格数据的结构中的数据会被建立分块、索引及金字塔,更多时候会被压缩。由于为数据建立了分块、索引和金字塔,因此每次查询栅格数据时,仅会返回满足查询范围和分辨率的所需分块,而非整个数据集。分块大小决定了存储在每个数据库内存块中的像素数量。按照 x 像素数和 y 像素数指定分块大小,默认分块大小为 128 × 128 像素,大多数应用程序都符合这个默认值。在企业地理数据库中,在将栅格数据分块存储到地理数据库之前,要先将其压缩。