代码改变世界

ArcSDE 的存储机制

2007-05-21 15:33  flyingfish  阅读(1461)  评论(3编辑  收藏  举报

摘录自:遥感信息 2005. 5《Oracle Spatial 和ArcSDE 的应用比较研究》 陈继宁

ArcSDE 通过把空间坐标信息存储为长二进制数据类型,用多张相关联的表来表达空间和属性数据之间关系,以及空间数据内部结构的方法来组织和存放空间要素而不改变和影响现有数据库的使用。ArcSDE 对所有的图层建立了层表(layer table) ,其中,每条记录对应一个图层,其中记录了如下信息:所有者、对应表名、空间数据列名称、空间索引大小、包络矩形(MBR) 、内部ID 号(layer - id) 等。

每一个图层由业务表( business table) 、要素表(feature table) 和空间索引表(spatial index table ) 组成,3 个表的名称有一定的规律,其中,业务表的名称为图层名称;要素表名称为f < layer - id > ,索引表的名称为s < layer - id > 。图1 是用ArcSDE for SQL Server 2000 往数据库中添加一个图层后,在SQL Server2000 中自动增加的3 张表的结构,其中,业务表的shape 字段唯一,可以为空,要素表的fid 唯一,非空,索引表的sp - fid 非空,不唯一。

图1  SDE 组织空间数据的方式

业务表中每一行代表一个地物要素用来存放地物要素的属性数据,通过Shape 字段和其他两个表关联。

要素表包括要素标识符(fid) 、要素包含的点的数目、shape 的类型、shape 的包络矩形以及要素的坐标点信息等。每个shape 的包络矩形是指覆盖一个完整要素的最小矩形边框的左上角和右下角的坐标对(x ,y) 以及中心点的坐标对。

点状要素的坐标(x ,y) 就是其包络矩形。在SQL Server2000中,坐标点信息是以image 类型来存储的,其中,对于点要素是可以用单一的(x ,y) 坐标表示,对于简单线要素是一组不自相交的(x ,y) 坐标,对于线要素是一组可自相交的(x ,y)坐标,对于面要素是一组起点和终点坐标值相等的(x ,y) 坐标定义的同质、闭合的面。一个多边形可以有一个内部的洞(内部边界) ,先以逆时针方向存储外围边界点,再以顺时针方向存储内部的边界点。在ArcSDE 中的洞并不被认为是一个shape , 仅仅表示多边形内部的一个空的空间,在计算面积时被排除。这里需要注意的是在ArcSDE 中存放的坐标是正的整数坐标,所以在加载数据前,必须确定一个坐标的偏移量和比例系数。偏移量和比例系数一旦设定不可以再修改。

空间索引表包括索引标识符(sp - fid) 、格网单元信息、要素的包络矩形。格网单元可以随时进行修改,最佳格网单元的大小受平均包络矩形大小的影响,格网单元不能小于要素包络矩形平均大小,否则导致索引表中很多的格网单元都索引出相同的包络矩形,使索引表变大,查询时间变长。一般把格网单元大小设置为平均包络矩形大小的3 倍较合适。