CN110019984A - 空间索引建立方法、装置、电子设备及可读存储介质 - Google Patents
空间索引建立方法、装置、电子设备及可读存储介质 Download PDFInfo
- Publication number
- CN110019984A CN110019984A CN201711445833.9A CN201711445833A CN110019984A CN 110019984 A CN110019984 A CN 110019984A CN 201711445833 A CN201711445833 A CN 201711445833A CN 110019984 A CN110019984 A CN 110019984A
- Authority
- CN
- China
- Prior art keywords
- polygon
- space region
- complex
- edges
- intersection point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 238000004422 calculation algorithm Methods 0.000 claims description 67
- 238000004364 calculation method Methods 0.000 claims description 19
- 238000010586 diagram Methods 0.000 description 19
- 230000001174 ascending effect Effects 0.000 description 8
- 238000004590 computer program Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 2
- 239000002131 composite material Substances 0.000 description 2
- 238000012545 processing Methods 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000010365 information processing Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9027—Trees
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Image Generation (AREA)
Abstract
本公开实施例公开了一种空间索引建立方法、装置、电子设备及可读存储介质,所述方法包括:确定多边形空间区域是否是复杂多边形;当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;为所述多个简单多边形的组合建立网格索引,使得可以利用简单多边形的组合,解决复杂多边形空间区域的网格索引建立问题。
Description
技术领域
本公开涉及空间信息处理技术领域,具体涉及一种空间索引建立方法、装置、电子设备及可读存储介质。
背景技术
空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空间对象实体的指针。作为空间索引的一种实现方式,网格型空间索引的基本思想是将研究区域用横竖线条划分大小相等或不等的网格,记录每一个网格所包含的空间实体。当用户进行空间查询时,首先计算出用户查询对象所在网格,然后在该网格中快速查询所选空间实体。
发明内容
在实际应用中,发明人发现:相关技术中,当多边形空间区域中存在复杂多边形时,由于难以确定复杂多边形的正负,因此也就难以确定复杂多边形的内部区域或外部区域,因此也就无法为多边形空间区域建立网格索引。
本公开实施例提供一种空间索引建立方法、装置及电子设备。
第一方面,本公开实施例中提供了一种空间索引建立方法,包括:
确定多边形空间区域是否是复杂多边形;
当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;
为所述多个简单多边形的组合建立网格索引。
结合第一方面,本公开在第一方面的第一种实现方式中,还包括:
当确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
结合第一方面,本公开在第一方面的第二种实现方式中,所述确定多边形空间区域是否是复杂多边形,包括:
通过扫描线算法对所述多边形空间区域的各条边进行计算;
当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。
结合第一方面的第二种实现方式,本公开在第一方面的第三种实现方式中,所述通过扫描线算法对所述多边形空间区域的各条边进行计算,包括:
建立链表以记录所述多边形空间区域的具有交点的各条边的端点和交点;
建立二叉树以记录与扫描线算法中的扫描线相交的所述多边形空间区域的各条边的端点;
通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算各条边之间是否存在交点。
结合第一方面的第三种实现方式,本公开在第一方面的第四种实现方式中,所述当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点,包括:
当通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;
根据链表中存在所述交点确定所述多边形空间区域为复杂多边形。
结合第一方面的第二种实现方式,本公开在第一方面的第五种实现方式中,所述扫描线算法为Bentley–Ottmann扫描线算法。
第二方面,本公开实施例中提供了一种空间索引建立装置,包括:
确定模块,用于确定多边形空间区域是否是复杂多边形;
拆解模块,用于当所述确定模块确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;
建立模块,用于为所述多个简单多边形的组合建立网格索引。
结合第二方面,本公开在第二方面的第一种实现方式中,所述建立模块还被配置为:
当所述确定模块确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
结合第二方面,本公开在第二方面的第二种实现方式中,所述确定模块包括:
第一计算子模块,用于通过扫描线算法对所述多边形空间区域的各条边进行计算;
第一确定子模块,用于当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。
结合第二方面的第二种实现方式,本公开在第二方面的第三种实现方式中,所述第一计算子模块包括:
第一建立子模块,用于建立链表以记录所述多边形空间区域的具有交点的各条边的端点和交点;
第二建立子模块,用于建立二叉树以记录与扫描线算法中的扫描线相交的所述多边形空间区域的各条边的端点;
第二计算子模块,用于通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算各条边之间是否存在交点。
结合第二方面的第三种实现方式,本公开在第二方面的第四种实现方式中,所述第一确定子模块包括:
记录子模块,用于当通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;
第二确定子模块,用于根据链表中存在所述交点确定所述多边形空间区域为复杂多边形。
结合第二方面的第二种实现方式,本公开在第二方面的第五种实现方式中,所述扫描线算法为Bentley–Ottmann扫描线算法。
第三方面,本公开实施例中提供了一种电子设备,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如第一方面、第一方面的第一实施方式至第五实施方式任一项所述的方法。
第四方面,本公开实施例中提供了一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如第一方面、第一方面的第一实施方式至第五实施方式任一项所述的方法。
本公开实施例提供的技术方案可以包括以下有益效果:
根据本公开实施例提供的技术方案,通过确定多边形空间区域是否是复杂多边形;当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;为所述多个简单多边形的组合建立网格索引,使得可以利用简单多边形的组合,解决复杂多边形空间区域的网格索引建立问题。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
结合附图,通过以下非限制性实施方式的详细描述,本公开的其它特征、目的和优点将变得更加明显。在附图中:
图1示出根据本公开一实施方式的空间索引建立方法的流程图;
图2示出根据图1所示实施方式的步骤S101的一个示例的流程图;
图3示出根据图2所示实施方式的步骤S201的一个示例的流程图;
图4示出根据图2所示实施方式的步骤S202的一个示例的流程图;
图5示出根据本公开一实施方式的空间索引建立装置的结构框图;
图6示出根据图5所示实施方式的确定模块501的一个示例的结构框图;
图7示出根据图6所示实施方式的第一计算子模块601的一个示例的结构框图;
图8示出根据图6所示实施方式的第一确定子模块602的一个示例的结构框图;
图9示出根据本公开一实施方式的电子设备的结构框图;
图10是适于用来实现根据本公开一实施方式的空间索引建立方法的计算机系统的结构示意图;
图11是根据本公开一实施例的复杂多边形的一个示意图。
具体实施方式
下文中,将参考附图详细描述本公开的示例性实施方式,以使本领域技术人员可容易地实现它们。此外,为了清楚起见,在附图中省略了与描述示例性实施方式无关的部分。
在本公开中,应理解,诸如“包括”或“具有”等的术语旨在指示本说明书中所公开的特征、数字、步骤、行为、部件、部分或其组合的存在,并且不欲排除一个或多个其他特征、数字、步骤、行为、部件、部分或其组合存在或被添加的可能性。
另外还需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。
在本公开中,由于空间区域一般是通过多个空间坐标点来表述的,将各个坐标点通过线段连接起来,就构成了多边形空间区域。因此,可以将空间区域认为是多边形空间区域。在本公开中,多边形分为简单多边形和复杂多边形两类。因此,多边形空间区域可以是简单多边形或复杂多边形。
在此定义简单多边形如下:在几何形状中,简单多边形是由直线,非相交的线段或‘边’组成的扁平形状,其成对连接以行程封闭路径。简单多边形(简单多边形分凸多边形和凹多边形)还可以定义为:
1.周界不自交的多边形。
2.简单多边形满足以下条件:
2.1顶点与顶点不重合
2.2顶点不在边上(即,其他边构成的顶点不在此边上)
2.3边与边不相交(除两条边相交构成顶点以外)
不符合以上简单多边形定义的多边形即为复杂多边形。换言之,周界自交的多边形为复杂多边形。顶点与顶点重合的多边形为复杂多边形。边上有其他边构成的顶点的多边形为复杂多边形。边与边相交的多边形为复杂多边形。
图11是根据本公开一实施例的复杂多边形的一个示意图。
如图11所示,多边形ABCDEF的两条边BC和EF相交,因此多边形ABCDEF是复杂多边形。
一般情况下,可以认为多边形的坐标点顺时针排列,表示正多边形;多边形的坐标点逆时针排列,表示负多边形。正多变形表示封闭图形的内部区域,负多边形便是封闭图形的外部区域。多边形的正负性有助于我们表示组合图形区域,例如含有空洞的组合图形。判断多边形正负的方法可以是射线法。关于射线法的更多原理与细节与本公开实施例的主旨无关,在此不做赘述。
值得注意的是,如果同时要保持多边形的正负性,则射线法本身只能判断正多边形(总是认为多边形表示的是封闭区域内的空间),当多边形为负时我们需要对相交结果的计算求反。在一个实施例中,可以使用多边形的面积判断多边形的正负性,即认为面积为正的多边形为正多边形,面积为负的多边形为负多边形。
但是,这种确定多边形正负性的方法不适于复杂多边形的情况。例如,在利用射线法确定图11所示的多边形ABCDEF的正负性时,从A点开始根据顺时针为正逆时针为负的约定,可以得到多边形ABCDEF的面积为0,这显然与人们的直觉相悖。因此,难以判断多边形的正负。而缺失了正负性,也就无法确定图形表示的是外部区域或者内部区域。
自相交的复杂多边形所导致的正负性难以确定的问题使得难以建立复杂多边形的网格索引。因此,本公开实施例的技术方案通过识别复杂多边形,使用多个简单多边形的组合来表征复杂多边形,进而可以为简单多边形的组合建立网格索引,从解决了复杂多边形的网格索引建立问题。
图1示出根据本公开一实施方式的空间索引建立方法的流程图。如图1所示,所述空间索引建立方法包括以下步骤S101-S103:
在步骤S101中,确定多边形空间区域是否是复杂多边形。
在步骤S102中,当在步骤S101中确定多边形空间区域是复杂多边形时,将多边形空间区域拆解为多个简单多边形的组合。
在步骤S103中,为多个简单多边形的组合建立网格索引。
在本公开的实施例中,通过确定多边形空间区域是否是复杂多边形;当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;为所述多个简单多边形的组合建立网格索引,使得可以利用简单多边形的组合,解决复杂多边形空间区域的网格索引建立问题。
在根据本公开的另一个实施例中,如图1所示,在步骤S103中,当在步骤S101中确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
在本公开实施例中,当确定多边形空间区域不是复杂多边形时,即可确定该多边形空间区域是简单多边形。对于简单多边形的空间区域,可以建立网格索引。
在本公开的实施例中,通过当确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引,使得可以方便地为多边形空间区域建立网格索引。
图2示出根据图1所示实施方式的步骤S101的一个示例的流程图。如图2所示,步骤S101包括步骤S201和S202。
在步骤S201中,通过扫描线算法对多边形空间区域的各条边进行计算。
在步骤S202中,当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。
在相关技术中,可以采用扫描线算法计算线段之间的交点。在本公开的一个实施例中,可以采用扫描线算法对多边形空间区域的各条边进行计算,当计算出至少一条边上存在至少一个与另一条边的交点时,可以确定多边形空间区域为复杂多边形。在确定了多边形空间区域为复杂多边形的情况下,则可以将多边形空间区域拆解为多个简单多边形的组合,进而为多个简单多边形的组合建立网格索引。
在本公开的一个实施例中,扫描线算法基本思想是:x-y平面直角坐标系内有多条线段,一条与x轴平行的直线从上向下平移,平移的过程中会与某些线段相交,在任何时刻只考虑这些与扫描线相交的线段之间是否相交。扫描线算法考虑某时刻这条扫描线上的M条线段是否相交,其中,M<=N,N是线段总数。
在根据本公开的另一个实施例中,扫描线算法可以为Bentley–Ottmann扫描线算法。本领域技术人员可以理解,本公开实施例所采用的扫描线算法不限于Bentley–Ottmann扫描线算法。根据本公开的教导,可以采用各种扫描线算法来对多边形空间区域的各条边进行计算,以计算边上的交点,进而确定多边形空间区域是否为复杂多边形。
本领域技术人员可以理解,当在x-y平面直角坐标系内采用扫描线算法对多边形空间区域的各条边进行计算时,扫描线的扫描方式可以是从上向下、从下向上、从左向右、从右向左中的任一种。本公开对此不作限制。
图3示出根据图2所示实施方式的步骤S201的一个示例的流程图。步骤S201包括步骤S301、S302和S303。
在步骤S301中,建立链表以记录多边形空间区域的具有交点的各条边的端点和交点。
在步骤S302中,建立二叉树以记录与扫描线算法中的扫描线相交的多边形空间区域的各条边的端点。
在步骤S303中,通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算各条边之间是否存在交点。
在本公开的一个实施例中,在扫描线行进的过程中,可以动态维护两个数据结构:链表和二叉树。链表负责记录全部线段的端点和已经找到的交点,每个点按y坐标递减顺序存储(y坐标相同的,按x坐标递增顺序存储)。二叉树负责记录与扫描线相交的线段,每条线段按照上端点的x坐标递增顺序存储。本领域技术人员可以理解,根据预先设定,链表记录记录每个点的顺序可以不按y坐标递减顺序存储。例如,当扫描线从下向上进行扫描时,链表可以按y坐标递增顺序存储,此外,y坐标相同的,可以按x坐标递增顺序存储,也可以按x坐标递减顺序存储。类似地,二叉树记录线段的端点时,记录顺序可以按照上端点的x坐标递减顺序存储。本领域技术人员可以理解,根据需要,链表和二叉树的存储顺序可以是任一种顺序。
在本公开的一个实施例中,扫描线从上向下扫描时,从头到尾依次处理链表上的每个点,在每处理一个新的点时,会相应地更新链表和二叉树。在这条扫面线上,相交的线段一定是相邻的,当然,也存在线段既不相邻又不相交的情况。可以将相邻的线段称为互为邻居,例如,在线段a左侧与线段a相邻的线段b就是线段a的左邻居,在线段a右侧与线段a相邻的线段c就是线段a的右邻居。扫描到的新的点共有三种:新点是某线段的上端点,新点是某线段的下端点,新点是交点。
在本公开的另一个实施例中,当新点是某线段的上端点时,把这个端点存入二叉树,然后在二叉树中找到该上端点的左邻居和右邻居。检查该上端点所代表的线段与左邻居是否相交,该上端点所代表的线段与右邻居是否相交。如果有新交点,将新交点存入链表。新交点会在扫描线的下方,新交点在链表中的位置也在该上端点的后面,会在未来某个时刻得到处理。如果这个新交点的位置在该上端点之前,则说明扫描线在之前已经经过了这个新交点,即,该新交点已经被处理过了。
在本公开的另一个实施例中,当新点是某线段的下端点时,在二叉树内找到该下端点相应的上端点,然后找到上端点的左邻居和右邻居。把找到的上端点从二叉树删除,即,将该上端点代表的线段从二叉树中删除,之后检查左邻居与右邻居是否相交。换言之,当扫描过的线段上不存在交点时,从二叉树中删除该线段。如果有交点,则将交点存入链表。
在本公开的另一个实施例中,当新点是交点时,输出这个交点的坐标。之后,在二叉树中找到这个交点所在的两条线段pl和pr(假设pl在pr的左边),再找到线段pl的左邻居pa,和线段pr的右邻居pb,检查线段pr与线段pa是否相交,线段pl与线段pb是否相交。如果有交点,则将交点存入链表。
根据本公开实施例提供的技术方案,通过建立链表以记录多边形空间区域的具有交点的各条边的端点和交点;建立二叉树以记录与扫描线算法中的扫描线相交的多边形空间区域的各条边的端点;通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算各条边之间是否存在交点,可以便捷地确定是否存在线段的交点,进而确定多边形是否是复杂多边形。
图4示出根据图2所示实施方式的步骤S202的一个示例的流程图。如图4所示,步骤S202包括步骤S401和S402。
在步骤S401中,当通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在链表中记录所述交点。
在步骤S402中,根据链表中存在所述交点确定多边形空间区域为复杂多边形。
根据本公开实施例提供的技术方案,通过当通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在链表中记录所述交点;根据链表中存在所述交点确定多边形空间区域为复杂多边形,可以便捷地确定是否存在线段的交点,进而确定多边形是否是复杂多边形。
图5示出根据本公开一实施方式的空间索引建立装置的结构框图。如图5所示,所述空间索引建立装置包括确定模块501、拆解模块502、建立模块503。
确定模块501用于确定多边形空间区域是否是复杂多边形。
拆解模块502用于当确定模块501确定多边形空间区域是复杂多边形时,将多边形空间区域拆解为多个简单多边形的组合。
建立模块503用于为多个简单多边形的组合建立网格索引。
在本公开的实施例中,通过确定模块,用于确定多边形空间区域是否是复杂多边形;拆解模块,用于当确定模块确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;建立模块,用于为多个简单多边形的组合建立网格索引,使得可以利用简单多边形的组合,解决复杂多边形空间区域的网格索引建立问题。
在根据本公开的另一个实施例中,如图5所示,建立模块503还被配置为:当确定模块501确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
在本公开实施例中,当确定多边形空间区域不是复杂多边形时,即可确定该多边形空间区域是简单多边形。对于简单多边形的空间区域,可以建立网格索引。
在本公开的实施例中,通过立模块还被配置为当所述确定模块确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
图6示出根据图5所示实施方式的确定模块501的一个示例的结构框图。如图6所示,确定模块501包括第一计算子模块601和第一确定子模块602。
第一计算子模块601用于通过扫描线算法对多边形空间区域的各条边进行计算。
第一确定子模块602用于当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。
在相关技术中,可以采用扫描线算法计算线段之间的交点。在本公开的一个实施例中,可以采用扫描线算法对多边形空间区域的各条边进行计算,当计算出至少一条边上存在至少一个与另一条边的交点时,可以确定多边形空间区域为复杂多边形。在确定了多边形空间区域为复杂多边形的情况下,则可以将多边形空间区域拆解为多个简单多边形的组合,进而为多个简单多边形的组合建立网格索引。
在本公开的一个实施例中,扫描线算法基本思想是:x-y平面直角坐标系内有多条线段,一条与x轴平行的直线从上向下平移,平移的过程中会与某些线段相交,在任何时刻只考虑这些与扫描线相交的线段之间是否相交。扫描线算法考虑某时刻这条扫描线上的M条线段是否相交,其中,M<=N,N是线段总数。
在根据本公开的另一个实施例中,扫描线算法可以为Bentley–Ottmann扫描线算法。本领域技术人员可以理解,本公开实施例所采用的扫描线算法不限于Bentley–Ottmann扫描线算法。根据本公开的教导,可以采用各种扫描线算法来对多边形空间区域的各条边进行计算,以计算边上的交点,进而确定多边形空间区域是否为复杂多边形。
本领域技术人员可以理解,当在x-y平面直角坐标系内采用扫描线算法对多边形空间区域的各条边进行计算时,扫描线的扫描方式可以是从上向下、从下向上、从左向右、从右向左中的任一种。本公开对此不作限制。
图7示出根据图6所示实施方式的第一计算子模块601的一个示例的结构框图。如图7所示,第一计算子模块601包括第一建立子模块701、第二建立子模块702和第二计算子模块703。
第一建立子模块701用于建立链表以记录多边形空间区域的具有交点的各条边的端点和交点。
第二建立子模块702用于建立二叉树以记录与扫描线算法中的扫描线相交的多边形空间区域的各条边的端点。
第二计算子模块703用于通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算各条边之间是否存在交点。
在本公开的一个实施例中,在扫描线行进的过程中,可以动态维护两个数据结构:链表和二叉树。链表负责记录全部线段的端点和已经找到的交点,每个点按y坐标递减顺序存储(y坐标相同的,按x坐标递增顺序存储)。二叉树负责记录与扫描线相交的线段,每条线段按照上端点的x坐标递增顺序存储。本领域技术人员可以理解,根据预先设定,链表记录记录每个点的顺序可以不按y坐标递减顺序存储。例如,当扫描线从下向上进行扫描时,链表可以按y坐标递增顺序存储,此外,y坐标相同的,可以按x坐标递增顺序存储,也可以按x坐标递减顺序存储。类似地,二叉树记录线段的端点时,记录顺序可以按照上端点的x坐标递减顺序存储。本领域技术人员可以理解,根据需要,链表和二叉树的存储顺序可以是任一种顺序。
在本公开的一个实施例中,扫描线从上向下扫描时,从头到尾依次处理链表上的每个点,在每处理一个新的点时,会相应地更新链表和二叉树。在这条扫面线上,相交的线段一定是相邻的,当然,也存在线段既不相邻又不相交的情况。可以将相邻的线段称为互为邻居,例如,在线段a左侧与线段a相邻的线段b就是线段a的左邻居,在线段a右侧与线段a相邻的线段c就是线段a的右邻居。扫描到的新的点共有三种:新点是某线段的上端点,新点是某线段的下端点,新点是交点。
在本公开的另一个实施例中,当新点是某线段的上端点时,把这个端点存入二叉树,然后在二叉树中找到该上端点的左邻居和右邻居。检查该上端点所代表的线段与左邻居是否相交,该上端点所代表的线段与右邻居是否相交。如果有新交点,将新交点存入链表。新交点会在扫描线的下方,新交点在链表中的位置也在该上端点的后面,会在未来某个时刻得到处理。如果这个新交点的位置在该上端点之前,则说明扫描线在之前已经经过了这个新交点,即,该新交点已经被处理过了。
在本公开的另一个实施例中,当新点是某线段的下端点时,在二叉树内找到该下端点相应的上端点,然后找到上端点的左邻居和右邻居。把找到的上端点从二叉树删除,即,将该上端点代表的线段从二叉树中删除,之后检查左邻居与右邻居是否相交。换言之,当扫描过的线段上不存在交点时,从二叉树中删除该线段。如果有交点,则将交点存入链表。
在本公开的另一个实施例中,当新点是交点时,输出这个交点的坐标。之后,在二叉树中找到这个交点所在的两条线段pl和pr(假设pl在pr的左边),再找到线段pl的左邻居pa,和线段pr的右邻居pb,检查线段pr与线段pa是否相交,线段pl与线段pb是否相交。如果有交点,则将交点存入链表。
根据本公开实施例提供的技术方案,通过第一建立子模块,用于建立链表以记录多边形空间区域的具有交点的各条边的端点和交点;第二建立子模块,用于建立二叉树以记录与扫描线算法中的扫描线相交的多边形空间区域的各条边的端点;第二计算子模块,用于通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算各条边之间是否存在交点,可以便捷地确定是否存在线段的交点,进而确定多边形是否是复杂多边形。
图8示出根据图6所示实施方式的第一确定子模块602的一个示例的结构框图。如图4所示,第一确定子模块602包括记录子模块801和第二确定子模块802。
记录子模块801用于当通过扫描线算法,基于二叉树中记录的多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在链表中记录所述交点。
第二确定子模块802用于根据链表中存在所述交点确定多边形空间区域为复杂多边形。
根据本公开实施例提供的技术方案,通过记录子模块,用于当通过扫描线算法,基于二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;第二确定子模块,用于根据链表中存在交点确定多边形空间区域为复杂多边形,可以便捷地确定是否存在线段的交点,进而确定多边形是否是复杂多边形。
本公开还公开了一种电子设备,图9示出根据本公开一实施方式的电子设备的结构框图,如图9所示,所述电子设备900包括存储器902和处理器901;其中,
所述存储器902用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器901执行以实现前述各方法步骤中的全部或部分步骤。
图10是适于用来实现根据本公开一实施方式的空间索引建立方法的计算机系统的结构示意图。
如图10所示,计算机系统1000包括中央处理单元(CPU)1001,其可以根据存储在只读存储器(ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(RAM)1003中的程序而执行上述图1-8所示的实施方式中的各种处理。在RAM1003中,还存储有系统1000操作所需的各种程序和数据。CPU1001、ROM1002以及RAM1003通过总线1004彼此相连。输入/输出(I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本公开的实施方式,上文参考图1描述的方法可以被实现为计算机软件程序。例如,本公开的实施方式包括一种计算机程序产品,其包括有形地包含在及其可读介质上的计算机程序,所述计算机程序包含用于执行前述空间索引建立方法的程序代码。在这样的实施方式中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。
附图中的流程图和框图,图示了按照本公开各种实施方式的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,路程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施方式中所涉及到的单元或模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元或模块也可以设置在处理器中,这些单元或模块的名称在某种情况下并不构成对该单元或模块本身的限定。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施方式中所述装置中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。计算机可读存储介质存储有一个或者一个以上程序,所述程序被一个或者一个以上的处理器用来执行描述于本公开的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
本公开公开了A1、一种空间索引建立方法,包括:确定多边形空间区域是否是复杂多边形;当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;为所述多个简单多边形的组合建立网格索引。A2、根据A1所述的方法,还包括:当确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。A3、根据A1所述的方法,所述确定多边形空间区域是否是复杂多边形,包括:通过扫描线算法对所述多边形空间区域的各条边进行计算;当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。A4、根据A3所述的方法,所述通过扫描线算法对所述多边形空间区域的各条边进行计算,包括:建立链表以记录所述多边形空间区域的具有交点的各条边的端点和交点;建立二叉树以记录与扫描线算法中的扫描线相交的所述多边形空间区域的各条边的端点;通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算各条边之间是否存在交点。A5、根据A4所述的方法,所述当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点,包括:当通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;根据链表中存在所述交点确定所述多边形空间区域为复杂多边形。A6、根据A3所述的方法,所述扫描线算法为Bentley–Ottmann扫描线算法。
本公开公开了B7、一种空间索引建立装置,包括:确定模块,用于确定多边形空间区域是否是复杂多边形;拆解模块,用于当所述确定模块确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;建立模块,用于为所述多个简单多边形的组合建立网格索引。B8、根据B7所述的装置,所述建立模块还被配置为:当所述确定模块确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。B9、根据B7所述的装置,所述确定模块包括:第一计算子模块,用于通过扫描线算法对所述多边形空间区域的各条边进行计算;第一确定子模块,用于当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。B10、根据B9所述的装置,所述第一计算子模块包括:第一建立子模块,用于建立链表以记录所述多边形空间区域的具有交点的各条边的端点和交点;第二建立子模块,用于建立二叉树以记录与扫描线算法中的扫描线相交的所述多边形空间区域的各条边的端点;第二计算子模块,用于通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算各条边之间是否存在交点。B11、根据B10所述的装置,所述第一确定子模块包括:记录子模块,用于当通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;第二确定子模块,用于根据链表中存在所述交点确定所述多边形空间区域为复杂多边形。B12、根据B9所述的装置,所述扫描线算法为Bentley–Ottmann扫描线算法。
本公开公开了C13、一种电子设备,包括存储器和处理器;其中,所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如A1-A6任一项所述的方法。
本公开公开了D14、一种计算机可读存储介质,其上存储有计算机指令,该计算机指令被处理器执行时实现如A1-A6任一项所述的方法。
Claims (10)
1.一种空间索引建立方法,其特征在于,包括:
确定多边形空间区域是否是复杂多边形;
当确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;
为所述多个简单多边形的组合建立网格索引。
2.根据权利要求1所述的方法,其特征在于,还包括:
当确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
3.根据权利要求1所述的方法,其特征在于,所述确定多边形空间区域是否是复杂多边形,包括:
通过扫描线算法对所述多边形空间区域的各条边进行计算;
当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点。
4.根据权利要求3所述的方法,其特征在于,所述通过扫描线算法对所述多边形空间区域的各条边进行计算,包括:
建立链表以记录所述多边形空间区域的具有交点的各条边的端点和交点;
建立二叉树以记录与扫描线算法中的扫描线相交的所述多边形空间区域的各条边的端点;
通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算各条边之间是否存在交点。
5.根据权利要求4所述的方法,其特征在于,所述当计算结果指示至少一条边上存在至少一个与另一条边的交点时,确定所述多边形空间区域为复杂多边形,其中,所述交点是除两条边相交的顶点以外的交点,包括:
当通过扫描线算法,基于所述二叉树中记录的所述多边形空间区域的各条边的端点,计算出各条边之间存在交点时,在所述链表中记录所述交点;
根据链表中存在所述交点确定所述多边形空间区域为复杂多边形。
6.根据权利要求3所述的方法,其特征在于,所述扫描线算法为Bentley–Ottmann扫描线算法。
7.一种空间索引建立装置,其特征在于,包括:
确定模块,用于确定多边形空间区域是否是复杂多边形;
拆解模块,用于当所述确定模块确定所述多边形空间区域是复杂多边形时,将所述多边形空间区域拆解为多个简单多边形的组合;
建立模块,用于为所述多个简单多边形的组合建立网格索引。
8.根据权利要求7所述的装置,其特征在于,所述建立模块还被配置为:
当所述确定模块确定多边形空间区域不是复杂多边形时,建立所述多边形空间区域的网格索引。
9.一种电子设备,其特征在于,包括存储器和处理器;其中,
所述存储器用于存储一条或多条计算机指令,其中,所述一条或多条计算机指令被所述处理器执行以实现如权利要求1-6任一项所述的方法。
10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,该计算机指令被处理器执行时实现如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711445833.9A CN110019984B (zh) | 2017-12-27 | 2017-12-27 | 空间索引建立方法、装置、电子设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711445833.9A CN110019984B (zh) | 2017-12-27 | 2017-12-27 | 空间索引建立方法、装置、电子设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019984A true CN110019984A (zh) | 2019-07-16 |
CN110019984B CN110019984B (zh) | 2021-10-29 |
Family
ID=67187072
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711445833.9A Expired - Fee Related CN110019984B (zh) | 2017-12-27 | 2017-12-27 | 空间索引建立方法、装置、电子设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019984B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113946585A (zh) * | 2021-10-28 | 2022-01-18 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070234205A1 (en) * | 2006-03-29 | 2007-10-04 | Avery Dennison Corporation | Defining virtual shapes to position text and graphics |
CN101923552A (zh) * | 2009-12-31 | 2010-12-22 | 华南师范大学 | 一种多边形矢量图层快速叠合方法 |
US7991779B1 (en) * | 2005-04-25 | 2011-08-02 | Hewlett Packard Development Company, L.P. | Method and apparatus for populating an index table |
CN103399730A (zh) * | 2013-07-29 | 2013-11-20 | 中国科学院地理科学与资源研究所 | 一种基于cpu+gpu架构的空间几何体线段相交判断并行处理方法 |
US8610731B2 (en) * | 2009-04-30 | 2013-12-17 | Microsoft Corporation | Dynamic graphics pipeline and in-place rasterization |
CN105139435A (zh) * | 2015-07-31 | 2015-12-09 | 湖北工业大学 | 一种处理多边形多重包含关系的边界一笔画方法 |
CN105184837A (zh) * | 2015-08-31 | 2015-12-23 | 武汉云空间地理信息技术有限公司 | 一种矢量多边形栅格化的算法及系统 |
CN106209989A (zh) * | 2016-06-29 | 2016-12-07 | 山东大学 | 基于spark平台的空间数据并行计算系统及其方法 |
CN106447724A (zh) * | 2016-09-12 | 2017-02-22 | 厦门大学 | 一种基于扫描转换算法和网格压缩的区域限定判断方法 |
CN106777365A (zh) * | 2017-01-23 | 2017-05-31 | 国网山东省电力公司电力科学研究院 | 输变电工程环境敏感区域智能识别与预测方法 |
CN107358654A (zh) * | 2017-06-19 | 2017-11-17 | 中国地质大学(武汉) | 基于多边形变形技术的剖面重构三维表面建模方法及系统 |
-
2017
- 2017-12-27 CN CN201711445833.9A patent/CN110019984B/zh not_active Expired - Fee Related
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7991779B1 (en) * | 2005-04-25 | 2011-08-02 | Hewlett Packard Development Company, L.P. | Method and apparatus for populating an index table |
US20070234205A1 (en) * | 2006-03-29 | 2007-10-04 | Avery Dennison Corporation | Defining virtual shapes to position text and graphics |
US8610731B2 (en) * | 2009-04-30 | 2013-12-17 | Microsoft Corporation | Dynamic graphics pipeline and in-place rasterization |
CN101923552A (zh) * | 2009-12-31 | 2010-12-22 | 华南师范大学 | 一种多边形矢量图层快速叠合方法 |
CN103399730A (zh) * | 2013-07-29 | 2013-11-20 | 中国科学院地理科学与资源研究所 | 一种基于cpu+gpu架构的空间几何体线段相交判断并行处理方法 |
CN105139435A (zh) * | 2015-07-31 | 2015-12-09 | 湖北工业大学 | 一种处理多边形多重包含关系的边界一笔画方法 |
CN105184837A (zh) * | 2015-08-31 | 2015-12-23 | 武汉云空间地理信息技术有限公司 | 一种矢量多边形栅格化的算法及系统 |
CN106209989A (zh) * | 2016-06-29 | 2016-12-07 | 山东大学 | 基于spark平台的空间数据并行计算系统及其方法 |
CN106447724A (zh) * | 2016-09-12 | 2017-02-22 | 厦门大学 | 一种基于扫描转换算法和网格压缩的区域限定判断方法 |
CN106777365A (zh) * | 2017-01-23 | 2017-05-31 | 国网山东省电力公司电力科学研究院 | 输变电工程环境敏感区域智能识别与预测方法 |
CN107358654A (zh) * | 2017-06-19 | 2017-11-17 | 中国地质大学(武汉) | 基于多边形变形技术的剖面重构三维表面建模方法及系统 |
Non-Patent Citations (3)
Title |
---|
HAO LU等: "An effective algorithm for spatial query using spatial adaptive grid index filter", 《2011 19TH INTERNATIONAL CONFERENCE ON GEOINFORMATICS》 * |
戴晶: "空间索引引导的点—弧拓扑关系构建方法研究", <中国优秀博硕士学位论文全文数据库(硕士)基础科学辑> * |
李静 等: "基于凸剖分的点在多边形内的高效判定", 《自然科学进展》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113946585A (zh) * | 2021-10-28 | 2022-01-18 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
CN113946585B (zh) * | 2021-10-28 | 2022-08-26 | 苏州贝塔智能制造有限公司 | 衣物裁片数据索引构建方法、查找方法及裁片分拣方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110019984B (zh) | 2021-10-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7714867B2 (en) | Topology determination, decomposable shape generation, and structured mesh generation | |
US8970580B2 (en) | Method, apparatus and computer-readable medium rendering three-dimensional (3D) graphics | |
EP1898327B1 (en) | Part identification image processor, program for generating part identification image, and recording medium storing the same | |
CN112100795A (zh) | 一种计算机辅助设计图纸的对比方法及装置 | |
CN114241105A (zh) | 界面渲染方法、装置、设备和计算机可读存储介质 | |
CN111857704A (zh) | 一种布局关系的代码生成方法及装置 | |
CA2636397C (en) | Vector image drawing device, method for vector image drawing, and computer readable recording medium | |
US10403040B2 (en) | Vector graphics rendering techniques | |
CN114297746A (zh) | 建筑信息模型的渲染方法、装置、电子设备和存储介质 | |
CN110019984B (zh) | 空间索引建立方法、装置、电子设备及可读存储介质 | |
US20220083703A1 (en) | Customizable reinforcement learning of column placement in structural design | |
CN111569418B (zh) | 对于待输出内容的渲染方法、装置、介质及电子设备 | |
EP2434459B1 (en) | Inferring and Maintaining Symmetry Relationships in a 3-D Editor | |
CN109461198B (zh) | 网格模型的处理方法及装置 | |
KR20180117499A (ko) | 3차원 메쉬 데이터 간소화 방법 및 장치 | |
CN112491999B (zh) | 一种数据上报方法及装置 | |
CN112231800A (zh) | Bim图形的优化方法、装置以及计算机存储介质 | |
CN111754632B (zh) | 业务服务的处理方法、装置、设备及存储介质 | |
CN113362438A (zh) | 全景渲染的方法、装置、电子设备、介质及程序 | |
US20230394768A1 (en) | System and method of generating smooth spline surface model preserving feature of physical object | |
CN116091365B (zh) | 基于三角面的三维模型缺口修复方法、装置、设备及介质 | |
KR100738097B1 (ko) | 3차원 디스플레이를 위한 쿼리의 효율적 처리 방법 및 장치 | |
US12073513B1 (en) | Mesh imprint in priority mesh generation for dirty models | |
CN113066153A (zh) | 管道流程图的生成方法、装置、设备及存储介质 | |
US20240104790A1 (en) | Optimizing grid-based compute graphs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Building N3, building 12, No. 27, Jiancai Chengzhong Road, Haidian District, Beijing 100096 Applicant after: Beijing Xingxuan Technology Co.,Ltd. Address before: Room 202, floor 2, the whole building, floors 1 to 3, No. 11, Shangdi Information Road, Haidian District, Beijing 100085 Applicant before: Beijing Xiaodu Information Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20211029 |