一种线实体的存储方法、装置及存储系统与流程

文档序号:15095848发布日期:2018-08-04 14:32阅读:165来源:国知局

本发明涉及存储领域,尤其涉及一种线实体的存储方法、装置及存储系统。



背景技术:

现有线实体存储技术中,都是按照线实体点集的线性坐标顺序直接在存储空间中进行存储,在进行大量复杂实体调用显示、拓扑运算时效率低,性能较差,亟待改进。



技术实现要素:

有鉴于此,本发明实施例提供一种线实体的存储方法、装置和系统,对线实体按照线实体->层->网格->网格点集的顺序依次进行存储,采用该线实体存储方式,可以有效提高数据的动态调用与局部拓扑运算。

第一方面,本发明实施例提供一种线实体的存储方法,包括以下步骤:

S1:将实体坐标集按尺度遗漏规则划分成多层点集,并将每层存储空间均等划分成多个基本单元;

S2:根据设定阈值MAXPN,判断每层的点密度是否过大,如果点密度过大,则进行调整存储。

根据本发明的第一方面,所述步骤S1包括以下步骤:

S101:设线实体L的坐标集有N个点坐标,分别为[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)],设线实体L最小外接矩形边界为B,其四角坐标分别为(minX,minY),(minX,maxY),(maxX,maxY),(maxX,minY),其中minX=Min(X0,….,XN-1),minY=Min(Y0,…,YN-1),maxX=Max(X0,…,XN-1),maxY=Max(Y0,…,YN-1);

S102:按层划分不同的基本单元:将所述线实体在多个层进行存储,针对每一层,以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元;

S103:将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层,满足每一层中的任意两个相邻的点都不在该层的一个基本单元中。

根据本发明的第一方面,所述步骤S102中以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元包括:

第1层以B为边界,将区域B分别沿X轴和Y轴均分为k等份,每份基本单位大小为(((maxX-minX)/((2^0)*k)),((maxY-minY)/((2^0)*k)));第2层以B为边界,将区域B分别沿X轴和Y轴均分为2k等份,每份基本单位大小为(((maxX-minX)/((2^1)*k)),((maxY-minY)/((2^1)*k)));...;以此推论,第i层以B为边界,将区域B分别沿X轴和Y轴均分为(2^(i-1))*k等份,每份基本单位大小为(((maxX-minX)/((2^(i-1))*k)),((maxY-minY)/((2^(i-1))*k))),以下简写为(LiX,LiY),其中i=1,...,D,D表示存储的层数,k为设定自然数。

根据本发明的第一方面,所述步骤S103中将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层包括:

依次存放线实体L坐标中每一个点(Xn,Yn),n=0,1,...,N-1;对于每一个点,从第1层开始,逐层判断该层是否能够存放该点,判断条件为:如果第i层不存在点,则直接将点(Xn,Yn)放入Li层,如果第i层已经存在节点,则判断点(Xn,Yn)是否满足[Xn/LiX]!=[Xm/LiX]或[Yn/LiY]!=[Ym/LiY];[·]表示对括号中数值取整,i为层序号,i=1,...,D,LiX、LiY分别表示第i层中每个基本单元的长度和宽度,Xm、Ym为点(Xn,Yn)存放之前,最后放在第i层上的点坐标;如果满足该条件说明(Xn,Yn)与该层中相邻的上一个节点不在一个基本单元中,则将点(Xn,Yn)存入第i层,如果不满足,说明(Xn,Yn)与该层中相邻的上一个节点在一个基本单元中,则需要将点(Xn,Yn)存放如下一层即第i+1层,存储时判断条件和第i层的判断条件相同,依次类推,直至存储完线实体的所有N个点。

根据本发明的第一方面,所述步骤S2包括:

针对每一层Li(i=1,2,...,D),执行以下调整存储过程:

S201:统计第i层Li中的点个数LPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为第i层的区域B,转到步骤S202;

S202:以划分基础区域DB的中心点为原点,分别按X,Y轴方向对点集外接矩形进行切割,生成新的四个象限,依次对划分基础区域DB中的第j(j=1,2,...,LPN)个点(Xj,Yj)判断是否满足条件1:(Xj-1,Yj-1),(Xj,Yj),(Xj+1,Yj+1)在同一象限;若满足条件1,则将点(Xi,LYi)放入其自身所在象限;若不满足条件1,则将点(Xj,Yj)存入跨象限部分,其中跨象限部分是新增加的不同于第一二三四象限的第五部分;其中,当j-1<0时默认Xj-1=Xj,Yj-1=Yj,当j+1>LPN时默认Xj+1=Xj,Yj+1=Yj,层内网格划分完成;

S203:对于划分后的四个网格(第一二三四象限),分别判断每个网格内的点个数LPN是否大于所述设定阈值MXPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为该网格区域,转到步骤S202。

根据本发明的第一方面,包括以下步骤:

S3:根据当前调用参数,判断实体每块边界是否相交或包含,以及当前边界是否能满足显示比例,如果满足则调用。

根据本发明的第一方面,所述当前调用参数可以为对应数据边界和/或比例尺。

第二方面,本发明提供一种线实体的存储装置,包括:

分层存储单元,将实体坐标集按尺度遗漏规则划分成多层点集,并将每层存储空间均等划分成多个基本单元;

密度调整单元,根据设定阈值MAXPN,判断每层的点密度是否过大,如果点密度过大,则进行调整存储。

根据本发明的第二方面,所述分层存储单元执行以下步骤:

S101:设线实体L的坐标集有N个点坐标,分别为[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)],设线实体L最小外接矩形边界为B,其四角坐标分别为(minX,minY),(minX,maxY),(maxX,maxY),(maxX,minY),其中minX=Min(X0,….,XN-1),minY=Min(Y0,…,YN-1),maxX=Max(X0,…,XN-1),maxY=Max(Y0,…,YN-1);

S102:按层划分不同的基本单元:将所述线实体在多个层进行存储,针对每一层,以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元;

S103:将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层,满足每一层中的任意两个相邻的点都不在该层的一个基本单元中。

根据本发明的第二方面,所述步骤S102中以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元包括:

第1层以B为边界,将区域B分别沿X轴和Y轴均分为k等份,每份基本单位大小为(((maxX-minX)/((2^0)*k)),((maxY-minY)/((2^0)*k)));第2层以B为边界,将区域B分别沿X轴和Y轴均分为2k等份,每份基本单位大小为(((maxX-minX)/((2^1)*k)),((maxY-minY)/((2^1)*k)));...;以此推论,第i层以B为边界,将区域B分别沿X轴和Y轴均分为(2^(i-1))*k等份,每份基本单位大小为(((maxX-minX)/((2^(i-1))*k)),((maxY-minY)/((2^(i-1))*k))),以下简写为(LiX,LiY),其中i=1,...,D,D表示存储的层数,k为设定自然数。

根据本发明的第二方面,所述步骤S103中将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层包括:

依次存放线实体L坐标中每一个点(Xn,Yn),n=0,1,...,N-1;对于每一个点,从第1层开始,逐层判断该层是否能够存放该点,判断条件为:如果第i层不存在点,则直接将点(Xn,Yn)放入Li层,如果第i层已经存在节点,则判断点(Xn,Yn)是否满足[Xn/LiX]!=[Xm/LiX]或[Yn/LiY]!=[Ym/LiY];[·]表示对括号中数值取整,i为层序号,i=1,...,D,LiX、LiY分别表示第i层中每个基本单元的长度和宽度,Xm、Ym为点(Xn,Yn)存放之前,最后放在第i层上的点坐标;如果满足该条件说明(Xn,Yn)与该层中相邻的上一个节点不在一个基本单元中,则将点(Xn,Yn)存入第i层,如果不满足,说明(Xn,Yn)与该层中相邻的上一个节点在一个基本单元中,则需要将点(Xn,Yn)存放如下一层即第i+1层,存储时判断条件和第i层的判断条件相同,依次类推,直至存储完线实体的所有N个点。

根据本发明的第二方面,所述密度调整单元执行以下步骤:

针对每一层Li(i=1,2,...,D),执行以下调整存储过程:

S201:统计第i层Li中的点个数LPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为第i层的区域B,转到步骤S202;

S202:以划分基础区域DB的中心点为原点,分别按X,Y轴方向对点集外接矩形进行切割,生成新的四个象限,依次对划分基础区域DB中的第j(j=1,2,...,LPN)个点(Xj,Yj)判断是否满足条件1:(Xj-1,Yj-1),(Xj,Yj),(Xj+1,Yj+1)在同一象限;若满足条件1,则将点(Xi,LYi)放入其自身所在象限;若不满足条件1,则将点(Xj,Yj)存入跨象限部分,其中跨象限部分是新增加的不同于第一二三四象限的第五部分;其中,当j-1<0时默认Xj-1=Xj,Yj-1=Yj,当j+1>LPN时默认Xj+1=Xj,Yj+1=Yj,层内网格划分完成;

S203:对于划分后的四个网格(第一二三四象限),分别判断每个网格内的点个数LPN是否大于所述设定阈值MXPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为该网格区域,转到步骤S202。

根据本发明的第二方面,还包括以下单元:

调用单元,根据当前调用参数,判断实体每块边界是否相交或包含,以及当前边界是否能满足显示比例,如果满足则调用。

根据本发明的第二方面,所述当前调用参数可以为对应数据边界和/或比例尺。

本发明的第三方面提供一种线实体的存储系统,包括处理器以及存储设备,处理器执行上述线实体存储方法中的任一项,将线实体内容存储到存储设备中。

根据本发明提供的线实体的存储方法、装置和系统,对线实体按照线实体->层->网格->网格点集的顺序依次进行存储,可以有效提高数据的动态调用与拓扑运算。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明的实施例提供的线实体存储方法的一种流程图;

图2为本发明的实施例提供的将线实体L坐标集的N个点存放入层的一种示意图;

图3为本发明的实施例提供的调整点密度的一种示意图;

图4为本发明的实施例提供的调整点密度的另一种示意图;

图5为本发明的实施例提供的线实体存储装置的一种示意图;

图6为本发明的实施例提供的线实体存储系统的一种示意图;

图7为本发明的实施例提供的性能对比图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

第一方面,本发明实施例提供一种线实体的存储方法,参照图1,包括以下步骤:

S1:将实体坐标集按尺度遗漏规则划分成多层点集,并将每层存储空间均等划分成多个基本单元。

具体的按尺度遗漏规则划分多层点集如图2所示,包括以下步骤:

S101:设线实体L的坐标集有N个点坐标,分别为[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)],设线实体L最小外接矩形边界为B,其四角坐标分别为(minX,minY),(minX,maxY),(maxX,maxY),(maxX,minY),其中minX=Min(X0,….,XN-1),minY=Min(Y0,…,YN-1),maxX=Max(X0,…,XN-1),maxY=Max(Y0,…,YN-1)。

S102:按层划分不同的基本单元:将所述线实体在多个层进行存储,针对每一层,以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元。

具体的,第1层以B为边界,将区域B分别沿X轴和Y轴均分为k等份,每份基本单位大小为(((maxX-minX)/((2^0)*k)),((maxY-minY)/((2^0)*k)));第2层以B为边界,将区域B分别沿X轴和Y轴均分为2k等份,每份基本单位大小为(((maxX-minX)/((2^1)*k)),((maxY-minY)/((2^1)*k)));...;以此推论,第i层以B为边界,将区域B分别沿X轴和Y轴均分为(2^(i-1))*k等份,每份基本单位大小为(((maxX-minX)/((2^(i-1))*k)),((maxY-minY)/((2^(i-1))*k))),以下简写为(LiX,LiY),其中i=1,...,D,D表示存储的层数,k为设定自然数。

S103:将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层,满足每一层中的任意两个相邻的点都不在该层的一个基本单元中。

具体来说,依次存放线实体L坐标中每一个点(Xn,Yn),n=0,1,...,N-1。对于每一个点,从第1层开始,逐层判断该层是否能够存放该点,判断条件为:如果第i层不存在点,则直接将点(Xn,Yn)放入Li层,如果第i层已经存在节点,则判断点(Xn,Yn)是否满足[Xn/LiX]!=[Xm/LiX]或[Yn/LiY]!=[Ym/LiY];[·]表示对括号中数值取整,i为层序号,i=1,...,D,LiX、LiY分别表示第i层中每个基本单元的长度和宽度,Xm、Ym为点(Xn,Yn)存放之前,最后放在第i层上的点坐标;如果满足该条件说明(Xn,Yn)与该层中相邻的上一个节点不在一个基本单元中,则将点(Xn,Yn)存入第i层,如果不满足,说明(Xn,Yn)与该层中相邻的上一个节点在一个基本单元中,则需要将点(Xn,Yn)存放如下一层即第i+1层,存储时判断条件和第i层的判断条件相同,依次类推,直至存储完线实体的所有N个点。

S2:根据设定阈值MAXPN,判断每层的点密度是否过大,如果点密度过大,则进行调整存储。

具体的,参照图3,针对每一层Li(i=1,2,...,D),执行以下调整存储过程:

S201:统计第i层Li中的点个数LPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为第i层的区域B,转到步骤S202;

S202:以划分基础区域DB的中心点为原点,分别按X,Y轴方向对点集外接矩形进行切割,生成新的四个象限,依次对划分基础区域DB中的第j(j=1,2,...,LPN)个点(Xj,Yj)判断是否满足条件1:(Xj-1,Yj-1),(Xj,Yj),(Xj+1,Yj+1)在同一象限。若满足条件1,则将点(Xi,LYi)放入其自身所在象限;若不满足条件1,则将点(Xj,Yj)存入跨象限部分,其中跨象限部分是新增加的不同于第一二三四象限的第五部分。其中,当j-1<0时默认Xj-1=Xj,Yj-1=Yj,当j+1>LPN时默认Xj+1=Xj,Yj+1=Yj,层内网格划分完成;

S203:对于划分后的四个网格(第一二三四象限),分别判断每个网格内的点个数LPN是否大于所述设定阈值MXPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为该网格区域,转到步骤S202。

此过程也可以简化为五叉树存储,如图4所示,其中1,2,3,4,5分别代表网格点集(其中5代表跨象限部分)。

如图3所示,设定阈值MAXPN取3,对线实体L的各点存储情况如下:

S3:根据当前调用参数,判断实体每块边界是否相交或包含,以及当前边界是否能满足显示比例,如果满足则调用。

具体的,所述当前调用参数可以为对应数据边界和/或比例尺。

通过上述存储描述方式可知,本发明对线实体按照线实体->层->网格->网格点集的顺序依次进行存储,采用该线实体存储方式,可以有效提高数据的动态调用与局部拓扑运算。

第二方面,本发明实施例提供一种线实体的存储装置,如图5所示,包括以下单元:

分层存储单元:将实体坐标集按尺度遗漏规则划分成多层点集,并将每层存储空间均等划分成多个基本单元。

具体的,分层存储单元执行以下步骤:

S101:设线实体L的坐标集有N个点坐标,分别为[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)],设线实体L最小外接矩形边界为B,其四角坐标分别为(minX,minY),(minX,maxY),(maxX,maxY),(maxX,minY),其中minX=Min(X0,….,XN-1),minY=Min(Y0,…,YN-1),maxX=Max(X0,…,XN-1),maxY=Max(Y0,…,YN-1)。

S102:按层划分不同的基本单元:将所述线实体在多个层进行存储,针对每一层,以上述最小外接矩形边界B为边界,分别沿X轴和Y轴将区域B均分成多个基本单元。

具体的,第1层以B为边界,将区域B分别沿X轴和Y轴均分为k等份,每份基本单位大小为(((maxX-minX)/((2^0)*k)),((maxY-minY)/((2^0)*k)));第2层以B为边界,将区域B分别沿X轴和Y轴均分为2k等份,每份基本单位大小为(((maxX-minX)/((2^1)*k)),((maxY-minY)/((2^1)*k)));...;以此推论,第i层以B为边界,将区域B分别沿X轴和Y轴均分为(2^(i-1))*k等份,每份基本单位大小为(((maxX-minX)/((2^(i-1))*k)),((maxY-minY)/((2^(i-1))*k))),以下简写为(LiX,LiY),其中i=1,...,D,D表示存储的层数,k为设定自然数。

S103:将线实体L坐标集的N个点[(X0,Y0),(X1,Y1),….,(XN-1,YN-1)]依次存放入相应层,满足每一层中的任意两个相邻的点都不在该层的一个基本单元中。

具体来说,依次存放线实体L坐标中每一个点(Xn,Yn),n=0,1,...,N-1。对于每一个点,从第1层开始,逐层判断该层是否能够存放该点,判断条件为:如果第i层不存在点,则直接将点(Xn,Yn)放入Li层,如果第i层已经存在节点,则判断点(Xn,Yn)是否满足[Xn/LiX]!=[Xm/LiX]或[Yn/LiY]!=[Ym/LiY];[·]表示对括号中数值取整,i为层序号,i=1,...,D,LiX、LiY分别表示第i层中每个基本单元的长度和宽度,Xm、Ym为点(Xn,Yn)存放之前,最后放在第i层上的点坐标;如果满足该条件说明(Xn,Yn)与该层中相邻的上一个节点不在一个基本单元中,则将点(Xn,Yn)存入第i层,如果不满足,说明(Xn,Yn)与该层中相邻的上一个节点在一个基本单元中,则需要将点(Xn,Yn)存放如下一层即第i+1层,存储时判断条件和第i层的判断条件相同,依次类推,直至存储完线实体的所有N个点。

密度调整单元:根据设定阈值MAXPN,判断每层的点密度是否过大,如果点密度过大,则进行调整存储。

具体的,密度调整单元针对每一层Li(i=1,2,...,D),执行以下调整存储过程:

S201:统计第i层Li中的点个数LPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为第i层的区域B,转到步骤S202;

S202:以划分基础区域DB的中心点为原点,分别按X,Y轴方向对点集外接矩形进行切割,生成新的四个象限,依次对划分基础区域DB中的第j(j=1,2,...,LPN)个点(Xj,Yj)判断是否满足条件1:(Xj-1,Yj-1),(Xj,Yj),(Xj+1,Yj+1)在同一象限。若满足条件1,则将点(Xi,LYi)放入其自身所在象限;若不满足条件1,则将点(Xj,Yj)存入跨象限部分,其中跨象限部分是新增加的不同于第一二三四象限的第五部分。其中,当j-1<0时默认Xj-1=Xj,Yj-1=Yj,当j+1>LPN时默认Xj+1=Xj,Yj+1=Yj,层内网格划分完成;

S203:对于划分后的四个网格(第一二三四象限),分别判断每个网格内的点个数LPN是否大于所述设定阈值MXPN,如果LPN小于等于所述设定阈值MXPN,直接按坐标顺序进行存储;否则如果LPN大于所述设定阈值MAXPN时,设定划分基础区域DB为该网格区域,转到步骤S202。

调用单元:根据当前调用参数,判断实体每块边界是否相交或包含,以及当前边界是否能满足显示比例,如果满足则调用。

通过上述存储装置的描述可知,本发明对线实体按照线实体->层->网格->网格点集的顺序依次进行存储,采用该线实体存储方式,可以有效提高数据的动态调用与局部拓扑运算。

第三方面,本发明实施例提供一种线实体的存储系统,如图6所示,包括处理器以及存储设备,处理器执行前述任一实施例提供的线实体存储方法,将线实体内容存储到存储设备中。处理器对上述步骤的具体执行过程可以参见前述实施例的描述,在此不再赘述。

在同一台计算机,基于相同的数据集索引模型下分别对采用该技术和常规存储方式的性能比较如图7所示。

将理解的是,上面描述的益处和优点可以涉及一个实施例,或者可以涉及若干实施例。这些实施例并不限于解决所陈述问题中的任何一个或全部的实施例或者具有所陈述益处和优点中的任何一个或全部的实施例。

对“一”项的任何提及是指这些项中的一个或多个。本文中使用术语“包括”来表示包含所标识的方法方框或元件,但是这样的方框或元件并不包括排他列表,并且装置可以包含额外的方框或元件,并且方法可以包含额外的操作或元素。

本文描述的方法的步骤可以以任何适当的顺序执行,或者在适当的情况下同时执行。此外,可以从任意方法中删除单独的方框,而不脱离本文描述的主题的精神和范围。上面描述的任意例子的方案可以与所描述的任意其它例子的方案组合,以形成其它例子,而不丧失所请求的效果。

将理解的是,仅仅通过例子的方式给出了优选实施例的以上描述,并且本领域技术人员可以做出各种修改。虽然上面以某种具体度或者参考一个或多个单独实施例描述了各个实施例,但是本领域技术人员可以对所公开的实施例做出大量的改变,而不脱离本发明的精神或范围。

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