栅格数据在地理数据库 (geodatabase) 中的存储方式
在下述情况下可将栅格数据存储在地理数据库中:要管理栅格、添加行为和控制方案时;要将明确的栅格数据集作为 DBMS 的一部分进行管理时;要使用一个数据架构来管理全部内容时。地理数据库主要有三种类型:ArcSDE 地理数据库、个人地理数据库和文件地理数据库。
每种地理数据库的功能行为基本相同;不过,对于某些特定的工具或程序,其功能行为将有所区别。有关工具或程序的行为差异的信息,请参阅此帮助系统的指定工具或程序章节。
与文件地理数据库相比,确实存在的一个不同点是栅格目录上的 SQL 查询。有关上述内容的详细信息,请参阅迁移到文件地理数据库 (geodatabase)。
在文件地理数据库中存储栅格数据
文件地理数据库的存储模型混合了 ArcSDE 地理数据库的存储模型和个人地理数据库的存储模型,其中,托管的栅格数据采用 ArcSDE 地理数据库的存储模型,而非托管的栅格数据采用个人地理数据库的存储模型。另外,文件地理数据库旨在为个人用户提供编辑功能,且不支持版本化,这点与个人地理数据库相似。它们位于文件系统目录中,因此不需要密码就可以进行访问。文件地理数据库和 ArcSDE 地理数据库共享相同的基本存储架构。
与使用个人地理数据库相比,使用文件地理数据库具有许多优势。文件地理数据库与 ArcSDE 地理数据库一样,将数据存储在块中。这使访问数据更有效率,在执行镶嵌操作时体现得更为明显。当在文件地理数据库中镶嵌数据时,仅更新重叠块。如果不存在重叠块,则插入一个新块。部分块将使用 NoData 像素进行填充。此外,文件地理数据库和 ArcSDE 地理数据库存储模型可以执行部分金字塔更新,从而节省时间。同时,由于文件地理数据库和 ArcSDE 地理数据库的数据结构相同,因此可使用快速复制技术在两者之间进行数据复制和粘贴。
文件地理数据库也可以使用配置关键字,但不同于 ArcSDE 地理数据库,文件地理数据库的配置关键字具有标准的预定义值。有关配置关键字的详细信息,请参阅文件地理数据库 (geodatabase) 的配置关键字。
默认情况下,文件地理数据库的每个数据集都具有 1 兆兆字节 (TB) 的存储限制。文件地理数据库中每个数据集的存储量最多可达 1 TB,但是在任何给定文件地理数据库内部,您可以拥有多个 1 TB 的数据集。通过使用 MAX_FILE_SIZE_256TB 配置关键字,可以增大每个数据集的存储量限制。
基本的文件地理数据库栅格模式有五个以等级形式排列的表:业务表是最高级别的表,其他四个子表则用于存储栅格元数据和像素数据。业务表还包含一个要素列,其中保留栅格的包络矩形。此要素列将连接到一个实际上存储着要素包络矩形的要素表中。栅格块表是所有表中最大的表,用于存储实际像素信息和金字塔。所有表都以本机文件格式进行存储,此格式是隐藏的,因此无法对这些表进行直接访问。栅格块表将像素数据存储为 BLOB 列,并根据金字塔等级和波段,在每块内存储一行。
根据用户定义的尺寸(默认值为 128 × 128 像素),将波段分割为像素块。将栅格波段数据进行分块可实现栅格数据的高效存储和检索。根据逐渐减小的分辨率来存储金字塔信息。默认情况下,金字塔的高度由应用程序或系统自动指定的等级数量确定。
栅格目录以多行的形式存储于业务表中,而栅格数据集只是业务表中的一个单独行。栅格数据集的表方案与栅格目录的表方案相同。栅格目录中的每行实际上都存储着一个栅格数据集。栅格目录中每个栅格数据集的范围都保留在栅格目录的业务表的要素列中。
将镶嵌数据集作为一个最多由九个表组成的集合进行存储。当创建镶嵌数据集时,将创建目录、边界、日志和栅格类型表。根据需要,还可以创建等级、总览、颜色矫正、接边和立体表。例如,计算镶嵌数据集的像元大小时创建等级表。
添加到表或要素类的栅格字段称为栅格属性。栅格属性与栅格目录具有相同的方案。包含栅格字段的表或要素类中的每条记录都有一个类型为 RASTER 的列属性值,通过该值可以将记录连接到相应的栅格方案表中。
镶嵌数据集、非托管栅格目录和非托管栅格属性不会将栅格数据存储在栅格表中。而业务表栅格列中的每个值将引用存储在磁盘上的图像。从非托管的栅格目录或镶嵌数据集中删除某行时,将会删除对图像文件的引用,但图像文件本身将保持不变。
在 ArcSDE 地理数据库中存储栅格数据
当栅格数据存储在 ArcSDE 地理数据库时,将提供企业级的功能,如安全、多用户访问和数据共享。以下为将栅格数据存储在 ArcSDE 中的三个主要原因:
- 其更新周期没有严格的规律(如,每两年、每三年或更长时间)。
- 在只读使用情况下,仍可以进行访问(如,将其作为矢量数据下的底图数据进行使用)。
- 有成百上千的用户将其作为底图进行访问。
由于存储结构的原因,将栅格数据被视为由地理数据库管理或完全控制。ArcSDE 地理数据库始终存储关联的关系数据库(如 Oracle、SQL Server、DB2 或 Informix)中的栅格数据集、栅格目录和栅格属性的全部栅格信息(像素、空间参考、任何关联表以及其他元数据)。这意味着所有输入栅格信息都将加载到数据库中,并且可将其视为一种格式转换。
栅格数据集存储在 ArcSDE 地理数据库时,会出现多达七个表。主表为业务表,其至少含有一个栅格列和一个行 ID 列。在存储栅格属性情况下,除所需行 ID 列之外,此栅格列为业务表中唯一的其他列。
对于所有其他栅格模型(包括镶嵌数据集、栅格数据集和栅格目录),业务表都包含一个保存栅格轮廓线的几何列。如果将栅格属性添加到要素类中,则几何列也将显示在业务表中。几何列可以具有两个关联表。其中一个为存储实际几何数据的要素表。如果几何存储类型为 ESRI 二进制,则要素表(也称作 F 表)存在。如果使用的对象关系存储类型为 ESRI 或 IBM ST_GEOMETRY 类型,或者 Oracle SDO_GEOMETRY 类型,则要素表将不存在。除非使用了 RTREE 索引,否则几何列也将具有一个与其相关联的空间索引表(也称作 S 表)。Informix、PostgreSQL 和 Oracle Spatial 都使用 RTREE 索引。
另一个表为栅格块表,该表始终存在且与栅格列相关联。它将存储除镶嵌数据集之外的其他所有栅格模型的栅格数据。由于镶嵌数据集的栅格数据并不存储在 DBMS 中,而是通过图像文件来引用栅格数据,因此在存储镶嵌数据集的情况下,此表为空。
如果栅格块表存储栅格数据,它将成为 ArcSDE 地理数据库的所有表中最大的表,并且根据栅格的大小,可能需要特定的存储处理操作,如专门的 DBTUNE 配置。Oracle SDO_GEORASTER 栅格存储类型具有栅格块表,但是没有其他栅格表与其相关联。
栅格辅助表将存储可选栅格波段元数据,包括栅格统计、坐标转换和色彩映射表。对于镶嵌数据集,栅格辅助表也将保存功能栅格。
如果使用默认的 ESRI 二进制栅格存储类型,则栅格列也将具有相关栅格表和栅格波段表。但是,如果使用可选对象关系 ST_RASTER 存储类型,则这两个表都将不存在。
要素表保存栅格数据集的轮廓线,其方式如同当您拥有一个要素类时,用一个表存储几何,用其他表存储空间索引信息。对于每个栅格数据集,在要素表中都存在一行用于对包络矩形进行存储。
栅格存储表包括以下类型:
- 业务表 - 存储属性、栅格和几何列
- 栅格辅助表 (AUX) - 存储可选元数据,如栅格统计、色彩映射表或坐标转换信息
- 栅格块表(ESRI 类型的 BLK 和 Oracle SDO_GEORASTER 的 RDT) - 存储栅格波段中各块的像素
块表是所有表中最大的,且可以存储实际像素信息和金字塔。
- 栅格波段表 (BND) - 存储波段信息
- 栅格表 (RAS) - 存储每个栅格数据集的记录
根据用户定义的尺寸(默认值为 128 乘 128),ArcSDE 均匀地将波段分割为像素块。将栅格波段数据进行分块可实现栅格数据的高效存储和检索。根据逐渐减小的分辨率来存储金字塔信息。金字塔高度由应用程序或用户指定的等级数量确定。
栅格块表根据金字塔等级,在栅格数据集中每个波段的每块(切片)内存储一行。例如,划分为 12 块、且没有构建金字塔的三波段栅格将在 BLK 表中包含 36 行 - 每个波段具有 12 个独立块。包含块的像素数据的列是一个二进制大对象 (BLOB)。
镶嵌数据集和栅格目录以多行的形式存储在 ArcSDE 地理数据库的业务表中,而栅格数据集在业务表中则只占一行。其表方案与栅格数据集的表方案相同。唯一的区别是要素表中有许多行,而各行将表示栅格目录中栅格数据集的范围。另外,镶嵌数据集可包含一个指针,该指针指向存储在 ArcSDE 地理数据库外部的栅格数据集。
将栅格数据集作为属性存储时,其存储架构与栅格目录的架构相同。业务表中的每条记录都将具有类型为 RASTER 的列属性值。此属性用于将业务表与支持的栅格表相关联。在加载图像时,图像将被转换为 ArcSDE 栅格格式,而像素将存储在栅格块表中。
了解有关将栅格数据集和栅格目录存储在 DB2 的地理数据库中的信息
了解有关将栅格数据集和栅格目录存储在 Informix 的地理数据库中的信息
在个人地理数据库 (geodatabase) 中存储栅格数据
在个人地理数据库中,栅格数据集被转换为 Imagine (.img) 文件,然后存储到图像数据库 (IDB) 文件夹中。IDB 文件夹位于个人地理数据库旁边的目录中。当删除栅格数据集时,IDB 文件夹中的栅格将被永久性删除。
在个人地理数据库中存储镶嵌数据集或栅格目录时,它们将以表的形式指向所包含的已存储栅格数据集。在镶嵌数据集中,栅格数据集以非托管的方式进行存储;而在栅格目录中,栅格数据集的存储方式为托管或非托管均可。如果采用托管的方式,则栅格目录表中的条目将指向 IDB 文件中存储栅格数据集的位置。组织 IDB 文件夹,以便可将其引用至栅格目录的某行处。在非托管情况下,镶嵌数据集或栅格目录包含存储栅格数据集的路径位置。栅格目录业务表中的每行都指向已存储的栅格数据集。在镶嵌数据集或非托管栅格目录上的操作不影响已存储的栅格文件;因此,如果删除了镶嵌数据集或栅格目录中的栅格数据集,则这些数据集也只是从栅格目录中删除,而不是从磁盘中删除。
将栅格数据集作为属性存储时,栅格将作为 IMG 文件存储在系统定义的位置,或者存储在文件系统中,这取决于栅格是否为托管。其存储方式与栅格目录相似。
对文件地理数据库、个人地理数据库和 ArcSDE 地理数据库中的栅格存储加以比较
栅格存储特征 |
文件地理数据库 |
个人地理数据库 |
ArcSDE 地理数据库 |
---|---|---|---|
大小限制 |
每个栅格数据集或栅格目录的大小限制为 1 TB |
每个地理数据库限制为 2 千兆字节 (GB)(此值为表的大小限制,而不是栅格数据集的大小限制。) |
无限制;取决于 DBMS 限制 |
栅格数据集文件格式 |
文件地理数据库栅格数据集 |
ERDAS IMAGINE、JPEG 或 JPEG 2000 |
ArcSDE 栅格数据集 |
存储 |
|
|
|
存储在文件系统中 |
存储在 Microsoft Access 中 |
存储在 RDBMS 中 | |
压缩 |
LZ77、JPEG、JPEG 2000 或无 |
LZ77、JPEG、JPEG 2000 或无 |
LZ77、JPEG、JPEG 2000 或无 |
金字塔 |
支持部分构建金字塔 |
重新构建整个金字塔 |
支持部分构建金字塔 |
镶嵌 |
可以在镶嵌时追加栅格数据集 |
每次镶嵌至栅格数据集时都将重写一个新的数据集 |
可以在镶嵌时追加栅格数据集 |
更新 |
允许增量更新 |
允许增量更新 | |
用户数 |
单个用户和较小的工作组;多位读取者和一位写入者 |
单个用户和较小的工作组;多位读取者和一位写入者 |
多用户;许多用户和许多写入者 |
托管与非托管的栅格数据
在地理数据库中存储栅格数据的方式有两种,即托管或非托管。地理数据库始终将栅格数据集作为托管的源来存储。
作为属性的栅格目录和栅格可使用托管或非托管的源。
镶嵌数据集始终以非托管的方式进行存储。
在 ArcSDE 地理数据库中,栅格数据集和栅格目录始终以托管的方式进行存储。
托管的文件地理数据库栅格数据存储在磁盘上,格式为专有切片格式,与 ArcSDE 存储栅格数据的方式(包括 ArcSDE 栅格压缩类型)完全兼容。因此,文件地理数据库以及托管的栅格解决方案成为在 ArcSDE 实例间(之间不具有网络连接)传输数据的最佳选择。此功能代替了之前的数据传输工作流,如 SDE 导出/导入和数据库导出/导入(如,可传输的表空间和分离的数据库)。
托管的个人地理数据库栅格数据存储于磁盘上,作为 ArcGIS 可写入的基于文件的三种常见栅格格式之一:ERDAS IMAGINE、JPEG 或 JPEG 2000。ArcGIS 内部选择使用栅格文件格式来存储数据,并且此格式将基于所使用的压缩类型;因此如果选择 JPEG 压缩,则使用 JPEG 格式来存储文件;而如果选择不压缩或 LZ77,则将使用 ERDAS IMAGINE 格式来存储栅格。通过原始格式对输入栅格数据集进行转换,并将其存储于特定文件夹 (IDB) 中,该文件夹位于个人地理数据库 .mdb 文件旁边。个人地理数据库根据用户的操作来管理这些栅格文件。(不在基础 Microsoft Access 数据库中存储任何像素信息。)
非托管的文件地理数据库和个人地理数据库栅格存储方式仅指向磁盘上 ArcGIS 可读取的现有栅格文件。这这些情况下,地理数据库将不管理栅格文件,而是仅管理引用栅格文件的表。因为不需要转换栅格格式和复制像素数据,所以非托管文件和个人地理数据库镶嵌数据集、栅格目录和作为属性的栅格都可以进行最快速的构建。
压缩、金字塔和切片大小
将数据存储在地理数据库中时,有其他几种存储结构需要考虑,包括压缩、金字塔和切片大小。
只要使用以下三种压缩技术中的一种,三种类型的地理数据库就都可以存储栅格数据:LZ77(无损)、JPEG(有损)或 JPEG 2000(有损)。无损压缩意味着栅格数据集中的像素值不变,而有损压缩将导致像素值发生变化。压缩量取决于像素数据类型,图像相似度越高,压缩比越大。如果数据不仅要用于显示,还要用于分析,则应使用无损压缩来存储数据。压缩数据的主要好处是可以节省存储空间,节省的空间量取决于压缩方法以及数据中的冗余量。额外的好处是极大地改善了性能,因为您传输的数据包更小了。例如,通过低带宽网络来访问栅格数据时,使用压缩功能可改善性能,因为需要传输的信息量显著降低,同时也使存储较大无缝栅格数据集目录(几 TB 大小)并将其快速显示给用户成为可能。
金字塔是数据集分辨率递减的表示方法,它将与数据一同进行存储。始终建议您构建金字塔。金字塔可以加快栅格数据的显示速度,因为 ArcGIS 只需处理显示的范围和分辨率,而不是重采样整个数据集。因为您对全图范围进行了放大,因此将使用分辨率更好的金字塔来显示图像。
通过将原始数据重采样至几个不同的图层中来创建金字塔,每个图层将表示逐渐变大的分辨率。以下重采样方法将指导服务器对数据进行重采样以构建金字塔。对于具有色彩映射表(如土地利用或伪彩色图像)的离散(标称)数据或栅格数据集,应使用最邻近法。对于连续数据(如卫星影像或航空摄影),应使用双线性插值法或三次卷积插值法。对于特定的数据,强烈建议制作最合适的重采样技术原型。请记住,金字塔重采样技术只对显示数据有效,对原始数据是无效的。
当使用文件和 ArcSDE 地理数据库时,ArcGIS 允许选择等级数和重采样技术,调整金字塔来优化应用程序的显示性能。当您更新文件地理数据库或 ArcSDE 地理数据库中的部分栅格数据集时,只需更新包含有所变化的那部分金字塔。因此,只需其他方法所需时间的一部分即可完成更新,因为无须重写整个栅格数据集或所有金字塔。另外,在更新过程中,其他用户可以继续访问栅格数据集,只是性能略有下降。
在 ArcSDE 地理数据库中,存储栅格数据的结构中的数据会被建立切片、索引及金字塔,更多时候会被压缩。由于为数据建立了切片、索引和金字塔,因此每次查询栅格数据时,只有满足查询范围和分辨率的所需切片才会返回,而不是返回整个数据集。切片大小决定了存储在每个数据库内存块中的像素数目。切片大小以 x 像素数和 y 像素数来指定,默认切片大小为 128 乘 128 像素,大多数应用程序都符合这个默认值。在 ArcSDE 地理数据库中,在将栅格数据切片存储到地理数据库之前,要先将其压缩。
导入栅格
可使用多种方法通过用户界面将栅格数据导入到地理数据库中。通过单击地理数据库,使用导入快捷菜单可将栅格数据导入到地理数据库中。通过 ArcCatalog 中的加载数据命令,也可将数据加载到地理数据库的栅格数据集或栅格目录中。可使用多种地理处理工具将数据加载或导入到地理数据库中:例如,可使用“复制栅格”工具来导入栅格数据集;使用“工作空间转栅格数据集”工具将存储在指定工作空间中的所有栅格数据集加载并镶嵌到一个栅格数据集;使用“工作空间转栅格数据集”工具将存储于相同工作空间的所有栅格数据集加载到现有栅格目录。“添加栅格至镶嵌数据集”工具只添加指针至镶嵌数据集中的源数据,而不会将此栅格数据移动或加载到镶嵌数据集位置。