1.一种基于半分解策略的多维空间数据索引方法,其特征在于包括创建半分解树结构过程,具体包括以下步骤:(a1)向初始化的半分解树T’传入一个多维空间节点Node;
(a2)判断多维空间节点Node的空间对象集合数量是否超出预设的最大限制值,若未超出,将多维空间节点Node中的数据写回磁盘内,结束创建过程;否则继续执行步骤(a3);
(a3)对多维空间节点Node按照维度的先后顺了,对每个维度进行空间范围的均等划分,生成2个以上子空间;(a4)判断每个子空间中的空间对象数量,选择空间对象最多的子空间SubNodemax,生成新的多维空间节点LeafNode;
(a3)对多维空间节点Node按照维度的先后顺序,对每个维度进行空间范围的均等划分,生成2个以上子空间;
(a4)判断每个子空间中的空间对象数量,选择空间对象最多的子空间SubNodemax,生成新的多维空间节点LeafNode;
(a5)将多维空间节点Node中关于SubNodemax的空间对象添加到LeafNode中,同时移除多维空间节点Node中SubNodemax的空间对象;
(a6)返回步骤(1),直到原空间节点Node与新生成的LeafNode节点的空间对象数量均不超过最大限制,进入步骤(a7)(a7)使用移位操作计算LeafNode在半分解树中的深度_depth;
(a8)将_depth与全分解树T的深度depth进行比较,取较大的数赋值给depth;
(a9)返回步骤(a1)。
2.根据权利要求1所述的基于半分解策略的多维空间数据索引方法,其特征在于还包括插入数据过程,具体包括以下步骤:(b1)向半分解树T’传入一个待插入的空间对象Object1;
(b2)计算Object1在半分解树T’的最深处所属的多维空间的整数编码,记为Code1;
(b3)使用整数编码移位操作对Code1依次向上进行移位操作,当在哈希表中查找到Code1时,停止移位操作;
(b4)根据Code1在磁盘中读取空间对象,生成整数编码为Code1的第一多维空间节点Node1;
(b5)将Object1添加到Node1的空间对象集合中;
(b6)对Node1执行步骤(a1)~(a9)所述的半分解策略操作,其中将步骤(a1)~(a9)中的Node替换为Node1执行。
3.根据权利要求1所述的基于半分解策略的多维空间数据索引方法,其特征在于还包括查询数据过程,具体包括以下步骤:(c1)传入一个待查询的多维空间范围Envelope;
(c2)计算Envelope在半分解树T’的最深处所属的多维空间的整数编码,记为Code2;
(c3)若Code2为0,说明该半分解树T’对应的多维空间不能保全包含查询空间,为相交或者相离,若相离,直接返回空;若相交,令Code2为半分解树T’的根节点的编码,执行步骤(c5);反之若Code2不为0,执行步骤(c4);
(c4)判断Code2在哈希表中是否存在,不存在采用整数移位操作获取上层编码,直到哈希表包含Code2,读取该Code2的磁盘数据,生成整数编码为Code2的第二多维空间节点Node2,将Node2中的空间对象集合与Envelope作比较,添加数据到结果中后,返回结果,结束程序;如果Code2在哈希表中存在,执行步骤(c5);
(c5)读取Code2所对应的磁盘数据,生成Code2对应的多维空间节点Node2,将Node2中的空间对象与Envelope的空间范围作比较,将属于Envelope的空间对象添加到结果中;
(c6)分解多维空间节点Node2,生成2个以上子空间,每个子空间对应一个整数编码,遍历整数编码,判断哈希表中是否包含该整数编码,包含则返回步骤(c5),否则进入步骤(c7);
(c7)释放内存中的节点数据,将查询结果不存在返回,结束查询。
4.根据权利要求1所述的基于半分解策略的多维空间数据索引方法,其特征在于还包括删除数据过程,具体包括以下步骤:(d1)传入一个待删除的空间对象,记为Object3;
(d2)计算Object3在半分解树T’的最深处所属的多维空间的整数编码,记为Code3;
(d3)若Code3等于0,则Object3不在该半分解树所对应的最大多维空间内,结束删除过程;否则继续执行以下操作:(d4)使用整数编码移位操作对Code3依次向上进行移位操作,当在哈希表中查找到Code3时,停止移位操作;
(d5)根据Code3在磁盘中读取空间对象Object3,生成整数编码为Code3的第三多维空间节点Node3;
(d6)依次遍历Node3中空间对象集合,查找是否存在一个与Object3对应的空间对象属性一样的空间对象,若未找到,结束操作,释放Node3节点;若找到,从空间对象集合中删除该空间对象;
(d7)判断Node3的空间对象集合数量是否为0,若不为0,将Node3的数据写回磁盘;否则执行下面操作;
(d8)设Node3的维度为n,循环整数i从0到n2,将Code3向左移位n位后加上i得到Node3的子空间的整数编码LeafCode3,若在哈希表中找到LeafCode3,结束循环,修改磁盘中的Node3数据;反之,当循环至结束也没有在哈希表中找到LeafCode3,则释放Node3在磁盘中占据的磁盘空间。