存储在 Oracle 中的地理数据库内的栅格数据集和栅格目录
栅格数据是在按行与列排列且大小相同的像元的数组中所显示的空间数据。栅格数据可由一个或多个栅格波段组成。有关栅格数据及其属性的完整说明,请参阅本帮助中的“了解栅格数据”一节。您可以从什么是栅格数据?开始阅读
ArcGIS for Desktop 中的栅格
在 ArcGIS 中,栅格数据可存储在单个栅格数据集、栅格目录或镶嵌数据集中。有关这些栅格存储类型的介绍,请参阅栅格数据的编排。
在目录树中,Oracle 中的各个栅格数据集具有以下图标:
目录树中的栅格目录具有以下图标:
Oracle 地理数据库中,栅格目录和栅格数据集的名称包含栅格目录或数据集的所有者名称,以及栅格目录或栅格数据集本身的名称。
例如,用户 rock 所拥有的栅格数据集 world 将在目录树中以 ROCK.WORLD 形式列出。
有关镶嵌数据集在地理数据库中的存储方式的信息,请参阅 Oracle 地理数据库内的镶嵌数据集。
Oracle 数据库中的栅格表
Oracle 数据库中的 ArcSDE 地理数据库以 LONG RAW、BLOB、GeoRaster 或 ST_Raster 存储类型来存储栅格数据。
对于存储在 Oracle 中的栅格数据,将向业务表中添加栅格列,并且栅格列的每个像元都包含对存储在单独栅格表中的栅格数据的引用。因此,业务表的每一行都引用整个栅格数据。
向 Oracle 中的 ArcSDE 地理数据库导入栅格数据时,会在所选业务表中添加一个栅格列。可根据自己的喜好对栅格列进行命名,但要符合 Oracle 的列命名约定。ArcSDE 限定每个业务表只能添加一个栅格列。
以 LONG RAW 或 BLOB 格式存储的栅格数据
在地理数据库中,以 LONG RAW 或 BLOB 格式存储的栅格数据集由七个表组成:业务表、要素表、空间索引表、辅助表、块表、波段表和栅格属性表。下方显示的是栅格数据集 WORLD_TIF 的业务表和栅格表。
在未来的 Oracle 版本中,可能弃用 LONG RAW 数据类型。因此,Esri 建议您不要使用 LONG RAW 存储方式新建栅格数据集。
业务表
业务表是用于存储属性的 DBMS 表,并且通过添加栅格列而在空间上启用。它存储栅格的轮廓线(描绘区域)。在上述示例中,业务表是 WORLD_TIF 表。
带有栅格列的业务表是栅格数据集或栅格目录。栅格数据集只能有一个业务表行,而栅格目录可以有多个。关于栅格列的信息保留在 RASTER_COLUMNS 系统表中。关于所有业务表(无论它们是否有空间列或栅格列)的信息则保留在 TABLE_REGISTRY 系统表中。
要素表 (f<layer_id>)
要素表储存栅格数据集的几何。此表通过 LAYERS 表中 LAYER_ID 列的编号来标识。业务表和要素表之间的关系通过要素 ID(或 FID)来管理。此键由 ArcSDE 维护,并且对于空间列是唯一的。在上方示例中,要素表为 F117。
空间索引表 (s<layer_id>)
空间索引表用于储存基于简单规则格网的形状参考。此表通过 LAYERS 表中 LAYER_ID 列的编号来标识。在 WORLD_TIF 栅格数据集示例中,空间索引表为 S117。空间索引将为每种形状和格网单元组合都设立一个条目,以便支持空间查询。执行空间查询时,搜索区域内的格网单元会被识别出来,并将用于返回一列候选像素。
栅格影像表
实际的栅格影像存储在这些表中。
如果地理数据库中有栅格数据,则栅格表将仅显示在数据库中。
栅格辅助表用于存储影像色彩映射表、影像的统计数据以及可选位掩码(用于影像叠加和镶嵌)。
现有的影像元数据(例如影像的统计数据、色彩映射表或位掩码)会自动存储于栅格辅助表中。栅格辅助表的 rasterband_id 列是栅格波段表主键的外键引用。访问栅格波段的元数据时,这两个表会借助此主/外键引用连接起来。
字段名 |
字段类型 |
描述 |
是否允许为空 |
---|---|---|---|
RASTERBAND_ID |
NUMBER(38) |
表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。 |
NOT NULL |
TYPE |
NUMBER(38) |
可能的值包括 |
NOT NULL |
OBJECT |
LONG RAW or BLOB |
包含实际数据,即色彩映射表索引、栅格统计数据或坐标变换 |
NOT NULL |
栅格块表用于存储影像各波段的实际影像数据。
栅格块表存储每个栅格波段的像素。根据用户定义的尺寸将像素分块。将栅格数据导入地理数据库或在地理数据库中创建栅格数据的 ArcGIS 应用程序具有默认尺寸。例如,地理处理工具和 ArcCatalog 采用每个栅格块 128 × 128 像素的默认尺寸。栅格块的尺寸以及压缩方法(如果指定了一个方法)决定每个栅格块的存储大小。应选择结合压缩方法后让栅格块表的每一行都适合 DBMS 的栅格块尺寸。
栅格块表包含 RASTERBAND_ID 列,该列是栅格波段表 RASTERBAND_ID 主键的外键引用。访问栅格波段的块时,这些表会借助主/外键引用连接在一起。
对于 Linux、UNIX 和 Windows 上的 Oracle,您应该创建一个很大的表空间来存储栅格块 (BLK) 表,再创建一个中型表空间来存储其余的栅格表和索引。
在 Oracle 中为栅格块表创建表空间时,建议您使用大小为 64 的范围。范围大小指定在前进到下一个容器之前要写入容器的页面大小页的数目。范围大小在创建表空间时定义,以后很难进行修改。还有另一类栅格表,即栅格属性表。这些表存储基于栅格中的像元值的属性值。
栅格块表根据分辨率逐渐减小的金字塔进行填充。金字塔的高度由应用程序所指定的等级数确定。通过应用程序(例如地理处理工具或 ArcCatalog)可定义等级、请求地理数据库计算等级,或同时提供这两种功能。金字塔从底部或等级 0(包含影像的原始像素)开始。通过将之前等级的四个像素合并为当前等级下的单个像素,金字塔向顶点延伸。继续执行此过程直到其到达顶点,该顶点可能是自动定义的或用户定义的。
金字塔的其他等级将栅格块数增加了三分之一。但是,由于可以指定等级数,金字塔的大小可能较小。金字塔的第一个等级将是底层的 25%。还需注意,金字塔的第一个等级可以忽略,这是可大大减小金字塔大小的因素之一。
构建金字塔时,大多数栅格都是通过按乘数 2 逐渐减采样前一等级直至顶点的方式创建的。当应用程序进行缩小操作并且栅格像元变得比分辨率阈值小时,将选择一个更高的金字塔等级。使用金字塔的目的是优化显示性能。
字段名 |
字段类型 |
描述 |
是否允许为空 |
---|---|---|---|
RASTERBAND_ID |
NUMBER(38) |
表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。 |
NOT NULL |
RRD_FACTOR |
NUMBER(38) |
金字塔等级;金字塔等级从 0 开始并可从该等级开始增加。 |
NOT NULL |
ROW_NBR |
NUMBER(38) |
切片行号位置 |
NOT NULL |
COL_NBR |
NUMBER(38) |
列行号位置 |
NOT NULL |
BLOCK_DATA |
LONG RAW or BLOB |
存储在切片中的像素数据 |
NOT NULL |
栅格波段表用于存储关于影像波段的信息。每个栅格波段都有一条对应的记录。
地理数据库将栅格波段存储在栅格波段表中。栅格波段表通过 RASTER_ID 列与栅格表连接。栅格波段表列的 RASTER_ID 是栅格表主键的外键引用。
字段名 |
字段类型 |
描述 |
是否允许为空 |
---|---|---|---|
RASTERBAND_ID |
NUMBER(38) |
表示栅格波段的数字;例如,带有两个栅格波段的栅格数据集将在此字段中有两个不同的值(1 和 2)。 |
NOT NULL |
SEQUENCE_NBR |
NUMBER(38) |
栅格数据集内的栅格波段顺序 |
NOT NULL |
RASTER_ID |
NUMBER(38) |
栅格数据集的唯一标识符;对应于业务表的栅格列中的值 |
NOT NULL |
NAME |
NVARCHAR2(65) |
可选栅格波段名称 | |
BAND_FLAGS |
NUMBER(38) |
包含有关波段属性的位掩码 |
NOT NULL |
BAND_WIDTH |
NUMBER(38) |
波段的像素宽度 |
NOT NULL |
BAND_HEIGHT |
NUMBER(38) |
波段的像素高度 |
NOT NULL |
BAND_TYPES |
NUMBER(38) |
包含有关波段属性的位掩码 |
NOT NULL |
BLOCK_WIDTH |
NUMBER(38) |
块的像素宽度 |
NOT NULL |
BLOCK_HEIGHT |
NUMBER(38) |
块的像素高度 |
NOT NULL |
BLOCK_ORIGIN_X |
NUMBER(64) |
栅格原点的 x 坐标 |
NOT NULL |
BLOCK_ORIGIN_Y |
NUMBER(64) |
栅格原点的 y 坐标。 |
NOT NULL |
EMINX |
NUMBER(64) |
栅格波段的最小 x 值 |
NOT NULL |
EMINY |
NUMBER(64) |
栅格波段的最小 y 值 |
NOT NULL |
EMAXX |
NUMBER(64) |
栅格波段中的最大 y 值 |
NOT NULL |
EMAXY |
NUMBER(64) |
栅格波段中的最大 y 值 |
NOT NULL |
CDATE |
NUMBER(38) |
栅格波段的创建日期 |
NOT NULL |
MDATE |
NUMBER(38) |
栅格波段的上次修改日期 |
NOT NULL |
栅格描述表用于存储栅格列内影像的描述。
字段名 |
字段类型 |
描述 |
是否允许为空 |
---|---|---|---|
RASTER_ID |
NUMBER(38) |
栅格数据集的唯一标识符;对应于业务表的栅格列中的值 |
NOT NULL |
RASTER_FLAGS |
NUMBER(38) |
保留以供今后使用 | |
DESCRIPTION |
NVARCHAR2(65) |
栅格数据集的描述 |
用于追踪栅格的其他系统表
与其他数据类型一样,可在 GDB_ITEMS 和 LAYERS 表中追踪栅格目录和数据集。栅格类型的列可在 RASTER_COLUMNS 表中追踪,每个包含栅格列的表都有一个条目。
还可以有其他属性表作为栅格数据集或栅格目录的一部分。每个栅格数据集只能有一个栅格属性表,但栅格目录可以有多个这样的表。栅格属性表用于定义特定栅格像元值的属性。有关使用这些表的信息,请参阅栅格数据集属性表。
可以使用“数据管理”工具箱的“栅格”工具集中“栅格属性”工具集的“构建栅格属性”工具。有关此工具的详细信息,请参阅构建栅格属性表(数据管理)。
对于栅格数据集,其他属性表以 SDE_VAT_<raster_column_ID> 格式进行命名。对于栅格目录,表名称的格式为 SDE_VAT_<raster_column_ID>_<Object_ID>。
View a diagram of a raster dataset using binary storage in Oracle.
虚线表示各列之间的隐含关系。
需要使用 Adobe Acrobat Reader 才能打开此文件。
以 ST_Raster 格式存储的栅格数据
ST_Raster 是用户定义的对象类型,由子类型组成。采用 ST_Raster 存储的栅格数据集由以下三个表组成:业务表、辅助表和块表。当在地理数据库中使用 ST_Raster 存储时,将存储在栅格和二进制栅格的栅格波段表中的等效信息是基表中 ST_Raster 对象的一部分。ST_Raster 对象也存储栅格的几何。
以 ST_Raster 格式存储的栅格具有辅助 (SDE_AUX_<raster_ID>) 和块 (SDE_BLK_<raster_ID>) 表(请参阅此主题的“栅格影像表”部分),但不使用栅格波段 (SDE_BND_<raster_ID>) 或 栅格 (SDE_RAS_<raster_ID>) 表。
同样,ST_Raster 没有 f 表;ST_Raster 对象本身存储几何。
View a diagram of a raster dataset using ST_Raster storage in Oracle.
虚线表示各列之间的隐含关系。
需要使用 Adobe Acrobat Reader 才能打开此文件。
以 Oracle GeoRaster 格式存储的栅格数据
地理数据库中以 Oracle GeoRaster 格式存储的栅格数据有一个包含列类型 MDSYS.GEORASTER 的业务表。此信息在 Oracle 元数据模式中进行跟踪。MDSYS.GEORASTER 列中包含与以下内容类似的部分:
名称 |
部分值示例 |
---|---|
RASTER |
SDO_GEORASTER |
RASTERTYPE |
20001 |
SPATIALEXTENT |
SDO_GEOMETRY |
SDO_GTYPE |
2003 |
SDO_SRID |
空值 |
SDO_POINT |
空值 |
SDE_ELEM_INFO |
SDO_ELEM_INFO_ARRAY(1,1003,3) |
SDO_ORDINATES |
SDO_ORDINATE(0,0,0256,256) |
RASTERDATATABLE |
'SDE_RDT_1897' |
RASTERID |
2 |
METADATA |
XMLTYPE(<georasterMetadata xmlns="http://xmlns.oracle.com/spatial/georaster"> <objectI) |
由于元数据列非常长,因此要使用 SQL*Plus 查看元数据列,必须增大 LONGSIZE 和 PAGESIZE SQL*Plus 环境并直接以下列方式查询它:
set LONG 20000
set PAGESIZE 500
每个 SDO_GEORASTER 列的像素数据存储在单独的栅格数据表中。由 ArcSDE 创建的 SDO_GEORASTER 数据表是 SDE_RDT_<raster_column_id>,其中,<rastercolumn_id> 是 RASTER_COLUMN 表中的 raster_column_id 字段,该字段唯一标识 ArcSDE 元数据中的栅格数据列。ArcSDE 使用 BLK_STORAGE DBTUNE 存储参数来控制 SDE_RDT_<rastercolumn_id> 表的 Oracle 存储参数。有关对于此表及其字段的描述,请参阅由 Oracle 提供的《Oracle Spatial GeoRaster》文档的第 1 章。
SDE_RDT_<raster_column_id> 定义如下:
字段名 |
字段类型 |
---|---|
RASTERID |
NUMBER |
PYRAMIDLEVEL |
NUMBER |
BANDBLOCKNUMBER |
NUMBER |
ROWBLOCKNUMBER |
NUMBER |
COLUMNBLOCKNUMBER |
NUMBER |
BLOCKMBR |
MDSYS.SDO_GEOMETRY |
RASTERBLOCK |
BLOB |
View a diagram of a raster dataset using SDO_GeoRaster storage in Oracle.
需要使用 Adobe Acrobat Reader 才能打开此文件。
考虑到栅格数据的特性,包含栅格的数据库通常都较大。在 DBMS 中,栅格数据集和栅格目录很少有小于几千兆字节 (GB) 的情况,而是通常会占用几兆兆字节 (TB)。因此,处理这样大型的栅格数据是个难题。有关如何在 ArcSDE 地理数据库中管理栅格数据的建议和示例,请参阅白皮书《ArcSDE 中的栅格数据》,您可从 ArcSDE 支持网站下载,网址为:support.esri.com。
XML 文档中的栅格
在 XML 文档中,栅格数据集使用 DataElement 标签修饰。该标签包含值“esri:DERasterDataset”。
<esri:Workspace xmlns:esri="http://www.esri.com/schemas/ArcGIS/9.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<WorkspaceDefinition xsi:type="esri:WorkspaceDefinition">
<WorkspaceType>esriRemoteDatabaseWorkspace</WorkspaceType>
<Version>sde.DEFAULT</Version>
<Domains xsi:type="esri:ArrayOfDomain" />
<DatasetDefinitions xsi:type="esri:ArrayOfDataElement">
<DataElement xsi:type="esri:DERasterDataset">
<CatalogPath>/V=sde.DEFAULT/RD=ROCK.world_TIF</CatalogPath>
<Name>ROCK.world_TIF</Name>
<Children xsi:type="esri:ArrayOfDataElement">
<DataElement xsi:type="esri:DERasterBand">
<CatalogPath>/V=sde.DEFAULT/RD=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>
</Data>
</DatasetData>
</WorkspaceData>
</esri:Workspace>