需求前提:数据每年变化1~2次,软件估量生命周期50年
实践环境:Oracle Spatial
术语表:时空对象,快照
时空对象:一个地理目标从诞生到消亡所经历的空间和时间范围及其属性信息。这是一个为处理时空数据方便而笼统出来的概念,相当于全信息模型中的全信息对象。为了理解时空对象,我们以二维地物为例。二维地物在二维空间中占据一定的空间范围,表现为一个二维几何体,也就是它的几何属性。如果再添加一条时间轴,成为(x,y,t)坐标系,并认为任何的空间对象都有诞生和消亡,则这个二维地物就在(x,y,t)坐标系中占据了一定的三维空间。我们就把二维地物从诞生到消亡这一时间段所占据的空间-时间范围称之为“时空对象”。同理,也可以将时空对象扩展为三维的空间对象在时间维度上的延续,也就是四维对象。时空对象的属性信息是一张二维表。
快照:一个地理目标在某一特定时辰所占据的空间范围及其属性信息,或者说:时空对象在某一特定的时辰所占据的空间范围及其相应的属性信息。举例来说,地图上绘制了一个饭店的位置,大小,这就是饭店的一个快照。由于饭店是从某一时辰才诞生的,又会在某一时辰消亡,而在诞生和消亡之间,还可能会搬迁或扩建。所以地图上反映的仅仅是饭店在某一时辰的形状,所以称之为饭店在某一时辰的快照或时空对象在某一特定时辰的快照。留意,快照总是对应于某一特定的时辰,否则将得到快照的意义。快照的属性信息是时空对象属性信息表中的一条记录。
设计方向:
以时空对象的概念组织空间数据和属性数据,使得对地物变迁历史的查询和分析成为可能。
对使用层屏蔽历史数据的处理过程,将历史数据的处理当作数据库模块的功用之一。
技术要点:
1、 Oracle包变量的会话独立性
2、 动态视图技术(基于函数的视图)
图形解说:
时间
空间
对象诞生时间
观察方向
当前观察时间
对象消亡时间
快照3
快照2
快照1
时空对象(对象一)
对象三
对象二
从以上示意图中可以清晰地看出,每一个时空对象都是由多个快照记录所描述的。观察者的每一次观察都是基于一个特定的观察时间的。例如,图示中的观察者应该看到对象一的快照2和对象三的快照2,而无法看到对象二和对象一、三的其他快照记录。看不到对象二是由于在此观察时间之前,对象二曾经消亡。看不到对象一的快照1是由于对象一有更新的观察数据快照2可以更好地近似反映对象二在当前观察时间所处的形状。
数据表:数据表的设计基于以上概念
对象表
Obj_id
NUMBER
时空对象标识号
<PK>
Start_time
DATE
对象诞生时间
End_time
DATE
对象消亡时间
Obj_Attr
VARCHAR2(100)
对象属性数据
会因时间的流逝而发生变化的属性信息。
快照记录表
Obj_id
NUMBER
时空对象标识号
<FK>
Snap_id
NUMBER
快照数据的独一序号
<PK>
Snap_time
DATE
快照时间
Snap_end
DATE
快照结束时间
属于同一时空对象的最近的下一条快照的快照时间。设置此列的目的是为了查询方便。
Geom.
MDSYS.SDO_GEOMETRY
快照几何数据
Attr
VARCHAR2(100)
快照属性数据
会因时间的流逝而发生变化的属性信息。
存储过程:
利用Oracle中包变量的会话独立性,在包中建立以下几个基本的存储过程:设置当前观察时间,获取当前观察时间,利用当前观察时间和传入的Snap_time,Snap_end参数判断快照记录能否可见(Snap_Filter)。
视图:建立在快照记录表上的视图,基于存储函数Snap_Filter实现对表中记录的筛选。传入参数为:Snap_time,Snap_End.,前往值为此快照能否可见。
SELECT Obj_id, Snap_time, Geom, Attr
FROM 快照记录表
WHERE Snap_Filter(Snap_time, Snap_end) > 0;
Obj_id
NUMBER
时空对象标识号
Snap_time
DATE
快照时间
Geom.
MDSYS.SDO_GEOMETRY
快照几何数据
Attr
VARCHAR2(100)
快照属性数据
触发器:
视图上的触发器,使使用层用户可以在视图中插入,修正,删除数据。
要点: 1、维护表中数据时要避免出现时间悖论,形成时间逻辑混乱。
2、快照记录表中的Snap_end列的维护稍微麻烦一些,应小心谨慎。
扩展与变化:
1、 支持多种观察模式。
为了查询功用的灵活性,可以添加几个扩展功