DB2 中地理数据库内的栅格数据集和栅格目录

栅格数据是在按行与列排列且大小相同的像元的数组中所显示的空间数据。栅格数据可由一个或多个栅格波段组成。有关栅格数据及其属性的完整说明,请参阅本帮助中的“了解栅格数据”一节。您可以从什么是栅格数据?开始阅读

ArcGIS for Desktop 中的栅格

在 ArcGIS 中,栅格数据可存储在单个栅格数据集、栅格目录或镶嵌数据集中。有关这些栅格存储类型的介绍,请参阅栅格数据的编排

在目录树中,DB2 中的各个栅格数据集具有以下图标:

栅格数据集图标

目录树中的栅格目录具有以下图标:

栅格目录图标

DB2 中,栅格目录和栅格数据集的名称包含数据库的名称、栅格目录或数据集的所有者名称以及栅格目录或栅格数据集本身的名称。

例如,global 数据库中由用户 rock 所有的栅格数据集 world 将在目录树中以 GLOBAL.ROCK.WORLD 形式列出。

有关镶嵌数据集在地理数据库中如何存储的信息,请参阅 DB2 地理数据库中的镶嵌数据集

IBM DB2 数据库中的栅格表

DB2 数据库中的地理数据库以 DB2 的本机二进制格式存储栅格数据。

DB2 本机二进制格式类似于 ArcSDE 压缩二进制类型。有关二进制类型的详细信息,请参阅 DB2 文档和 ArcSDE 压缩二进制存储。将向业务表中添加栅格列,并且栅格列的每个单元格都包含对存储在单独栅格表中的栅格数据的引用。因此,业务表的每一行都引用整个栅格数据。

向地理数据库导入栅格数据时,会在所选业务表中添加一个栅格列。栅格列的每个像元都包含对存储在单独栅格表中的栅格数据的引用。因此,业务表的每一行都引用整个栅格数据。每个业务表只允许有一个栅格列。

提示提示:

您可以根据自己的喜好对栅格列进行命名,但要符合 DB2 的列命名约定。

采用 DB2 本机二进制存储的栅格数据集由五张表组成:业务表、辅助表、块表、波段表和栅格属性表。下方显示的是名为 WORLD_TIF 的栅格数据集的业务表和栅格表。

The WORLD raster dataset tables in DB2

SDE_BLK、SDE_AUX、SDE_RAS 和 SDE_BND 表名称中的数字对应 RASTER_COLUMNS 表中的 RASTERCOLUMN_ID。

考虑到栅格数据的特性,包含栅格的数据库通常都较大。在 DBMS 中,栅格数据集和栅格目录很少有小于几千兆字节 (GB) 的情况,而是通常会占用几兆兆字节 (TB)。因此,处理这样大型的栅格数据是个难题。有关如何在企业级地理数据库中管理栅格数据的建议和示例,请参阅白皮书《ArcSDE 中的栅格数据》,可从网址 support.esri.com 下载该白皮书。

业务表

业务表是用于存储属性的 DBMS 表,并且通过添加栅格列而在空间上启用。它存储栅格的轮廓线(描绘区域)。在上述示例中,业务表是 WORLD_TIF 表。

带有栅格列的业务表是栅格数据集或栅格目录。栅格数据集只能有一个业务表行,而栅格目录可以有多个。关于栅格列的信息保留在 RASTER_COLUMNS 系统表中。关于所有业务表(无论它们是否有空间列或栅格列)的信息则保留在 TABLE_REGISTRY 系统表中。

栅格影像表

实际的栅格影像存储在这些表中。

注注:

如果地理数据库中有栅格数据,则栅格表将仅显示在数据库中。

SDE_AUX_<raster_column_ID>

栅格辅助表用于存储影像色彩映射表、影像的统计数据以及可选位掩码(用于影像叠加和镶嵌)。

现有的影像元数据(例如影像的统计数据、色彩映射表或位掩码)会自动存储于栅格辅助表中。栅格辅助表的 rasterband_id 列是栅格波段表主键的外键引用。访问栅格波段的元数据时,这两个表会借助此主/外键引用连接起来。

字段名

字段类型

描述

是否允许为空

RASTERBAND_ID

INTEGER

表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。

NOT NULL

TYPE

INTEGER

可能的值包括

2 = 栅格统计数据

3 = 色彩映射表

4 = 坐标转换

5 = 预留给地理数据库

6 = 其他

NOT NULL

OBJECT

BLOB

包含实际数据,即色彩映射表索引、栅格统计数据或坐标变换

NOT NULL

SDE_BLK_<raster_column_ID>

栅格块表用于存储影像各波段的实际影像数据。

栅格块表存储每个栅格波段的像素。根据用户定义的尺寸将像素分块。将栅格数据导入地理数据库或在地理数据库中创建栅格数据的 ArcGIS 应用程序具有默认尺寸。例如,地理处理工具和 ArcCatalog 采用每个栅格块 128 × 128 像素的默认尺寸。栅格块的尺寸以及压缩方法(如果指定了一个方法)决定每个栅格块的存储大小。应选择结合压缩方法后让栅格块表的每一行都适合 DBMS 的栅格块尺寸。

栅格块表包含 RASTERBAND_ID 列,该列是栅格波段表 RASTERBAND_ID 主键的外键引用。访问栅格波段的块时,这些表会借助主/外键引用连接在一起。

对于 Linux、UNIX 和 Windows 上的 DB2,您应该创建一个很大的表空间来存储栅格块 (BLK) 表,再创建一个中型表空间来存储其余的栅格表和索引。

DB2 中为栅格块表创建表空间时,建议您使用大小为 64 的范围。范围大小指定在前进到下一个容器之前要写入容器的页面大小页的数目。范围大小在创建表空间时定义,以后很难进行修改。还有另一类栅格表,即栅格属性表。这些表存储基于栅格中的像元值的属性值。

栅格块表根据分辨率逐渐减小的金字塔进行填充。金字塔的高度由应用程序所指定的等级数确定。通过应用程序(例如地理处理工具或 ArcCatalog)可定义等级、请求地理数据库计算等级,或同时提供这两种功能。金字塔从底部或等级 0(包含影像的原始像素)开始。通过将之前等级的四个像素合并为当前等级下的单个像素,金字塔向顶点延伸。继续执行此过程直到其到达顶点,该顶点可能是自动定义的或用户定义的。

金字塔的其他等级将栅格块数增加了三分之一。但是,由于可以指定等级数,金字塔的大小可能较小。金字塔的第一个等级将是底层的 25%。还需注意,金字塔的第一个等级可以忽略,这是可大大减小金字塔大小的因素之一。

A raster pyramid
A raster pyramid

构建金字塔时,大多数栅格都是通过按乘数 2 逐渐减采样前一等级直至顶点的方式创建的。当应用程序进行缩小操作并且栅格像元变得比分辨率阈值小时,将选择一个更高的金字塔等级。使用金字塔的目的是优化显示性能。

字段名

字段类型

描述

是否允许为空

RASTERBAND_ID

INTEGER

表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。

NOT NULL

RRD_FACTOR

INTEGER

金字塔等级;金字塔等级从 0 开始并可从该等级开始增加。

NOT NULL

ROW_NBR

INTEGER

切片行号位置

NOT NULL

COL_NBR

INTEGER

列行号位置

NOT NULL

BLOCK_DATA

BLOB

存储在切片中的像素数据

NOT NULL

SDE_BND_<raster_column_id>

栅格波段表用于存储关于影像波段的信息。每个栅格波段都有一条对应的记录。

地理数据库将栅格波段存储在栅格波段表中。栅格波段表通过 RASTER_ID 列与栅格表连接。栅格波段表列的 RASTER_ID 是栅格表主键的外键引用。

字段名

字段类型

描述

是否允许为空

RASTERBAND_ID

INTEGER

表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。

NOT NULL

SEQUENCE_NBR

INTEGER

栅格数据集内的栅格波段顺序

NOT NULL

RASTER_ID

INTEGER

栅格数据集的唯一标识符;对应于业务表的栅格列中的值

NOT NULL

NAME

VARCHAR(65)

可选栅格波段名称

BAND_FLAGS

INTEGER

包含有关波段属性的位掩码

NOT NULL

BAND_WIDTH

INTEGER

波段的像素宽度

NOT NULL

BAND_HEIGHT

INTEGER

波段的像素高度

NOT NULL

BAND_TYPES

INTEGER

包含有关波段属性的位掩码

NOT NULL

BLOCK_WIDTH

INTEGER

块的像素宽度

NOT NULL

BLOCK_HEIGHT

INTEGER

块的像素高度

NOT NULL

BLOCK_ORIGIN_X

DOUBLE

栅格原点的 x 坐标

NOT NULL

BLOCK_ORIGIN_Y

DOUBLE

栅格原点的 y 坐标。

NOT NULL

EMINX

DOUBLE

栅格波段的最小 x 值

其使用 eminy、emaxx 和 emaxy 定义栅格波段的包络矩形。

NOT NULL

EMINY

DOUBLE

栅格波段的最小 y 值

其使用 eminx、emaxx 和 emaxy 定义栅格波段的包络矩形。

NOT NULL

EMAXX

DOUBLE

栅格波段的最大 x 值

其使用 eminx、eminy 和 emaxy 定义栅格波段的包络矩形。

NOT NULL

EMAXY

DOUBLE

栅格波段中的最大 y 值

其使用 eminx、eminy 和 emaxx 定义栅格波段的包络矩形。

NOT NULL

CDATE

INTEGER

栅格波段的创建日期

NOT NULL

MDATE

INTEGER

栅格波段的上次修改日期

NOT NULL

SDE_RAS_<raster_column_id>

栅格描述表用于存储栅格列内影像的描述。

字段名

字段类型

描述

是否允许为空

RASTER_ID

INTEGER

栅格数据集的唯一标识符;对应于业务表的栅格列中的值

NOT NULL

RASTER_FLAGS

INTEGER

保留以供今后使用

DESCRIPTION

VARCHAR(65)

栅格数据集的描述

用于追踪栅格的其他系统表

与其他数据类型一样,可在 GDB_ITEMSLAYERS 表中追踪栅格目录和数据集。栅格类型的列可在 RASTER_COLUMNS 表中追踪,每个包含栅格列的表都有一个条目。

还可以有其他属性表作为栅格数据集或栅格目录的一部分。每个栅格数据集只能有一个栅格属性表,但栅格目录可以有多个这样的表。栅格属性表用于定义特定栅格像元值的属性。有关使用这些表的信息,请参阅栅格数据集属性表

可以使用“数据管理”工具箱的“栅格”工具集中“栅格属性”工具集的“构建栅格属性”工具。有关此工具的详细信息,请参阅构建栅格属性表(数据管理)

对于栅格数据集,其他属性表以 SDE_VAT_<raster_column_ID> 格式进行命名。对于栅格目录,表名称的格式为 SDE_VAT_<raster_column_ID>_<Object_ID>。

View a diagram of a raster dataset in DB2.

注注:

需要使用 Adobe Acrobat Reader 才能打开此文件。

虚线表示各列之间的隐式关系,实线表示显式定义的关系,灰色表为视图。

XML 文档中的栅格

在 XML 文档中,栅格数据集使用 DataElement 标签修饰。该标签包含值“esri:DERasterDataset”。

以下是 WORLD_TIF 栅格数据集的一个条目:

<DataElement xsi:type="esri:DERasterDataset">
       <CatalogPath>/V=sde.DEFAULT/RD=global.ROCK.world_TIF</CatalogPath> 
       <Name>global.ROCK.world_TIF</Name> 
       <Children xsi:type="esri:ArrayOfDataElement">
          <DataElement xsi:type="esri:DERasterBand">
            <CatalogPath>/V=sde.DEFAULT/RD=global.ROCK.world_TIF/RB=Band_1</CatalogPath> 
            <Name>Band_1</Name> 
            <DatasetType>esriDTRasterBand</DatasetType> 
            <DSID>-1</DSID> 
            <Versioned>false</Versioned> 
            <CanVersion>false</CanVersion> 
            <HasOID>true</HasOID> 
            <OIDFieldName>ObjectID</OIDFieldName> 
            <Fields xsi:type="esri:Fields">
              <FieldArray xsi:type="esri:ArrayOfField">
                <Field xsi:type="esri:Field">
                    <Name>ObjectID</Name> 
                    <Type>esriFieldTypeOID</Type> 
                    <IsNullable>false</IsNullable> 
                    <Length>4</Length> 
                    <Precision>0</Precision> 
                    <Scale>0</Scale> 
                    <Required>true</Required> 
                    <Editable>false</Editable> 
                </Field>
                <Field xsi:type="esri:Field">
                    <Name>Value</Name> 
                    <Type>esriFieldTypeInteger</Type> 
                    <IsNullable>true</IsNullable> 
                    <Length>0</Length> 
                    <Precision>0</Precision> 
                    <Scale>0</Scale> 
               </Field>
               <Field xsi:type="esri:Field">
                    <Name>Count</Name> 
                    <Type>esriFieldTypeInteger</Type> 
                    <IsNullable>true</IsNullable> 
                    <Length>0</Length> 
                    <Precision>0</Precision> 
                    <Scale>0</Scale> 
               </Field>
             </FieldArray>
         </Fields>
         <Indexes xsi:type="esri:Indexes">
           <IndexArray xsi:type="esri:ArrayOfIndex" /> 
         </Indexes>
         <IsInteger>true</IsInteger> 
         <MeanCellHeight>0.175996089009095</MeanCellHeight> 
         <MeanCellWidth>0.176000337991447</MeanCellWidth> 
         <Height>1024</Height> 
         <Width>2048</Width> 
         <PixelType>U8</PixelType> 
         <PrimaryField>1</PrimaryField> 
         <TableType>esriRasterTableValue</TableType> 
         <Extent xsi:type="esri:EnvelopeN">
            <XMin>-179.906382261841</XMin> 
            <YMin>-90.1303147686327</YMin> 
            <XMax>180.542309944643</XMax> 
            <YMax>90.089680376681</YMax> 
            <SpatialReference xsi:type="esri:GeographicCoordinateSystem">
   <WKT>GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984", SPHEROID["WGS_1984",6378137.0,298.257223563]], PRIMEM["Greenwich",0.0], UNIT["Degree",0.0174532925199433]]</WKT> 
          <XOrigin>-400</XOrigin> 
          <YOrigin>-400</YOrigin> 
          <XYScale>11258999068426.2</XYScale> 
          <ZOrigin>0</ZOrigin> 
          <ZScale>1</ZScale> 
          <MOrigin>0</MOrigin> 
          <MScale>1</MScale> 
          <XYTolerance>8.98315284119521E-09</XYTolerance> 
          <ZTolerance>2</ZTolerance> 
          <MTolerance>2</MTolerance> 
          <HighPrecision>true</HighPrecision> 
          <LeftLongitude>-180</LeftLongitude> 
         </SpatialReference>
        </Extent>
      </DataElement>
7/11/2014