关键词 移动对象数据库;数据模型;数据结构;索引结构;片断树
近年来移动对象数据库成为一个研究热点,许多的应用中提出了对连续移动对象的存储、查询和处理需求,如:交通管理,运输和供应链管理等。移动对象数据库主要针对移动目标(比如运动车辆),实现实时更新车辆位置信息,有效地回放移动车辆的历史行驶轨迹路线,预测车辆将来的运动,提供车辆行驶目的地的信息。为了建立一个实时跟踪大量移动车辆以及查询移动车辆的历史运动路线的应用,利用它们通常运动在城市公路网上这一特点,本文研究了移动对象数据库在车辆交通管理中的应用,提出了一种对车辆当前和将来位置的索引方法和基于此索引方法的查询。该方法以时间片断(采样时间间隔)与空间块片断(公路网段)的移动对象数据模型和索引方法为基础,为连续的移动对象建立索引结构,对交通路段网络中的移动车辆,设计以及实现车辆位置信息的数据库系统。
1 数据模型
GPS车辆位置信息实时跟踪系统主要包括:已经注册过的车辆,数据处理中心,终端用户或用户服务器以及通讯路径。电子地图是将地图以数字形式存储于计算机中,利用电子地图将 GPS 得来的坐标通过地图匹配找到对象所在的路径。系统的工作原理为:车辆是行驶在公交网中的现实存在的车辆。车辆接受来自GPS卫星的GPS信号,从而确定它的物理位置,物理位置被转换为UTM系统数据库中的坐标,通过无线网络周期性的更新位置信息。数据中心存储车辆的静态属性和车辆的实时位置信息,同时保存着每辆车的历史数据,数据中心还提供在线客户的应用以及用户处理查询得到的数据。
该方法提出一种全新的数据模型,车辆用点来表示,忽略其形状及大小,公交网由一系列的相互交叉的公路段表示,每个公路段都有唯一的编号。车辆的行驶轨迹通过一系列的点表示,表示格式为( t, Rid,d ,v ):
t 表示车辆在给定位置的时间
Rid 表示车辆所在公路段的编号
d 表示车辆当前位置到起始位置的距离
v 表示车辆的当前行驶速度
空间被划分为互不重叠的区域单元,并采用适当的空间索引进行索引化,移动对象在每个区域运动中运动的时间间隔被采集并索引化。 在应用了该方法的移动车辆数据库中,空间被分为公路段。公路段采用片断树结构进行索引。移动车辆在公路段产生的时间间隔采用平衡间隔树来进行索引。采用这种索引方案的移动车辆数据库系统会更灵活,便于系统升级,因为公路段,时间间隔以及这些索引结构能够很简单的分配给不同的处理器,内存以及服务器进行处理。
汽车的运动是连续的,将汽车的位置与速度信息化为一些具体的采样点。数据的精度与系统的承载量是相互平衡的,取样的间隔越短,运动汽车的数据就越是精确,数据库中的数据也越多。
对公路网,车辆,车辆的状况以及时间建立模块,公路网由公路段组成, 公路段具备以下2个条件:任何2个公路段不相交以及公路段间的交点既是起点也是终点。
车辆的属性,分3种:静态属性,间断变化(离散)属性,连续变化属性:
(1)静态属性的数据结构:
vehicle_attributes_static{
Vid : integer;
make : string;
model : string;
year :integer;
}
(2)间断变化属性
vehicle_attributes_discrete{
ownership : {owner_i:string,t_i:time},
color : {color_i:string,t_i:time},
use : {use_i:string,t_i:time},
destination :{dest_i:location,t_i:time},
}
location{
zone : integer;
easting : real;
northing : real;
Address :string;
}
(3)连续变化属性
vehicle_attributes_dynamic {
Road_id : integer;
time : time;
velocity : real;
distance :real;
easting : real;
northing :real;
}
汽车的运动由它在各采样点上的位置,速度来定义。这些值被实时记录并更新。两个采样点之间的运动状态是这样描述的:
汽车的加速度为a,两个时间点t1与t2 之间的时刻为 t,与时间点对应的为位置 p1和 p2,速度为 v,离路段起点的距离为 d,满足如下的计算:

把加速度考虑进来,减少了存储数据的大小。可以认为在这些采样点上,加速度在随后的采样点上是一样的,不考虑速度的变化。
汽车将其位置与运动信息以某个中心频率发送给中心站,中心站将这些数据信息收集起来,但不是每一次的更新都会记录在数据库中,只有在这些关键数据影响到了在邻近地区的运动估测时,才会被记录下来并存入数据库中。根据汽车正在行驶的路况,速度,速度的改变量,下面的两种情况下,数据更新是可以忽略的:
(1) 汽车在最后一次更新的相同路段
(2) 与最后一次更新相比,速度的改变在某个很小的变化范围内,或者加速度在某个很小的变化范围内。
在某种情况下,一个采样点必须插入到汽车两次更新之间。如果两次连续的更新表明汽车已经走出了此路段进入另外一个路段,就需要在这两个路段的交叉处计算并添加一个合适的采样点。所使用的算法与估测同一路段上两个已知样点间的运动是相似的。
2 数据结构
为了使跟踪系统高效运行,必须对路段数据模型进行不同的操作处理。 公路段的定义是这样的:
road_segment {
Road_Id :integer;
Start_easting :real;
Start_northing : real;
End_easting : real;
End_northing : real;
Length : real;
Speed_limit: real;
Time_of_birth : time;
Time_of_death : time;
Next *road_segment
}
这条记录中的每个参数要求大小一致,除了最后一个参数。最后一个参数定义了依据地图当前路段的下一个路段。大多说情况下,会有3到4个路段,直前方,左边,右边,有时候会是U形转弯。因此,给Next参数设置4个单元比较合理,每条记录的大小就是相同的了,就可以利用一个数组来存储这一条数据。在特殊情况下,多于或者少于4个单元,假设单元数为x,处理规则如下:
(1)当x小于4时,在第(x+1)到第4个单元中添0;