需求前提:数据每年变化 1 ~ 2 次,软件预计生命周期 50 年
实践环境: Oracle Spatial
术语表:时空对象,快照
** 时空对象 ** :一个地理目标从诞生到消亡所经历的空间和时间范围及其属性信息。这是一个为处理时空数据方便而抽象出来的概念,相当于全信息模型中的全信息对象。为了理解时空对象,我们以二维地物为例。二维地物在二维空间中占据一定的空间范围,表现为一个二维几何体,也就是它的几何属性。如果再增加一条时间轴,成为( x , y , t )坐标系,并认为任何的空间对象都有诞生和消亡,则这个二维地物就在( x , y , t )坐标系中占据了一定的三维空间。我们就把二维地物从诞生到消亡这一时间段所占据的空间-时间范围称之为“时空对象”。同理,也可以将时空对象扩展为三维的空间对象在时间维度上的延续,也就是四维对象。时空对象的属性信息是一张二维表。
** 快照 ** :一个地理目标在某一特定时刻所占据的空间范围及其属性信息,或者说:时空对象在某一特定的时刻所占据的空间范围及其相应的属性信息。举例来说,地图上绘制了一个饭店的位置,大小,这就是饭店的一个快照。因为饭店是从某一时刻才诞生的,又会在某一时刻消亡,而在诞生和消亡之间,还可能会搬迁或扩建。所以地图上反映的仅仅是饭店在某一时刻的状态,所以称之为饭店在某一时刻的快照或时空对象在某一特定时刻的快照。注意,快照总是对应于某一特定的时刻,否则将失去快照的意义。快照的属性信息是时空对象属性信息表中的一条记录。
设计方向:
以时空对象的概念组织空间数据和属性数据,使得对地物变迁历史的查询和分析成为可能。
对应用层屏蔽历史数据的处理过程,将历史数据的处理当作数据库模块的功能之一。
技术要点:
1、 Oracle 包变量的会话独立性
2、 动态视图技术(基于函数的视图)
图形解说:
时间
空间
对象诞生时间
观察方向
当前观察时间
对象消亡时间
快照 3
快照 2
快照 1
时空对象(对象一)
对象三
对象二

从以上示意图中可以清晰地看出,每一个时空对象都是由多个快照记录所描述的。观察者的每一次观察都是基于一个特定的观察时间的。例如,图示中的观察者应该看到对象一的快照 2 和对象三的快照 2 ,而无法看到对象二和对象一、三的其他快照记录。看不到对象二是因为在此观察时间之前,对象二已经消亡。看不到对象一的快照 1 是因为对象一有更新的观察数据快照 2 可以更好地近似反映对象二在当前观察时间所处的状态。
数据表:数据表的设计基于以上概念
** 对象表 **
Obj_id
|
NUMBER
|
时空对象标识号
|
1<pk>
2
3---|---|---|---
4
5Start_time
6
7|
8
9DATE
10
11|
12
13对象诞生时间
14
15|
16
17End_time
18
19|
20
21DATE
22
23|
24
25对象消亡时间
26
27|
28
29Obj_Attr
30
31|
32
33VARCHAR2(100)
34
35|
36
37对象属性数据
38
39|
40
41会因时间的流逝而发生变化的属性信息。
42
43** 快照记录表 **
44
45Obj_id
46
47|
48
49NUMBER
50
51|
52
53时空对象标识号
54
55|
56
57<fk>
58
59---|---|---|---
60
61Snap_id
62
63|
64
65NUMBER
66
67|
68
69快照数据的唯一序号
70
71|
72
73<pk>
74
75Snap_time
76
77|
78
79DATE
80
81|
82
83快照时间
84
85|
86
87Snap_end
88
89|
90
91DATE
92
93|
94
95快照结束时间
96
97|
98
99属于同一时空对象的最近的下一条快照的快照时间。设置此列的目的是为了查询方便。
100
101Geom.
102
103|
104
105MDSYS.SDO_GEOMETRY
106
107|
108
109快照几何数据
110
111|
112
113Attr
114
115|
116
117VARCHAR2(100)
118
119|
120
121快照属性数据
122
123|
124
125会因时间的流逝而发生变化的属性信息。
126
127存储过程:
128
129利用 Oracle 中包变量的会话独立性,在包中建立以下几个基本的存储过程:设置当前观察时间,获取当前观察时间,利用当前观察时间和传入的 Snap_time , Snap_end 参数判断快照记录是否可见( Snap_Filter )。
130
131视图:建立在快照记录表上的视图,基于存储函数 Snap_Filter 实现对表中记录的筛选。传入参数为: Snap_time,Snap_End. ,返回值为此快照是否可见。
132
133SELECT Obj_id, Snap_time, Geom, Attr
134
135FROM 快照记录表
136
137WHERE Snap_Filter(Snap_time, Snap_end) > 0;
138
139Obj_id
140
141|
142
143NUMBER
144
145|
146
147时空对象标识号
148
149|
150
151---|---|---|---
152
153Snap_time
154
155|
156
157DATE
158
159|
160
161快照时间
162
163|
164
165Geom.
166
167| <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-element: frame; mso-element-frame-hspace: 9.0pt; mso-element-wrap: around; mso-element-anchor-vertical: paragraph; mso-element-anchor-horizontal: page; mso-element-lef</pk></fk></pk>