一种空间数据版本的管理方法与流程

文档序号:16811263发布日期:2019-02-10 13:40阅读:242来源:国知局
一种空间数据版本的管理方法与流程

本发明涉及计算机软件开发技术领域,尤其是涉及一种空间数据版本的管理方法。



背景技术:

地理信息系统的发展与应用,导致空间数据不断增长,海量空间数据的存储和管理变得十分重要,也是地理信息系统发展的瓶颈所在。如何设计良好的空间数据版本管理模式,支持多版本恢复,空间数据变更操作的存储及备份,提供更灵活的空间数据编辑功能,成为地理信息系统中需要解决的问题。

空间数据的存储结构的发展经历了五个时代:文件系统存储、混合数据存储、关系数据库存储、面向对象数据库存储、对象关系型存储。目前,在成熟的二维地理信息系统商业软件方面,主要采用对象关系型,关系型数据库管理系统拥有完善成熟的数据管理功能,而面向对象技术的功能,大大方便了模拟和管理空间数据的复杂关系。现存在两种方案,一是数据库企业在其各自的数据库产品中增加了支持空间数据类型的专用软件(如甲骨文oracle公司的spatialcartridge),二是地理信息系统软件企业在传统的关系数据库管理系统之上进行功能和数据类型的扩张,外加一个空间数据管理引擎,如美国环境系统研究所公司(esri)的arcsde,美国mapinfo公司与甲骨文oracle公司共同开发的用于存储、管理和查询空间数据的oraclespatial等。而在这一时期成熟的系统有加州大学berkeley分校最初开始研制,后又被世界各地自由软件开发人员共同维护的postgres。

对于现有的空间数据存储,在版本管理方面所做的并不充分,对于空间数据多次导入生成多个版本,并没有良好的支持,而只是作为不同的空间数据图层进行分别管理;另外对于空间数据图元的增加、修改和删除操作,也需要作为单独的增量式版本进行保存备份,以便随时恢复。

在选择版本恢复时,应能根据版本类型选择适合的恢复方式,如对主版本采用全部记录替换,对用户记录级修改的版本采用增量式恢复等方式,现有的地理信息系统并没有很好地实现这一点。



技术实现要素:

针对现有技术中所存在的上述技术问题,本发明提出了一种空间数据版本的管理方法,实现了空间数据编辑操作的合并及冲突处理;实现了记录级版本增量式备份和回复,提高了效率,且实现了空间数据版本的前进、回溯和融合,使得空间数据版本管理更加灵活。

本申请提出了一种空间数据版本的管理方法,包括以下步骤:

s1、创建空间数据存储的数据库表并导入空间数据;

s2、空间数据的主版本演进,包括新版本空间数据的导入和原版本空间数据的恢复;

s3、空间数据的分支版本演进,包括对当前版本空间数据的图元或属性的更改和提交;

s4、空间数据的版本树应用,通过版本树获取所需版本的空间数据。在一个实施方式中,所述步骤s1中,创建空间数据存储的数据库表具体包括:

创建版本树表,所述版本树表用于记录版本树结构;

创建主表,所述主表用于记录当前空间数据版本的图元数据、属性数据和图元索引数据,所述主表包括主图元表、主索引表和主属性表;

创建版本表,所述版本表用于备份所有的空间数据版本,所述版本表包括图元版本表、索引版本表和属性版本表;

创建数据变更表,所述数据变更表用于存储用户对空间数据所做的更改。

在一个实施方式中,所述步骤s1中,导入空间数据具体包括以下步骤:

s11、在所述版本树表中新增一条空间数据记录表示当前版本;

s12、将所述空间数据网格化,并对与所述空间数据有交叠的网格设置索引。

在一个实施方式中,所述步骤s2中,新版本空间数据的导入具体包括:

s21、将所述主表中当前版本的空间数据复制到所述版本表中进行备份,然后导入新版本的空间数据覆盖所述主表作为当前版本的空间数据;

s22、变更索引配置,根据导入的新版本的空间数据修改索引网格的配置。

在一个实施方式中,所述步骤s2中,原版本空间数据的恢复具体包括:

将版本表中要恢复的空间数据进行备份,将所述备份后的空间数据覆盖主表,重新从主表中读取空间数据,并刷新空间数据。

在一个实施方式中,所述步骤s3具体包括图元和属性的编辑、记录级变更的合并、记录级变更的提交和记录级版本的创建。

在一个实施方式中,空间数据的版本树应用中,通过版本前进、版本回溯、版本融合或版本刷新的方式获得所需版本的空间数据。

其中,所述版本前进具体包括:

假定现有版本a要变成版本b,所述版本b在版本树中为现有版本a的子孙节点,确定从现有版本a到版本b的路径所经历的所有版本:

1)若所经历路径上没有主版本:在版本表中找到这些版本所对应的记录,然后按照版本树的顺序,从现有版本a的第一个子节点开始,依次合并下一个子节点的增加、修改、删除记录集合,最终得到从现有版本a到版本b的增加、修改、删除记录集合,然后对当前主表中的数据按照这个增加、修改、删除集合做变更;

2)若所经历路径上有主版本:先恢复到离版本b最近的主版本,然后重复1)的操作。

所述版本回溯具体包括:

现有版本a要变成版本b,所述版本b在版本树中为现有版本a的子孙节点,确定从现有版本a到版本b的路径所经历的所有版本:

a)若所经历路径上没有主版本:在版本表中找到这些版本所对应的记录,然后按照版本树的顺序,从现有版本b的第一个子节点开始,依次合并下一个子节点的增加、修改、删除记录集合,最终得到从现有版本b到版本a的增加、修改、删除记录集合,然后对增加集合中的元素,在主表中删除对应记录,对于修改和删除集合中的元素,在版本表中先找版本b对应的记录中是否有相应元素,如果找到,则用找到的记录更新/添加到主表,如果找不到,继续找b的父节点版本,直到全部找到为止;

b)若所经历路径上有主版本:先恢复到离版本b最近的主版本,然后重复a)操作。

所述版本融合具体包括:

版本a要与另一个版本b融合,形成新的版本,先找到a和b在版本树中的共同祖先点c:

ⅰ)若从c到a和从c到b的两条路径上都没有主版本,计算出从c到a和从c到b的增加、修改、删除记录集合,合并这两个集合,最后得到融合的增加、修改、删除记录集合,然后将a回溯到版本c,再按融合后的增加、修改、删除记录集合进行变更,得到融合版本d,其中d为c的子节点;

ⅱ)若从c到a和从c到b的两条路径上有一条路径上有主版本,或两条路径上都有主版本,则a和b无法融合。

在一个实施方式中,空间数据的主版本演进过程中,所述空间数据版本树表被锁定,空间数据无法编辑。

在一个实施方式中,导入空间数据时,将空间数据的图元、属性和索引记录添加到计算机内存中作为缓存,以提高空间数据的获取速度。所述空间数据的图元、属性和索引记录可以为全部,也可以为部分,根据实际需要进行选择。

与现有技术相比,本发明的优点在于,本发明实现了空间数据编辑操作的合并及冲突处理;实现了记录级版本增量式备份和回复,提高了效率,且实现了空间数据版本的前进、回溯和融合,使得空间数据版本管理更加灵活。

附图说明

下面将结合附图来对本发明的优选实施例进行详细地描述。在图中:

图1显示了根据本发明的实施例所述的空间数据版本管理方法的流程图。

图2显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据库表结构图。

图3显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据导入效果图。

图4显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据主图元表效果图。

图5显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据主属性表效果图。

图6显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据主索引表效果图。

图7显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据记录级变更规则流程图。

图8显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据记录级表格变更效果图。

图9显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据图元版本表效果图。

图10显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据属性版本表效果图。

图11显示了根据本发明的实施例所述的空间数据版本管理方法的空间数据索引版本表效果图。

在附图中,相同的部件使用相同的附图标记。附图并未按照实际的比例绘制。

具体实施方式

以下结合附图及实施例来详细说明本发明的实施方式,借此对本发明如何应用技术手段来解决技术问题,并达成技术效果的实现过程能充分理解并据以实施。需要说明的是,只要不构成冲突,本发明中的各个实施例以及各实施例中的各个特征可以互相结合,所形成的技术方案均在本发明的保护范围之内。

如图1所示,本发明公开了一种空间数据版本的管理方法的流程图,包括以下步骤:

s1、创建空间数据存储的数据库表并导入空间数据;

s2、空间数据的主版本演进,包括新版本空间数据的导入和原版本空间数据的恢复;

s3、空间数据的分支版本演进,包括对当前版本空间数据的图元或属性的更改和提交;

s4、空间数据的版本树应用,在版本树中获取所需版本的空间数据。

其中,如图2所示,步骤s1中,创建空间数据存储的数据库表具体包括:

创建版本树表,所述版本树表用于记录版本树结构。版本树表中字段包含版本号、父级版本号、操作人、操作时间、是否为当前版本等。

创建主表,所述主表用于记录当前空间数据版本的图元数据、属性数据和图元索引数据。所述主表包括主图元表、主索引表和主属性表;其中,所述主图元表中字段包含图元编号、图元数据、图元版本号等,所述主索引表中字段包含索引网格编号、图元编号、索引版本号等,所述主属性表中字段包含图元编号、属性数据、属性版本号等。

创建版本表,所述版本表用于备份所有的空间数据版本,所述版本表包括图元版本表、索引版本表和属性版本表,表中字段分别为对应所述主图元表、主索引表和主属性表所含字段的基础上增加以下两个字段:操作类型和版本类型,所述操作类型包括增加、删除、修改和无操作四种数据值,所述版本类型包括表级版本、索引级版本、记录级版本三种数据值。

创建数据变更表,所述数据变更表用于存储用户对空间数据所做的更改,提交版本时会将其中变更应用到主表和版本表中。包括图元增加表、图元修改表、图元删除表、属性增加表、属性修改表、属性删除表、索引增加表、索引修改表、索引删除表,表中字段分别为对应的主图元表、主索引表、主属性表中所含字段基础上增加以下三个字段:操作人,操作时间,操作版本。

在运行时,计算机内存中记录当前空间数据版本号、待新增图元及属性、待修改图元及属性,待删除图元及属性以及三张主表的部分记录作为缓存。

步骤s1中,导入空间数据具体包括:

s11、在所述版本树表中新增一条空间数据记录表示当前版本;

s12、将所述空间数据网格化,并对与所述空间数据有交叠的网格设置索引。

具体的,在所述版本树表中新增一条记录表示当前版本,版本号为“0”,父级版本号为空,操作人为当前用户名,操作时间为当前时间,是否为当前版本为真;读取空间数据中每个图元的形状位置信息,并将每个所述图元的形状位置信息插入到主图元表中,图元编号从0开始依次递增,图元版本号为0;添加空间数据中每个图元对应的属性信息至主属性表中,图元编号为属性所对应的图元的编号,属性版本号为0;根据各个图元的形状位置构建索引,并将每个所述图元对应的若干索引添加到主索引表。

构建索引时,构建的具体方式为:

将整个空间数据图层的范围划分为m乘n的网格状,m和n的具体值可以由用户自行设定,对于每个网格,每个落在其中或与其有相交部分的空间数据图元都会生成一条索引,索引网格号为这个网格的编号,图元编号为这个图元的编号,索引版本号为0,将每个图元对应的若干索引添加到主索引表,索引表的建立可以使得查询和显示更加快速。导入过程中,会将部分图元、属性和索引记录添加到计算机内存中作为缓存,以提高数据获取速度。

在一个实施例中,导入的空间数据为一幅世界地图,索引网格的设定为10乘10,导入后的效果如图3所示,空间数据中共有146个图元以及对应的146条属性数据,共生成524条索引数据记录,主图元表、主属性表、主索引表的部分记录分别为图4、图5、图6所示。其中主图元表中的“wkbtype”字段的值表示图元的类型,3为多边形,6为多多边形,“xmin”、“xmax”、“ymin”、“ymax”表示图元的外包矩形范围;主属性表中包含了两种属性数据,“name”表示国家名称,“popdens”表示人口密度;主索引表中“xmin”、“xmax”、“ymin”、“ymax”表示索引网格的范围,“relationship”表示网格与图元之间的关系,4表示相交,8表示网格包含图元,“父亲因子编号”表示此网格上一级更粗粒度的网格的编号,主要用于图层渲染,此处不再展开叙述。

所述步骤s2中,主版本演进包括新版本空间数据的导入和原版本空间数据的恢复。

其中,新版本空间数据的导入具体包括:

s21、将所述主表中当前版本的空间数据复制到所述版本表中进行备份,然后导入新版本的空间数据覆盖所述主表作为当前版本的空间数据。

具体的操作方法为:首先查询版本表中是否有当前空间数据的备份,如果没有备份,则将三个主表所有记录复制到版本表,操作类型字段赋值为“无操作”,版本类型字段赋值为“表级版本”,版本号为当前空间数据版本号;然后删除主表中所有记录,生成一条新的版本记录添加到版本树中,其中父级版本号的值为当前版本号,并将此版本作为当前版本。然后将另一版本的空间数据写入主表,写入的方式与导入空间数据时三个主表导入方式相同。空间数据的再次导入可以进行多次,每次都生成一个新版本,在导入过程中,会对版本树表进行加锁,防止其他用户此时编辑空间数据,加锁失败则表示其他用户正在对空间数据进行更改,需要等待直到加锁成功。

s22、变更索引配置,根据导入的新版本的空间数据修改索引网格的配置。

具体的操作方法为:用户提交了新的索引网格配置后,将主索引表的所有记录复制到索引版本表,操作字段类型为“无操作”,版本类型字段赋值为“索引级版本”,版本号为当前空间数据版本号;然后删除主索引表中所有记录,生成一条新的版本记录添加到版本树中,其中父级版本号的值为当前版本号,并将此版本作为当前版本。然后计算新的索引并写入索引表,计算和写入方式与导入空间数据时向主索引表导入方式相同。索引配置变更可以多次进行,每次都会备份上一版本索引并生成新版本索引。在索引配置变更过程中,会对版本树表进行加锁,防止其他用户此时编辑空间数据,加锁失败则表示其他用户正在对空间数据进行更改,需要等待直到加锁成功。

其中,原版本空间数据的恢复具体包括:

将版本表中要恢复的空间数据进行备份,将所述备份后的空间数据覆盖主表,重新从主表中读取空间数据,并刷新空间数据。

具体的操作方法为:首先判断当前版本是否已经备份过,如果没有备份,则先备份当前版本,方法与上面空间数据再次导入中备份当前版本相同;接下来,更改版本树表的“是否为当前版本”字段,将用户所选版本对应的记录更改为真,然后删除主表所有记录,将版本表中版本号为用户所选版本的所有记录复制到主表中。在版本恢复过程中,会对版本树表进行加锁,防止其他用户此时编辑空间数据,加锁失败则表示其他用户正在对空间数据进行更改,需要等待直到加锁成功。

在本实施例中,将同样的空间数据进行多次导入,每次导入时都作为空间数据新版本,版本表中存储了各个版本的所有记录,可以用来恢复,同时进行多次索引配置的变更,每次变更都会备份现有索引记录,空间数据多次导入和索引配置变更后,都会清空计算机内存重新加载新版本的部分记录作为缓存。

在本实施例中,可以选择已经多次导入的各个版本的空间数据进行版本恢复,每次恢复后,会清空计算机内存并重新加载所选版本的部分记录作为缓存。

步骤s3中,包括图元和属性的编辑、记录级变更的合并、记录级变更的提交和记录级版本的创建。

1)、图元和属性的编辑

包括图元和属性的增加、修改和删除。其中,图元和属性的增加是新增加空间数据图元到当前版本中,修改是修改选中图元的位置或形状,删除是删除选中的图元。增加图元或属性时,会在内存的待新增图元及属性集合中添加所增加的图元或属性记录,并计算图元对应的索引,添加到内存的图元及索引缓存中;修改图元或属性时,会在内存的待修改图元及属性集合中添加所增加的图元或属性记录,并修改缓存中对应的图元记录,删除图元原有的索引缓存重新计算索引并添加到索引缓存;删除图元或属性时,会在内存的待删除图元及属性集合中添加所增加的图元或属性记录,并在内存图元及索引缓存中删掉相应记录。图元和属性的编辑可以由多个用户同时进行,实现并发协同编辑,每个用户可以提交自己所做的更改,如果出现多个用户同时修改了同一个图元或属性的情况,在提交及记录级版本创建时,会提示用户选择其中一条修改记录作为有效修改。

2)、记录级变更的合并

记录级变更的合并是将现有的增加、修改、删除操作与之前的增加、修改、删除操作进行合并,在内存的待新增图元及属性、待修改图元及属性,待删除图元三个集合以及数据变更表中都涉及到记录级变更的合并。记录级变更合并遵循的规则,如图7所示,其中“delete”、“update”、“add”分别表示删除、修改、增加操作,“a/u/d”表示增加/修改/删除对应的内存中的集合或数据变更表,“删a/u/d”表示在增加/修改/删除对应的内存中的集合或数据变更表删除对应记录,“添a/u/d”表示在增加/修改/删除对应的内存中的集合或数据变更表添加对应记录,“改a/u/d”表示在增加/修改/删除对应的内存中的集合或数据变更表修改对应记录。

合并的具体方法为,将现有的内存中待新增图元及属性、待修改图元及属性,待删除图元三个集合分别称为“add_old”,“update_old”,“delete_old”,将待合并的增加、修改、删除集合分别称为“add_new”、“update_new”、“delete_new”。对于delete_new的一条记录,如果其在add_old中出现相同图元编号的记录,则从add_old中除去;如果不出现,则看其是否在update_old中出现,如果出现,则从update_old除去,并添加到delete_old,如果不出现,则直接添加到delete_old中;再合update_new,对于update_new的一条记录,如果其在add_old中出现相同图元编号的记录,则直接修改add_old对应记录;如果不出现,则看其是否出现在update_old中,如果出现,则直接修改update_old对应记录,如果不出现,则直接添加到update_old中;最后合add_new,对于add_new的一条记录,如果其在add_old中出现相同图元编号的记录,则直接修改add_old对应记录;如果不出现,则看其是否出现在update_old中,如果出现,则直接修改update_old对应记录,如果不出现,则看其是否存在于delete_old中,如果出现,则从delete_old删去并添加到update_old中,如果不出现,则直接添加到add_old中。对于索引的数据变更表,只存在“delete”、“add”两种,合并方式为先合并delete_new,对于delete_new的一条记录,如果其在add_old中出现相同图元编号的记录,则从add_old中除去,如果不出现,则直接添加到delete_old中;再合add_new,对于add_new的一条记录,如果其在add_old中出现相同图元编号的记录,则直接修改add_old对应记录,如果不出现,则直接添加到add_old中。记录级变更的合并只是合并同一用户的增加、修改、删除操作。

以合并一项删除操作流程为例,在用户进行一项删除图元操作后,将这项操作添加到内存中现有的待新增图元及属性、待修改图元及属性,待删除图元三个集合或者提交到数据变更表的流程为:首先在内存待新增图元集合或者图元增加表中查找是否有相同图元编号的记录,如果有,则直接将此记录删除;如果没有,则继续在内存待修改图元集合或者图元修改表中查找是否有相同图元编号的记录,如果有,则直接将此记录删除,然后添加此图元的一条记录到内存待删除图元集合或者图元删除表中,如果没有,则直接添加此图元的一条记录到内存待删除图元集合或者图元删除表中。如果此操作是提交到数据变更表的,则还需进行索引数据变更表的记录更改,首先看其是否出现在索引增加表中,如果出现则直接删掉相应记录,如果不出现则计算此图元范围对应的各条索引记录并添加到索引删除表中。

3)、记录级变更的提交

记录级变更的提交是将内存中待新增图元及属性、待修改图元及属性,待删除图元及属性集合提交到数据变更表中,提交时也遵循记录级变更合并规则,其中操作版本字段赋值为当前空间数据的版本号。同时对每个待新增、待修改、待删除的图元,计算相应的索引,并提交到索引增加表和索引删除表中,具体的方式为,对于待新增图元,根据图元形状位置生成相应的索引提交到索引增加表中,对于待删除图元,根据图元形状位置生成相应的索引提交到索引删除表中,对于待修改图元,根据修改前图元形状位置生成相应的索引提交到索引删除表中,再根据修改后图元形状位置生成相应的索引提交到索引增加表中。记录级变更提交时只合并当前用户的增加、修改、删除操作。

4)、记录级版本的创建

记录级版本的创建是将用户所做的记录及更改作为一个新的版本进行存储,具体的方法为,首先判断内存中待新增图元及属性、待修改图元及属性,待删除图元三个集合中是否有数据,如果有,则先进行记录级变更的提交。接下来,如果当前空间数据版本在版本表中没有备份,则将三个主表所有记录复制到版本表,操作类型字段赋值为“无操作”,版本类型字段赋值为“表级版本”,版本号为当前空间数据版本号。然后将数据变更表中的数据提交到主表和版本表中,提交到主表的方法为:对于图元/属性/索引增加表,将所有记录增加到主图元/属性/索引表中;对于图元/属性修改表,将所有记录在主图元/属性表中找到相应记录并进行修改;对于图元/属性/索引删除表,将所有记录在主图元/属性/索引表中找到相应记录并进行删除。提交到版本表中的方法为:对于图元/属性/索引增加表,将所有记录增加到图元/属性/索引版本表中,操作类型字段值为“增加”,版本类型字段值为“记录级版本”;对于图元/属性修改表,将所有记录增加到图元/属性版本表中,操作类型字段值为“修改”,版本类型字段值为“记录级版本”;对于图元/属性/索引删除表,将所有记录增加到图元/属性/索引版本表中,操作类型字段值为“删除”,版本类型字段值为“记录级版本”。提交到主表和版本表时,对于修改或删除的图元、属性、索引,会比较其操作版本字段与主表和版本表中对应记录的版本字段,如果不相同,说明有其他用户在之前做过提交,则提示用户是否要强制覆盖此条记录。在记录级版本的创建过程中,会对版本树表进行加锁,防止其他用户此时编辑空间数据,加锁失败则表示其他用户正在对空间数据进行更改,需要等待直到加锁成功。

在本实施例中,新增加了一个多边形图元,移动了澳大利亚的位置,删除了南极洲,如图8所示。将所做的修改提交并创建记录级版本,在版本树表中新生成了一条记录表示此记录级版本,版本号为1。

图元版本表中新增了三条记录,如图9所示,其中“图元id(图元编号)”为106的记录表示移动的澳大利亚图元,“wkbtype(图元类型)”为6表示多多边形,“xmin”、“xmax”、“ymin”、“ymax”、“coords”记录了移动后的形状和位置信息,“version(版本号)”值1为新生成的记录级版本版本号,“opttype(操作类型)”值为4表示移动,“versiontype(版本类型)”为0表示记录级版本;“图元id”为146的记录表示删除的南极洲图元,对于删除的图元,只需记录“version”、“opttype”、“versiontype”,其中“opttype”值为2表示删除;“图元id”为147的记录表示新加的多边形图元,值为现有最大图元编号146加1,“wkbtype”为3表示多边形,“xmin”、“xmax”、“ymin”、“ymax”、“coords”记录了新图元的形状和位置信息,“version”值1为新生成的记录级版本版本号,“opttype”值为1,表示新增,“versiontype”为0,表示记录级版本。

属性版本表中新增了2条记录,如图10所示,“图元id”为146的记录表示删除的南极洲图元,对于删除的图元,只需记录“version”、“opttype”、“versiontype”,其中“opttype”值为2表示删除;“图元id”为147的记录表示新加的多边形图元,值为现有最大图元编号146加1,“version”值1为新生成的记录级版本版本号,“opttype”值为1,表示新增,“versiontype”为0,表示记录级版本,新加的图元属性字段也为空;对于修改的澳大利亚图元,其属性数据没有变化所以没有生成记录。

索引版本表中新增了多条记录,如图11所示,“图元id”为146的记录表示删除的南极洲图元,对于删除的图元,将这个图元对应的每条索引生成一条表示索引删除的记录添加到索引版本表中,“opttype”值为8,表示删除;“图元id”为147的记录表示新增的多边形图元,对于新增的图元,计算其所对应的索引添加到索引版本表中,“opttype”值为2,表示新增;“图元id”为106的记录表示移动的澳大利亚图元,索引版本表中记录的变化相当于执行了删除原有图元然后在新位置新增同样图元两步操作,所以生成了索引删除的记录及索引新增的记录。

所述步骤s4中,空间数据的版本树应用包括版本前进、版本回溯、版本融合、版本刷新,具体的方法为:

1、版本前进

假定现有版本a要变成版本b,所述版本b在版本树中为现有版本a的子孙节点,确定从现有版本a到版本b的路径所经历的所有版本:

1)若所经历路径上没有主版本:在版本表中找到这些版本所对应的记录,然后按照版本树的顺序,从现有版本a的第一个子节点开始,依次合并下一个子节点的增加、修改、删除记录集合,最终得到从现有版本a到版本b的增加、修改、删除记录集合,然后对当前主表中的数据按照这个增加、修改、删除集合做变更;

2)若所经历路径上有主版本:先恢复到离版本b最近的主版本,然后重复1)的操作。

2、版本回溯:

现有版本a要变成版本b,所述版本b在版本树中为现有版本a的子孙节点,确定从现有版本a到版本b的路径所经历的所有版本:

a)若所经历路径上没有主版本:在版本表中找到这些版本所对应的记录,然后按照版本树的顺序,从现有版本b的第一个子节点开始,依次合并下一个子节点的增加、修改、删除记录集合,最终得到从现有版本b到版本a的增加、修改、删除记录集合,然后对增加集合中的元素,在主表中删除对应记录,对于修改和删除集合中的元素,在版本表中先找版本b对应的记录中是否有相应元素,如果找到,则用找到的记录更新/添加到主表,如果找不到,继续找b的父节点版本,直到全部找到为止;

b)若所经历路径上有主版本:先恢复到离版本b最近的主版本,然后重复a)操作。

3、版本融合:

版本a要与另一个版本b融合,形成新的版本,先找到a和b在版本树中的共同祖先点c:

ⅰ)若从c到a和从c到b的两条路径上都没有主版本,计算出从c到a和从c到b的增加、修改、删除记录集合,合并这两个集合,最后得到融合的增加、修改、删除记录集合,然后将a回溯到版本c,再按融合后的增加、修改、删除记录集合进行变更,得到融合版本d,其中d为c的子节点;

ⅱ)若从c到a和从c到b的两条路径上有一条路径上有主版本,或两条路径上都有主版本,则a和b无法融合。

在一个实施方式中,空间数据的主版本演进过程中,所述空间数据版本树表被锁定,空间数据无法编辑。

4、版本刷新

假如其他用户对空间数据进行了更改并提交,当前用户想要获取其他用户修改后的空间数据,则可以使用版本刷新功能,具体的方法为清空当前用户在内存中的待新增图元及属性、待修改图元及属性,待删除图元及属性以及主表的缓存记录,然后重新读取主表中的数据加到缓存中。

至此,空间数据版本管理工作进行完毕。

虽然本发明所揭露的实施方式如上,但所述内容只是为了便于理解本发明而采用的实施方式,并非用以限定本发明。本发明所述方法还可有其他多种实施例,在不背离本发明实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明的权利要求的保护范围。

与现有技术相比,本发明所述方法实现了空间数据编辑操作的合并及冲突处理,实现了记录级版本增量式备份和恢复,提高了效率,实现了空间数据版本的前进、回溯和融合,使得空间数据版本管理更为灵活。

以上所述仅为本发明的优选实施方式,但本发明保护范围并不局限于此,任何本领域的技术人员在本发明公开的技术范围内,可容易地进行改变或变化,而这种改变或变化都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求书的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1