ArcSDE 9.x中的栅格数据存储模型
ArcSDE使用统一的格式来存储和管理栅格数据。加载到ArcSDE中的栅格文件数据类型多样,这些文件一旦加载进入ArcSDE,便统称为SDE Raster Dataset。如图1:
图1:SDE Raster Dataset
ArcSDE中,在空间数据字典表中存储栅格数据的管理信息,空间数据字典表属于SDE空间数据库管理员用户模式。空间字典表中有一个名为RASTER_COLUMNS的表,专门用于存储数据的元数据。如下图2,其中RASTERCOLUMN_ID为每一幅栅格数据分配唯一标识码(在加载时分配)。同时,栅格数据的业务表名称存储在TABLE_NAME列中。数据字典表中还有一个Layers表,用于存储栅格数据的封装边界的几何信息。如图3,LAYER_ID存储唯一标识的图层号;同时栅格数据的封装边界在Spatial_column字段中值为FOOTPRINT(矢量数据为SHAPE)!
图2:Raster_Columns表
图3:Layer表
用户模式中则保存了栅格数据的所有表。ArcSDE 9中,ArcSDE栅格数据由七个表组成,如图4所示:
图4:ArcSDE 9.x栅格数据存储模型
这七个表分别是:
l Business表:称作业务表,业务表对客户端透明,客户端与栅格数据的交互通过业务表即可完成
l AUX表:称作栅格附录信息表,属于支撑表,用于存储栅格波段的附加信息,如色彩映射和统计值等
l RAS表:称作栅格表,属于支撑表,记录栅格数据的描述信息。
l BND表:称作波段表,属于支撑表,记录栅格数据的波段信息。每幅栅格数据的每一个波段占一条记录。
l BLK表:称作栅格分块表,属于支撑表,每个波段的像元值都以分块的形式存在该表中。加载栅格数据时,ArcSDE利用分块参数将栅格(及金字塔)划分为若干块,每一块都以BLOB类型存储于该表中。
l F表:称作封装边界要素表,属于支撑表,这个表中存储了栅格数据的封装边界的几何信息。
l S表:称作封装边界索引表,属于支撑表,这个表中存储了栅格数据的封装边界的几何索引信息。
(注:栅格数据的F表和S表都是ArcSDE 9后才引入的,存储F表和S表,用于加快栅格数据的检索,提高访问效率)
其中,业务表的命名是用户可以任意指定的,而支撑表的命名则是用ArcSDE统一的规则自动生成的。支撑表的命名与RASTERCOLUMN_ID及LAYER_ID相关。如本例中,用户ACTC的WORLD栅格数据通过查看,得到其RASTERCOLUMN_ID为27,LAYER_ID为88。则用户ACTC的模式中与栅格数据WORLD相关的七个表命名为,如图5:
图5:用户模式中的七个表
业务表:WORLD
附录信息表:SDE_AUX_27
栅格附表::SDE_RAS_27
波段表:SDE_BND_27
分块表:SDE_BLK_27
封装边界要素表:F88
封装边界索引表:S88
使用sde命令行管理栅格数据
使用命令行获取栅格数据的RASTERCOLUMN_ID和LAYER_ID
使用ArcSDE命令行也可以快速地得到栅格数据的RASTERCOLUMN_ID及LAYER_ID。如图6和图7:
图6:sderaster命令可以查看RasterColumn_ID
图7:sdelayer命令可以查看LAYER_ID
使用以上命令行,便可以获得ACTC.WORLD的RASTERCOLUMN_ID为27、LAYER_ID为88。
栅格数据存储大小的计算
栅格数据加载完成后,需要对数据库表进行分析操作。进行分析操作,不仅可以加快数据的检索效率,还可以获得栅格数据的存储大小。
执行数据库的分析操作,可以通过数据库工具分析,也可以通过ArcSDE命令行完成。
完成分析操作后,可以通过Oracle的user_tables视图获取WORLD数据的七个表的大小。在sqlplus中,使用actc用户连接,并使用以下语句:
select table_name,blocks,num_rows from user_tables;
结果如下表所示:
TABLE_NAME |
BLOCKS |
NUM_ROWS |
F88 |
46 |
1 |
S88 |
46 |
4 |
SDE_AUX_27 |
46 |
1 |
SDE_BLK_27 |
4142 |
4233 |
SDE_BND_27 |
46 |
1 |
SDE_RAS_27 |
46 |
1 |
WORLD |
46 |
1 |
BLOCKS字段中记录了各表存储消耗的Oracle块数目。在栅格数据中,数据量最大的表为存储栅格像元信息的分块表,如上表中的SDE_BLK_27。
这样,WORLD数据的存储大小为:8K * (46+46+46+4142+46+46+46) = 35344 K,约为