一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种时空数据的查询方法及相关装置与流程

2022-03-01 20:47:27 来源:中国专利 TAG:


1.本技术涉及数据处理技术领域,尤其涉及一种时空数据的查询方法及相关装置。


背景技术:

2.时空数据是同时具有时间和空间维度的数据,如某个居民小区的网络信号就是一种时空数据,它随小区内的具体位置和时间的变化而变化。伴随着人们探索空间的过程,时空数据的获取范围也从局部地面到全球地表,进而扩展到地球内外的整个空间。因此,面向海量的时空数据,进行高效的时空数据的空间区域查询成为越来越多业务的关键诉求。时空数据的空间区域查询指的是针对用户输入的空间区域(通常是由多个经纬度坐标点构成的多边形、圆形等任意形状的区域)的信息,将数据库中地理位置落入该空间区域的时空数据作为查询结果。例如,在电信领域网络规划网络优化场景中,经常需要分析特定的空间区域(如医院、学校、某居民小区等)的网络健康度、覆盖率等信息,此时,利用高效的空间区域查询方法从数据库包含的海量的时空数据中查询落入上述特定的空间区域的时空数据显得尤为重要。
3.但是,目前的时空数据的空间区域查询方法所运用到的算法复杂度较高,查询过程中的计算效率较低,且查询结果精准度较低,无法满足对空间区域精准查询的需求。


技术实现要素:

4.本技术实施例公开了一种时空数据的查询方法及相关装置,通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
5.第一方面,本技术实施例公开了一种时空数据的查询方法,包括:
6.确定待查询的空间区域;
7.将所述空间区域网格化,得到边界网格和内部网格;其中,所述边界网格为包含边界坐标点的网格,所述边界坐标点为位于所述空间区域的边界的坐标点;所述内部网格为不包含所述边界坐标点的网格;所述边界网格的编码层级和/或所述内部网格的编码层级包括,一种编码层级,或者至少两种不同的编码层级;
8.将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果。
9.本技术实施例中,首先确定待查询的空间区域,然后将待查询的空间区域网格化,得到边界网格和内部网格,最后将边界网格的索引所指向的数据和内部网格所指向的数据作为最后的查询结果。其中,常规的网格化方法是基于四叉树网格索引,自顶而下的逐级递归四分空间区域,且每次剖分过程中需通过矢量计算判断新生成的网格与待查询的空间区域的拓扑关系,重复上述过程直到达到网格索引层级。而本技术实施例改进了空间区域的剖分策略及网格拓扑关系的判断方法,即先对空间区域的边界网格化,得到边界网格的集
合,进而以边界网格为依据,对空间区域的内部填充,得到内部网格的集合。上述改进后的方法可以减少网格与空间区域关系的判断次数,以关系判断取代原来的矢量计算,加速了网格与空间区域拓扑关系的判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率;与此同时,改进后的方法对位于空间区域的边界的网格和内部的网格进行了区分,提高了查询结果的精准度,可以有效满足对空间区域有针对性的精准查询的需求。
10.在第一方面的一种可能的实施方式中,所述将所述空间区域网格化,得到边界网格和内部网格,包括:
11.将所述空间区域的边界网格化,得到所述边界网格;
12.根据所述边界网格,生成边界网格范围字典,所述边界网格范围字典包括所述边界网格的行号和列号;
13.根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格。
14.本技术实施例中,将空间区域的边界网格化,得到边界网格,该边界网格为索引所在层级,其中,边界网格化的过程主要为将边界坐标点所在的网格确定为边界网格;然后依据得到的边界网格生成边界网格范围字典,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断;最后依据生成的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。上述得到空间区域的边界网格和内部网格的方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
15.在第一方面的又一种可能的实施方式中,所述将所述空间区域的边界网格化,得到所述边界网格,包括:
16.将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格,所述第一边界坐标点和所述第二边界坐标点为位于所述空间区域边界的两个不同的坐标点;
17.对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格,所述第三边界网格为不同于所述第一边界网格和所述第二边界网格的所述边界网格。
18.本技术实施例中,提供了得到空间区域的边界网格的实施方式。通过对空间区域的边界网格化,得到该边界网格。其中,边界网格化的主要过程为将边界坐标点所在的网格确定为边界网格,比如,将第一边界坐标点所在的网格和第二边界坐标点所在的网格确定为边界网格,该第一边界坐标点和第二边界坐标点为空间区域的两个不同的边界坐标点。此外,边界网格化还包括按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列,比如,按序依次对上述第一边界坐标点和第二边界坐标点之间的边界区域进行网格填充,可以得到一个包含了若干个彼此相邻的边界网格的网格序列,该网格序列中的网格可确定为边界网格,且该包含边界网格的网格序列和上述边界网格化方法得到的边界网格一起构成边界网格的集合。上述通过对空间区域的边界网格化得到边界网格的方法,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可
以有效满足对空间区域的边界部分有针对性的精准查询的需求。
19.在第一方面的又一种可能的实施方式中,所述对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格,包括:
20.若目标斜率的绝对值大于0且不大于1,将与所述第一边界网格的行号相邻的行号确定为边界交点的行号,其中,所述边界交点为所述第一边界坐标点和所述第二边界坐标点之间的坐标点,所述目标斜率为所述第一边界坐标点和所述第二边界坐标点所在的目标直线的斜率;
21.根据所述边界交点的行号和所述目标直线的解析式,确定所述边界交点的列号;
22.在所述第一边界网格所在行中,将所述第一边界网格所在列和所述边界交点所在列之间的网格填充,得到所述第三边界网格。
23.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于0且不大于1情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号;进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号;在第一边界网格所在行中,将第一边界网格所在列和边界交点所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
24.在第一方面的又一种可能的实施方式中,所述方法还包括:
25.若所述目标斜率的绝对值大于1,将与所述第一边界网格的列号相邻的列号确定为所述边界交点的列号;
26.根据所述边界交点的列号和所述目标直线的解析式,确定所述边界交点的行号;
27.在所述第一边界网格所在列中,将所述第一边界网格所在行和所述边界交点所在行之间的网格填充,得到所述第三边界网格。
28.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号;进而根据目标直线的解析式和边界交点的列号,可以确定边界交点的行号;在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到第三边界网格,该第三边界网格即为彼此
相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
29.在第一方面的又一种可能的实施方式中,所述方法还包括:
30.若所述目标斜率的绝对值为0,在所述第一边界网格所在行中,将所述第一边界网格所在列和所述第二边界网格所在列之间的网格填充,得到所述第三边界网格。
31.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
32.在第一方面的又一种可能的实施方式中,所述根据所述边界网格,生成边界网格范围字典,包括:
33.在所述边界网格的第一行号不为所述第一边界坐标点所在的行号且不为所述第二边界坐标点所在的行号的情况下,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列号确定为所述边界网格范围字典中的键对应的值;
34.或,在所述边界网格的第一列号不为所述第一边界坐标点所在的列号且不为所述第二边界坐标点所在的列号的情况下,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行号确定为所述边界网格范围字典中的键对应的值。
35.本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号不为上述第一边界坐标点所在的行号且不为上述第二边界坐标点所在的行号的情况下,将该第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列号确定为边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号不为上述第一边界坐标点所在的列号且不为上述第二边界坐标点所在的列号的情况下,将该第一列号确定为边界网格范围字典中的键,并将第一列号对应的网格行号确定为边界网格范围字典中的键对应的值,由此可知,以第一列号
为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
36.在第一方面的又一种可能的实施方式中,所述方法还包括:
37.在所述第一行号为所述第一边界坐标点所在的行号且/或为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于所述空间区域内,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
38.或,在所述第一列号为所述第一边界坐标点所在的列号且/或为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于所述空间区域内,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行中的相邻两行的行号确定为所述边界网格范围字典中的键对应的值。
39.本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于空间区域内,则将第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于空间区域内,将该第一列号确定为上述边界网格范围字典中的键,并将该第一列号对应的网格行中的相邻两行的行号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
40.在第一方面的又一种可能的实施方式中,所述方法还包括:
41.在所述第一行号为所述第一边界坐标点所在的行号且/或为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
42.或,在所述第一列号为所述第一边界坐标点所在的列号且/或为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的
中心坐标点不位于所述空间区域内,不将所述第一列号对应的网格行中的临近两行的行号确定为所述边界网格范围字典中的键对应的值。
43.本技术实施例中,还提供了根据边界网格生成边界网格范围字典的又一种实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于空间区域内,则将第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一行号确定为边界网格范围字典中的键,还需视第一行号对应的网格列的不同情况而定,若第一行号对应的网格列中除了上述临近两列之外,还存在其他列的网格中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,反之则将第一行号排除在边界网格范围字典中的键之外;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于空间区域内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一列号确定为边界网格范围字典中的键,还需视第一列号对应的网格行的不同情况而定,若第一列号对应的网格行中除了上述临近两行之外,还存在其他行的网格中心坐标点位于空间区域内,则将该第一列号确定为边界网格范围字典中的键,反之则将第一列号排除在边界网格范围字典中的键之外。上述生成边界网格范围字典的方法所得到的边界网格范围字典,其键值包含的是经过祛冗余后的行号和列号的集合,可以使空间区域网格化得到的网格结果更为精准,从而使网格索引所指向的数据作为最后的查询结果更为精准;且该边界网格范围字典可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
44.在第一方面的又一种可能的实施方式中,所述根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格,包括:
45.计算得到外包网格,所述外包网格包含所述空间区域所在的网格;
46.根据所述外包网格和所述边界网格,构建候选网格填充树,其中,所述候选网格填充树为四叉树结构,所述候选网格填充树的树顶为所述外包网格,所述候选网格填充树的叶子节点为所述边界网格;
47.对所述候选网格填充树缺失的叶子节点和中间节点填充,得到候选内部网格,所述候选内部网格为所述候选网格填充树缺失的叶子节点和中间节点;
48.根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格。
49.本技术实施例中,利用边界网格范围字典对空间区域的非边界部分进行网格填充操作,可得到上述内部网格,该内部网格为包含于空间区域内部的多尺度网格,即该内部网格的编码层级包括至少两种不同的编码层级。具体的,首先计算得到完全包含上述空间区
域的外包网格,该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高;然后利用外包网格和边界网格构建候选网格填充树,将外包网格作为候选网格填充树的树顶,将边界网格作为候选网格填充树的叶子节点;接着对候选网格填充树中缺失的叶子节点和中间节点填充,可得到候选内部网格,该候选内部网格为上述候选网格填充树中填充的叶子节点和中间节点;最后利用边界网格范围字典筛选候选内部网格,得到上述内部网格。上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
50.在第一方面的又一种可能的实施方式中,所述根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格,包括:
51.若所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值,将所述候选内部网格确定为所述内部网格。
52.本技术实施例中,对空间区域的非边界部分填充,最先得到的只是候选内部网格,还需利用边界网格范围字典对候选内部网格进一步筛选,得到上述内部网格。本技术实施例提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和列号均包含于边界网格范围字典中的键值,则将该候选内部网格确定为内部网格。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
53.在第一方面的又一种可能的实施方式中,所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值,包括:
54.在所述边界网格范围字典中的键为所述候选内部网格的行号的情况下,若所述候选内部网格的列号大于列号区间的最小列号且小于所述列号区间的最大列号,确定所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值;所述列号区间为所述边界网格范围字典中的键对应的值。
55.本技术实施例中,对于候选内部网格的行号和列号是否包含于边界网格范围字典中的键值,提供了一种确定方式。以候选内部网格的行号为键,在边界网格范围字典中找到该键对应的值,也就是该键对应的列号区间;如果候选内部网格的列号大于该列号区间的最小列号且小于该列号区间的最大列号,则确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。可选的,如果边界网格范围字典中以候选内部网格的行号为键所对应的列号区间有多个,则对多个列号区间依次按照上述判断方式来确定候选内部网格的行列号归属,只要候选内部网格的列号属于任意一个列号区间,则可确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。
56.在第一方面的又一种可能的实施方式中,所述方法还包括:
57.若所述候选内部网格的行号和/或列号不包含于所述边界网格范围字典中的键值,不将所述候选内部网格确定为所述内部网格。
58.本技术实施例中,提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则将该候选内部网格排除在内部网格的集合之外。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
59.在第一方面的又一种可能的实施方式中,所述将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果,包括:
60.将所述边界网格和所述内部网格转换为目标网格,所述目标网格的编码层级为所述候选网格填充树的最高索引层级;
61.对所述目标网格的索引排序,得到索引区间,所述索引区间包含了所述目标网格的索引;
62.将所述索引区间所指向的数据作为所述查询结果。
63.本技术实施例中,将边界网格的索引所指向的数据以及内部网格的索引所指向的数据作为最后的查询结果。首先将边界网格和内部网格中的所有网格转换为目标网格,具体的,对于本身为最高索引层级的边界网格和内部网格不做转换处理,对于低于最高索引层级的边界网格和内部网格,可将其表示为该网格包含的索引层级对应的最小与最大编码子网格区间段,因为本实施例是基于四叉树网格索引进行的网格化,所以转换得到的目标网格的编码层级为候选网格填充树的最高索引层级;目标网格的索引可以形成索引区间段,对目标网格按网格索引排序,若两相邻目标网格的索引连续,则可将它们合并为一个新的索引区间,依次类推,最终得到的索引区间包含了上述所有目标网格的索引;最后根据该索引区间将其所指向的数据作为最后的查询结果。上述构建索引区间的方法,可以提高时空数据的查询速度,也可以使查询结果的精准度大大提高。
64.在第一方面的又一种可能的实施方式中,所述边界网格范围字典中的数据以哈希表数据结构存储。
65.本技术实施例中,边界网格范围字典中的数据以哈希表数据结构存储,哈希表是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
66.第二方面,本技术实施例公开了一种时空数据的查询装置,包括:
67.确定单元,用于确定待查询的空间区域;
68.网格化单元,用于将所述空间区域网格化,得到边界网格和内部网格;其中,所述边界网格为包含边界坐标点的网格,所述边界坐标点为位于所述空间区域的边界的坐标点;所述内部网格为不包含所述边界坐标点的网格;所述边界网格的编码层级和/或所述内部网格的编码层级包括,一种编码层级,或者至少两种不同的编码层级;
69.查询单元,用于将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果。
70.本技术实施例中,首先确定待查询的空间区域,然后将待查询的空间区域网格化,
得到边界网格和内部网格,最后将边界网格的索引所指向的数据和内部网格所指向的数据作为最后的查询结果。其中,常规的网格化方法是基于四叉树网格索引,自顶而下的逐级递归四分空间区域,且每次剖分过程中需通过矢量计算判断新生成的网格与待查询的空间区域的拓扑关系,重复上述过程直到达到网格索引层级。而本技术实施例改进了空间区域的剖分策略及网格拓扑关系的判断方法,即先对空间区域的边界网格化,得到边界网格的集合,进而以边界网格为依据,对空间区域的内部填充,得到内部网格的集合。上述改进后的方法可以减少网格与空间区域关系的判断次数,以关系判断取代原来的矢量计算,加速了网格与空间区域拓扑关系的判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率;与此同时,改进后的方法对位于空间区域的边界的网格和内部的网格进行了区分,提高了查询结果的精准度,可以有效满足对空间区域有针对性的精准查询的需求。
71.在第二方面的一种可能的实施方式中,所述网格化单元,具体用于将所述空间区域的边界网格化,得到所述边界网格;所述装置还包括:
72.生成单元,用于根据所述边界网格,生成边界网格范围字典,所述边界网格范围字典包括所述边界网格的行号和列号;
73.填充单元,用于根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格。
74.本技术实施例中,将空间区域的边界网格化,得到边界网格,该边界网格为索引所在层级,其中,边界网格化的过程主要为将边界坐标点所在的网格确定为边界网格;然后依据得到的边界网格生成边界网格范围字典,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断;最后依据生成的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。上述得到空间区域的边界网格和内部网格的方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
75.在第二方面的又一种可能的实施方式中,所述确定单元,还用于将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格,所述第一边界坐标点和所述第二边界坐标点为位于所述空间区域边界的两个不同的坐标点;
76.所述填充单元,还用于对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格,所述第三边界网格为不同于所述第一边界网格和所述第二边界网格的所述边界网格。
77.本技术实施例中,提供了得到空间区域的边界网格的实施方式。通过对空间区域的边界网格化,得到该边界网格。其中,边界网格化的主要过程为将边界坐标点所在的网格确定为边界网格,比如,将第一边界坐标点所在的网格和第二边界坐标点所在的网格确定为边界网格,该第一边界坐标点和第二边界坐标点为空间区域的两个不同的边界坐标点。此外,边界网格化还包括按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列,比如,按序依次对上述第一边界坐标点和第二边界坐标点之间的边界区域进行网格填充,可以得到一个包含了若干个彼此相邻的边界网格的网格序
列,该网格序列中的网格可确定为边界网格,且该包含边界网格的网格序列和上述边界网格化方法得到的边界网格一起构成边界网格的集合。上述通过对空间区域的边界网格化得到边界网格的方法,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
78.在第二方面的又一种可能的实施方式中,所述确定单元,还用于若目标斜率的绝对值大于0且不大于1,将与所述第一边界网格的行号相邻的行号确定为边界交点的行号,其中,所述边界交点为所述第一边界坐标点和所述第二边界坐标点之间的坐标点,所述目标斜率为所述第一边界坐标点和所述第二边界坐标点所在的目标直线的斜率;
79.所述确定单元,还用于根据所述边界交点的行号和所述目标直线的解析式,确定所述边界交点的列号;
80.所述填充单元,具体用于在所述第一边界网格所在行中,将所述第一边界网格所在列和所述边界交点所在列之间的网格填充,得到所述第三边界网格。
81.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于0且不大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号;进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号;在第一边界网格所在行中,将第一边界网格所在列和边界交点所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
82.在第二方面的又一种可能的实施方式中,所述确定单元,还用于若所述目标斜率的绝对值大于1,将与所述第一边界网格的列号相邻的列号确定为所述边界交点的列号;
83.所述确定单元,还用于根据所述边界交点的列号和所述目标直线的解析式,确定所述边界交点的行号;
84.所述填充单元,具体还用于在所述第一边界网格所在列中,将所述第一边界网格所在行和所述边界交点所在行之间的网格填充,得到所述第三边界网格。
85.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号;进而根据目标直线的解析式
和边界交点的列号,可以确定边界交点的行号;在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
86.在第二方面的又一种可能的实施方式中,所述填充单元,具体还用于若所述目标斜率的绝对值为0,在所述第一边界网格所在行中,将所述第一边界网格所在列和所述第二边界网格所在列之间的网格填充,得到所述第三边界网格。
87.本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
88.在第二方面的又一种可能的实施方式中,所述确定单元,还用于在所述边界网格的第一行号不为所述第一边界坐标点所在的行号且不为所述第二边界坐标点所在的行号的情况下,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列号确定为所述边界网格范围字典中的键对应的值;
89.或,所述确定单元,还用于在所述边界网格的第一列号不为所述第一边界坐标点所在的列号且不为所述第二边界坐标点所在的列号的情况下,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行号确定为所述边界网格范围字典中的键对应的值。
90.本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号不为上述第一边界坐标点所在的行号且不为上述第二边界坐标点所在的行号的情况下,将该第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列号确定为边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号不为上述第一边界坐标点所在的列号且不为上述第二
边界坐标点所在的列号的情况下,将该第一列号确定为边界网格范围字典中的键,并将第一列号对应的网格行号确定为边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
91.在第二方面的又一种可能的实施方式中,所述确定单元,还用于在所述第一行号为所述第一边界坐标点所在的行号且为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于所述空间区域内,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
92.或,所述确定单元,还用于在所述第一列号为所述第一边界坐标点所在的列号且为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于所述空间区域内,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行中的相邻两行的行号确定为所述边界网格范围字典中的键对应的值。
93.本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于空间区域内,则将第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于空间区域内,将该第一列号确定为上述边界网格范围字典中的键,并将该第一列号对应的网格行中的相邻两行的行号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
94.在第二方面的又一种可能的实施方式中,所述确定单元,还用于在所述第一行号为所述第一边界坐标点所在的行号且为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
95.或,所述确定单元,还用于在所述第一列号为所述第一边界坐标点所在的列号且
为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一列号对应的网格行中的临近两行的行号确定为所述边界网格范围字典中的键对应的值。
96.本技术实施例中,还提供了根据边界网格生成边界网格范围字典的又一种实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于空间区域内,则将第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一行号确定为边界网格范围字典中的键,还需视第一行号对应的网格列的不同情况而定,若第一行号对应的网格列中除了上述临近两列之外,还存在其他列的网格中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,反之则将第一行号排除在边界网格范围字典中的键之外;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于空间区域内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一列号确定为边界网格范围字典中的键,还需视第一列号对应的网格行的不同情况而定,若第一列号对应的网格行中除了上述临近两行之外,还存在其他行的网格中心坐标点位于空间区域内,则将该第一列号确定为边界网格范围字典中的键,反之则将第一列号排除在边界网格范围字典中的键之外。上述生成边界网格范围字典的方法所得到的边界网格范围字典,其键值包含的是经过祛冗余后的行号和列号的集合,可以使空间区域网格化得到的网格结果更为精准,从而使网格索引所指向的数据作为最后的查询结果更为精准;且该边界网格范围字典可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
97.在第二方面的又一种可能的实施方式中,所述装置还包括:
98.计算单元,用于计算得到外包网格,所述外包网格包含所述空间区域所在的网格;
99.构建单元,用于根据所述外包网格和所述边界网格,构建候选网格填充树,其中,所述候选网格填充树为四叉树结构,所述候选网格填充树的树顶为所述外包网格,所述候选网格填充树的叶子节点为所述边界网格;
100.所述填充单元,还用于对所述候选网格填充树缺失的叶子节点和中间节点填充,得到候选内部网格,所述候选内部网格为所述候选网格填充树缺失的叶子节点和中间节点;
101.所述确定单元,还用于根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格。
102.本技术实施例中,利用边界网格范围字典对空间区域的非边界部分进行网格填充
操作,可得到上述内部网格,该内部网格为包含于空间区域内部的多尺度网格,即该内部网格的编码层级包括至少两种不同的编码层级。具体的,首先计算得到完全包含上述空间区域的外包网格,该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高;然后利用外包网格和边界网格构建候选网格填充树,将外包网格作为候选网格填充树的树顶,将边界网格作为候选网格填充树的叶子节点;接着对候选网格填充树中缺失的叶子节点和中间节点填充,可得到候选内部网格,该候选内部网格为上述候选网格填充树中填充的叶子节点和中间节点;最后利用边界网格范围字典筛选候选内部网格,得到上述内部网格。上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
103.在第二方面的又一种可能的实施方式中,所述确定单元,具体还用于若所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值,将所述候选内部网格确定为所述内部网格。
104.本技术实施例中,对空间区域的非边界部分填充,最先得到的只是候选内部网格,还需利用边界网格范围字典对候选内部网格进一步筛选,得到上述内部网格。本技术实施例提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和列号均包含于边界网格范围字典中的键值,则将该候选内部网格确定为内部网格。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
105.在第二方面的又一种可能的实施方式中,所述确定单元,具体还用于在所述边界网格范围字典中的键为所述候选内部网格的行号的情况下,若所述候选内部网格的列号大于列号区间的最小列号且小于所述列号区间的最大列号,确定所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值;所述列号区间为所述边界网格范围字典中的键对应的值。
106.本技术实施例中,对于候选内部网格的行号和列号是否包含于边界网格范围字典中的键值,提供了一种确定方式。以候选内部网格的行号为键,在边界网格范围字典中找到该键对应的值,也就是该键对应的列号区间;如果候选内部网格的列号大于该列号区间的最小列号且小于该列号区间的最大列号,则确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。可选的,如果边界网格范围字典中以候选内部网格的行号为键所对应的列号区间有多个,则对多个列号区间依次按照上述判断方式来确定候选内部网格的行列号归属,只要候选内部网格的列号属于任意一个列号区间,则可确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。
107.在第二方面的又一种可能的实施方式中,所述确定单元,具体还用于若所述候选内部网格的行号和/或列号不包含于所述边界网格范围字典中的键值,不将所述候选内部网格确定为所述内部网格。
108.本技术实施例中,提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则将该候选内部网格排除在内部网格的集合之外。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
109.在第二方面的又一种可能的实施方式中,所述装置还包括:
110.转换单元,用于将所述边界网格和所述内部网格转换为目标网格,所述目标网格的编码层级为所述候选网格填充树的最高索引层级;
111.排序单元,用于对所述目标网格的索引排序,得到索引区间,所述索引区间包含了所述目标网格的索引;
112.所述查询单元,具体用于将所述索引区间所指向的数据作为所述查询结果。
113.本技术实施例中,将边界网格的索引所指向的数据以及内部网格的索引所指向的数据作为最后的查询结果。首先将边界网格和内部网格中的所有网格转换为目标网格,具体的,对于本身为最高索引层级的边界网格和内部网格不做转换处理,对于低于最高索引层级的边界网格和内部网格,可将其表示为该网格包含的索引层级对应的最小与最大编码子网格区间段,因为本实施例是基于四叉树网格索引进行的网格化,所以转换得到的目标网格的编码层级为候选网格填充树的最高索引层级;目标网格的索引可以形成索引区间段,对目标网格按网格索引排序,若两相邻目标网格的索引连续,则可将它们合并为一个新的索引区间,依次类推,最终得到的索引区间包含了上述所有目标网格的索引;最后根据该索引区间将其所指向的数据作为最后的查询结果。上述构建索引区间的方法,可以提高时空数据的查询速度,也可以使查询结果的精准度大大提高。
114.在第二方面的又一种可能的实施方式中,所述边界网格范围字典中的数据以哈希表数据结构存储。
115.本技术实施例中,边界网格范围字典中的数据以哈希表数据结构存储,哈希表是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
116.第三方面,本技术实施例公开了一种用于时空数据查询的服务器,该服务器包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器用于执行所述存储器中存储的计算机程序,当所述计算机程序在所述处理器上运行时,执行如第一方面或者第一方面的任意一种可能的实施方式中所述的方法。
117.第四方面,本技术实施例公开了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在一个或多个处理器上运行时,执行如第一方面或者第一方面的任意一种可能的实施方式中所述的方法。
118.第五方面,本技术实施例公开了一种计算机程序产品,所述计算机程序产品包括程序指令,所述程序指令当被处理器执行时使该处理器执行如第一方面或者第一方面的任意一种可能的实施方式中所述的方法。
119.本技术实施例,通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
附图说明
120.为了更清楚地说明本技术实施例或背景技术中的技术方案,下面将对本技术实施例或背景技术中所需要使用的附图作简单的介绍。
121.图1a为一种常规的时空数据查询方法的流程示意图;
122.图1b为另一种常规的时空数据查询方法的流程示意图;
123.图1c为一种常规的空间区域剖分策略的效果示意图;
124.图2a为本技术实施例提供的一种时空数据查询系统的架构示意图;
125.图2b为本技术实施例提供的另一种时空数据查询系统的架构示意图;
126.图3为本技术实施例提供的一种时空数据查询方法的流程示意图;
127.图4a为本技术实施例提供的另一种时空数据查询方法的流程示意图;
128.图4b为本技术实施例提供的一种空间区域边界网格化的效果示意图;
129.图4c为本技术实施例提供的另一种空间区域边界网格化的效果示意图;
130.图5a为本技术实施例提供的又一种时空数据查询方法的流程示意图;
131.图5b为本技术实施例提供的一种生成边界网格范围字典的效果示意图;
132.图6a为本技术实施例提供的又一种时空数据查询方法的流程示意图;
133.图6b为本技术实施例提供的一种空间区域内部网格填充的效果示意图;
134.图6c为本技术实施例提供的一种生成候选网格填充树的效果示意图;
135.图7为本技术实施例提供的一种时空数据查询装置的结构示意图;
136.图8为本技术实施例提供的一种服务器的结构示意图。
具体实施方式
137.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地描述。
138.本技术的说明书、权利要求书及附图中的术语“第一”和“第二”等仅用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备等,没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元等,或可选地还包括对于这些过程、方法、产品或设备等固有的其它步骤或单元。
139.在本文中提及的“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本技术的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员可以显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
140.在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上,“至少两个(项)”是指两个或三个及三个以上,“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种
情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”。
141.本技术实施例提供了一种时空数据的查询方法,为了更清楚地描述本技术的方案,下面先介绍一些与时空数据查询相关的知识。
142.时空数据:时空数据是同时具有时间和空间维度的数据,现实世界中的数据超过80%与地理位置有关。时空大数据包括时间、空间、专题属性三维信息,具有多源、海量、更新快速的综合特点。时空数据索引技术也称作数据获取方法,大多数研究主要是从以下几个方面入手:(1)历史数据的高效存储和获取,对于这个方面的研究,已经有学者提出了很多种基于r树或四叉树的时空索引技术,这样建立索引是为了减少建立索引占据的空间及提高查询效率;(2)对于未来状态的查询,人们先假定已知一个时空地物坐标及速率,预测时空地物在以后的某个时刻坐标等信息,仅有tpr树及其改进型支持未来预测查询。
143.空间索引:空间索引是指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构,是对存储在介质上的数据位置信息的描述,是用来提高系统对数据获取的效率。其中包含空间对象的概要信息,如对象的标识、外接矩形及指向空间对象实体的指针。
144.下面结合本技术实施例中的附图对本技术实施例进行描述。
145.请参阅图1a,图1a为一种常规的时空数据查询方法的流程示意图。如图1a所示,首先对于待入库的原始时空数据构建其空间索引,然后将构建索引后的原始时空数据存入数据库中。构建空间索引的目的在于将空间上较为临近的数据进行连续存储,以提升查询效率。在数据库或数据管理产品中,数据通常按物理或逻辑上的列表形式进行存储,数据按一个或多个字段进行排序,使得基于这些字段的数据分布相对聚集,这样在查询上述数据时可以有效减少磁盘的输入/输出(input/output,i/o)随机读取次数,提升数据查询效率。空间索引是按数据的地理坐标位置对数据进行整理和排序,使得空间位置临近的数据邻近存储并且按空间范围对数据集进行划分,在进行数据查询时,基于查询条件可以快速过滤出满足需求的候选数据集。空间索引通常有r树、kd树、四叉树网格索引等。以四叉树网格索引为例,对空间区域按不同层级自顶而下递归进行四分,可形成一系列不同层级的网格。每个父网格包含四个下一层级的子网格,每个网格表示一定大小的空间范围,落入该空间范围的数据聚集存储,由此构成四叉树网格索引。进一步,若相同层级的网格索引基于空间填充曲线(z阶曲线、希尔伯特曲线等)进行降维,每个网格可赋予其唯一id编码。
146.另一方面,对于用户发起的空间区域查询请求(该空间区域通常是由经纬度坐标点集构成的空间边界区域),首先需要将该空间区域映射为一系列索引区间。例如,对于网格索引,该步骤是将经纬度坐标点集表示的空间区域映射为该空间区域包含的网格编码集合。进而,基于该索引区间在数据库中进行数据查询,返回查询结果集。该结果集对应的是查询空间区域映射后的索引区间中所包含的数据集合,该结果集可能存在非严格包含在查询空间区域内的数据,因此,对于需要精确查询的应用场景,还需要对结果集中的数据进行精确过滤,进一步判断结果集中的数据是否位于空间区域查询范围内,以确定最后的查询结果。
147.由上述图1a中的时空数据查询方法的流程可知,空间区域查询过程主要包括两个
核心步骤:(1)将待查询的空间区域映射为一系列索引区间;(2)基于该索引区间在数据库中进行数据查询,返回查询结果集。上述两个步骤均会影响空间区域查询的性能,其中步骤(2)的性能由多方面因素决定,例如:数据库中的数据存储和组织结构、采用的数据库产品、分布式集群规模等。而步骤(1)的性能更多体现在查询过程中所运用的算法层面的性能和复杂度上,因此,目前的时空数据查询方法大多都聚焦于步骤(1)的优化,以提升查询性能。
148.具体的,可参阅图1b,图1b为另一种常规的时空数据查询方法的流程示意图。图1b中的时空数据查询方法基于上述图1a中的步骤(1)的优化,以提升查询性能。如图1b所示,时空数据在数据存储和管理中为满足实际的查询需求需要构建空间索引结构,常用的空间索引构建方法为基于空间分割的索引结构。其基本原理是将空间分割为多尺度层级的网格,并利用空间填充曲线(z阶曲线、希尔伯特曲线等)将二维空间网格串接起来形成具有局部空间连续性的一维索引结构。当前构建空间索引结构的主流方案为:首先确定完全包含待查询的空间区域的外包网格,该外包网格在满足可完全包含待查询的空间区域的前提下,其外包网格的范围应尽可能的小,以减少后续的计算次数,提高计算效率;然后基于四叉树网格索引,自顶而下逐级递归四分外包网格,且每次剖分外包网格的过程中需要判断新生成的网格与待查询的空间区域的拓扑关系,如果与待查询空间区域相交则进一步剖分,否则停止剖分;重复上述剖分网格和判断拓扑关系的过程直到达到网格索引层级,最后将属于待查询的空间区域的网格转换为网格索引区间,至此,可将待查询的空间区域映射为一系列索引区间。
149.具体的,将待查询的空间区域映射为一系列索引区间的过程可参阅图1c,图1c为一种常规的空间区域剖分策略的效果示意图。如图1c所示,对于用户的空间区域查询请求,服务器获取待查询的空间区域(1)。然后确定完全包含待查询的空间区域(1)的外包网格(2),该外包网格(2)在满足可完全包含待查询的空间区域(1)的前提下,其外包网格(2)的范围应尽可能的小,以减少后续的计算次数,提高计算效率。接着对该外包网格(2)递归剖分,即基于四叉树网格索引,自顶而下逐级递归四分外包网格(2),可得到新的网格(3)、(4)、(5)、(6)。且在递归剖分的过程中,对每个层级新产生的网格与待查询的空间区域(1)的拓扑关系进行判断,可能存在三种情况:网格完全在待查询的空间区域(1)内部;网格完全不在待查询的空间区域(1)内部;网格部分在待查询的空间区域(1)内部。对于前两种情况,将完全在查询空间范围内部的网格加入索引结果集中。对部分在待查询的空间区域(1)内部的网格继续剖分,重复此过程直到达到索引网格所在层级停止。对于上述得到的新的网格(3)、(4)、(5)、(6),分别将它们与待查询的空间区域(1)进行拓扑关系判断,可知网格(3)、(4)、(5)、(6)均为部分在待查询的空间区域(1)内部,故需对它们继续剖分。此处以网格(4)为例对其继续递归四分剖分,可得新的网格(7)、(8)、(9)、(10),其余网格(3)、(5)、(6)同理可继续剖分,此处不做赘述。接着还需将上述新的网格(7)、(8)、(9)、(10)分别与待查询的空间区域(1)进行拓扑关系判断,可知网格(8)为完全不在待查询的空间区域(1)内部,网格(9)为完全在待查询的空间区域(1)内部,故停止对网格(8)和网格(9)的剖分;而网格(7)和网格(10)均为部分在待查询的空间区域(1)内部,故还需对网格(7)和网格(10)继续剖分。此处以网格(7)为例对其继续递归四分剖分,可得新的网格(11)、(12)、(13)、(14),其余网格(10)同理可继续剖分,此处不做赘述。由于新的网格(11)、(12)、(13)、(14)均达到索引网格所在层级,故剖分结束。通过上述的网格剖分策略和拓扑关系判断可得到不同尺
度网格构成的索引网格结果集,该结果集中的索引网格部分或完全包含在查询空间范围内部。最后将索引网格结果集转换为索引层级的网格区间段输出。
150.上述图1c中的网格与待查询的空间区域的拓扑关系基于经纬度单点与空间区域顶点序列间的矢量关系计算实现,可知算法的复杂度高,因为剖分网格与空间区域的拓扑关系判断需要利用网格的四个角点与空间区域进行关系判断,因此对于每一个待判断的网格,单点与空间区域的矢量关系计算均会执行四次,计算效率低。并且,父网格与子网格(分别对应于低层级网格和高层级网格)在不同层级存在冗余计算情况(即父网格与子网格相同的角点在不同层级的网格拓扑关系判断中被重复计算),会进一步降低查询效率。并且,上述算法不对位于空间区域边界的网格和内部网格进行区分,会导致查询结果不支持对空间区域精确查询的需求,需遍历全部数据进行判别。
151.针对上述图1a、图1b以及图1c中常规的时空数据查询方法中存在的不足,本技术提供了一种新的时空数据查询方法,该时空数据查询方法相比于常规方法,可以通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。在对该新的时空数据查询方法进行说明之前,首先对该新的时空数据查询方法所应用的系统架构进行说明。
152.请参阅图2a,图2a为本技术实施例提供的一种时空数据查询系统的架构示意图。如图2a所示,客户端与服务端网络连接,客户端向服务端发送查询请求,用于查询空间区域的时空数据,服务端接收到待查询的空间区域后,由处理器核处理查询操作以实现时空数据查询。该时空数据查询系统的部署形式包括但不限于单机版实现和集群版实现。在单机或集群架构中都可采用单处理器核处理或多处理器核并行处理。时空数据查询过程中的算法可通过数据划分和剪枝操作,将不同索引区间中的数据分发到不同处理器核线程或不同服务端节点进程中进行并行处理。如此可满足高性能时空数据查询的应用需求,可支持如秒级实时查询、分钟级别空间加载,还可支持行政区边界内的电信网络问题实时分析、热点信息实时查询等时空数据查询分析的应用场景。
153.具体的,上述新的时空数据查询方法所应用的系统架构还可参阅图2b,图2b为本技术实施例提供的另一种时空数据查询系统的架构示意图。如图2b所示,本时空数据查询系统的架构主要包括五个模块:查询空间区域模块、边界网格化模块、边界网格范围字典构建模块、内部网格填充模块以及索引区间构建模块。对于用户输入的查询请求,查询空间区域模块接收待查询的空间区域,通过边界网格化模块对空间区域的边界进行网格化,转换为连续网格集,然后通过边界网格范围字典构建模块基于边界网格集生成边界网格范围字典,接着通过内部网格填充模块对空间区域内部的网格进行多尺度填充,生成内部网格集,最终索引区间构建模块将边界网格集和内部网格集转换为索引网格区间数据,在数据库中进行时空数据查询。
154.请参阅图3,图3为本技术实施例提供的一种时空数据查询方法的流程示意图,该方法包括但不限于如下步骤:
155.步骤301:确定待查询的空间区域。
156.用户或客户端发起空间区域查询请求,该空间区域查询请求目的在于请求与客户端网络连接的服务器查询该空间区域内的时空数据,将查询结果返回至客户端。与客户端
网络连接的服务器获得待查询的空间区域的信息后,将根据该待查询的空间区域的信息,确定该空间区域,并将该空间区域映射为一系列索引区间,然后将该索引区间所指向的数据作为查询结果。具体的,该空间区域的信息通常是由经纬度坐标点集构成的空间边界区域,比如,经纬度坐标点集可以表示为[(lat0,lon0),(lat1,lon1),(lat2,lon2),

,(latn,lonn)],其中,latn表示第n个坐标点的纬度值,lonn表示第n个坐标点的经度值。
[0157]
步骤302:将上述空间区域网格化,得到边界网格和内部网格。
[0158]
服务器确定待查询的空间区域之后,将该空间区域网格化,可得到边界网格和内部网格。具体的,网格化的过程主要为先将空间区域的边界网格化,得到边界网格,再根据该边界网格对空间区域的非边界部分进行网格填充,从而得到内部网格。
[0159]
首先,服务器将待查询的空间区域的边界包含的经纬度坐标点转换为边界网格,因为构成空间区域的经纬度坐标点是有限个的,故由经纬度坐标点得到的边界网格可能没有完全覆盖空间区域的边界,因此,还需依次对相邻的经纬度坐标点之间的边界区域进行网格填充,得到边界网格。上述对空间区域的边界网格化所得到的边界网格为连续的网格集,且每个边界网格的网格层级为索引所在的层级。具体的,以第一边界坐标点和第二边界坐标点为例进行说明,上述第一边界坐标点和第二边界坐标点为空间区域边界上的两个不同的经纬度坐标点。服务器获得包含上述第一边界坐标点和第二边界坐标点的空间区域的信息后,将第一边界坐标点所在的网格和第二边界坐标点所在的网格分别确定为第一边界网格和第二边界网格,以此类推,还可将第n边界坐标点所在的网格确定为第n边界网格,n为正整数。其中,第一边界网格、第二边界网格以及第n边界网格为覆盖在空间区域的边界区域上的不同网格。
[0160]
为了确保得到的边界网格能完全覆盖空间区域的边界区域,还需对相邻的边界坐标点(经纬度坐标点)之间的边界区域进行网格填充,形成彼此相邻的边界网格序列,该网格序列中的网格可确定为边界网格,且该包含边界网格的网格序列和上述边界网格化方法得到的边界网格一起构成边界网格的集合,该集合中的所有边界网格可完全覆盖空间区域的边界区域。比如,按序依次对上述第一边界坐标点和第二边界坐标点之间的边界区域进行网格填充,需先确定第一边界坐标点和第二边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理。
[0161]
在目标斜率的绝对值大于0且不大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的边界坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号。进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号。在第一边界网格所在行中,将第一边界网格所在列和边界交点所在列之间的网格填充,得到的边界网格即为上述彼此相邻的边界网格序列中包含的网格。
[0162]
另一方面,在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的边界坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号。进而根据目标直线的解析式和边界交点的列号,可以确定边界交点的行号。在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到的边界网格即为上述彼此相邻的边界网格序列中包含的网格。
[0163]
另一方面,在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到的边界网格即为上述彼此相
邻的边界网格序列中包含的网格。
[0164]
综上可知,上述边界网格化方法得到的边界网格,以及上述对相邻的边界坐标点之间的边界区域进行网格填充得到的彼此相邻的边界网格序列,可以一起构成边界网格的集合,该集合中的所有边界网格可完全覆盖空间区域的边界区域,且得到边界网格的计算过程降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0165]
其次,根据上述得到的边界网格对空间区域的非边界部分进行网格填充,可得到内部网格。要对空间区域的非边界部分进行填充,需先根据边界网格构建边界网格范围字典,该边界网格范围字典应包括上述边界网格的行号和列号,再依据该边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。具体的,根据边界网格构建边界网格范围字典,需先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理。比如,以上述边界网格集合中的任意一个边界网格为例进行说明,该任意一个边界网格可能是通过上述边界网格化方法得到的边界网格,也可能是通过上述对相邻的边界坐标点之间的边界区域进行网格填充得到的彼此相邻的边界网格序列所包含的边界网格。将该任意一个边界网格映射为其所在空间区域内划分的行列编号,再根据行列编号的不同情况做不同的处理。
[0166]
将该任意一个边界网格的行号作为第一行号,在该第一行号不为上述第一边界坐标点所在的行号且不为上述第二边界坐标点所在的行号且不为上述第n边界坐标点所在的行号的情况下,将该第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列号确定为边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合。或者,将该任意一个边界网格的列号作为第一列号,在该第一列号不为上述第一边界坐标点所在的列号且不为上述第二边界坐标点所在的列号且不为上述第n边界坐标点所在的列号的情况下,将该第一列号确定为边界网格范围字典中的键,并将该第一列号对应的网格行号确定为边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。
[0167]
另一方面,还是将上述任意一个边界网格的行号作为第一行号,在该第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号且/或为上述第n边界坐标点所在的行号的情况下,判断第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点与空间区域的拓扑关系。若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,并将该第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合。或者,将该任意一个边界网格的列号作为第一列号,在该第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号且/或为上述第n边界坐标点所在的列号的情况下,判断第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点与空间区域的拓扑关系。若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于空间区域内,将该第一列号确定为上述边界网格范围字典中的键,并将该第一列号对应的网格行中的相邻两行的行号确定为上述边界网格范围字典中的键对应的值,由此可知,以第
一列号为键所对应的值是经过祛冗余后的行号的集合。
[0168]
另一方面,还是将上述任意一个边界网格的行号作为第一行号,在该第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号且/或为上述第n边界坐标点所在的行号的情况下,判断第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点与空间区域的拓扑关系。若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于空间区域内,则将第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外。可选的,是否将该第一行号确定为边界网格范围字典中的键,还需视第一行号对应的网格列的不同情况而定,若第一行号对应的网格列中除了上述临近两列之外,还存在其他列的网格中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,反之则将第一行号排除在边界网格范围字典中的键之外。或者,将该任意一个边界网格的列号作为第一列号,在该第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号且/或为上述第n边界坐标点所在的列号的情况下,判断第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点与空间区域的拓扑关系。若第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于空间区域内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外。可选的,是否将该第一列号确定为边界网格范围字典中的键,还需视第一列号对应的网格行的不同情况而定,若第一列号对应的网格行中除了上述临近两行之外,还存在其他行的网格中心坐标点位于空间区域内,则将该第一列号确定为边界网格范围字典中的键,反之则将第一列号排除在边界网格范围字典中的键之外。
[0169]
此外,上述边界网格范围字典中的数据可以哈希表数据结构存储,哈希表是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;将其应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
[0170]
综上可知,上述根据边界网格构建边界网格范围字典的方法,其生成的边界网格范围字典中的键值包含的是经过祛冗余后的行号和列号的集合,可以使空间区域网格化得到的网格结果更为精准,从而使网格索引所指向的数据作为最后的查询结果更为精准;且该边界网格范围字典以关系判断代替矢量计算的常规判断方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,提高了计算效率。
[0171]
最后,依据上述得到的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。该内部网格为包含于空间区域内部的多尺度网格,即该内部网格的编码层级包括,一种编码层级,或是至少两种不同的编码层级。具体的,先计算得到完全包含上述空间区域的外包网格,该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,因为以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高。再利用上述外包网格和边界网格集合中的边界网格构建候选网格填充树,将该外包网格作为候选网格填充树的树顶,将边界网格作为候选网格填充树的叶子节点。接着对候选网格填充树中缺失的叶子节点和中间节点填充,可得到候选内部网格,该候选内部网格为上述候选网格填充树中填充的叶子节点和中间节点。再利用上述边界网格范围字典筛选上述候选内部网格,可得到内部网格。具体的,利用边界网格范围字典
筛选候选内部网格,需根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值。若候选内部网格的行号和列号均包含于边界网格范围字典中的键值,则将该候选内部网格确定为内部网格;若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则将该候选内部网格排除在内部网格的集合之外。
[0172]
综上可知,上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0173]
步骤303:将上述边界网格的索引所指向的数据和上述内部网格的索引所指向的数据作为查询结果。
[0174]
由上述步骤202可得到空间区域的边界网格和内部网格,再将上述边界网格的索引所指向的数据和上述内部网格的索引所指向的数据作为空间区域的时空数据的查询结果。具体的,因为边界网格和内部网格的编码层级可能不同,故可以先将边界网格和内部网格中的所有网格转换为目标网格,因为本实施例是基于四叉树网格索引进行的网格化,故该目标网格的编码层级为上述候选网格填充树的最高索引层级。在转换为目标网格的过程中,对于本身编码层级为最高索引层级的边界网格和内部网格不做转换处理,对于本身编码层级低于最高索引层级的边界网格和内部网格,可将其表示为该网格包含的索引层级对应的最小与最大编码子网格区间段。进一步的,转换得到的目标网格的索引可以形成索引区间段,具体为对目标网格按网格索引排序,若两相邻目标网格的索引连续,则可将它们合并为一个新的索引区间。以此类推,最终得到的索引区间包含了上述所有目标网格的索引。再根据该索引区间将其所指向的数据作为空间区域的时空数据,即为最后的查询结果。
[0175]
综上可知,上述构建索引区间的方法,可以提高时空数据的查询速度;将该索引区间所指向的数据作为空间区域的时空数据,也可以使查询结果的精准度大大提高。
[0176]
请参阅图4a,图4a为本技术实施例提供的另一种时空数据查询方法的流程示意图,该方法包括但不限于如下步骤:
[0177]
步骤401:将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格。
[0178]
服务器接收到用户发起的空间区域查询请求后,会获得待查询的空间区域的信息,该待查询的空间区域的信息通常是由经纬度坐标点集构成的空间边界区域,比如,该经纬度坐标点集可以表示为[(lat0,lon0),(lat1,lon1),(lat2,lon2),

,(latn,lonn)],其中,latn表示第n个经纬度坐标点的纬度值,lonn表示第n个经纬度坐标点的经度值。在实际应用中待查询的空间区域多为不规则多边形区域,且该待查询的空间区域可以由有限个经纬度坐标点表示其区域范围。如图4b所示,图4b为本技术实施例提供的一种空间区域边界网格化的效果示意图。以图4b中的(1)作为待查询的空间区域进行说明,图4b中的(1)为一个不规则多边形,其可以由上述经纬度坐标点集表示其区域范围,且每一个经纬度坐标点可以表示该多边形的一个顶点。
[0179]
服务器对该待查询的空间区域进行边界网格化处理,首先将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格,以此类
推,可将所有边界坐标点所在的网格确定为边界网格。上述边界网格化处理的结果可参阅图4b中的(2),在图4b中的(2)中,该多边形由五个经纬度坐标点构成,分别为a(lata,lona)、b(latb,lonb)、c(latc,lonc)、d(latd,lond)、e(late,lone)。上述五个经纬度坐标点分别为多边形的五个顶点,也分别为上述待查询的空间区域的五个边界坐标点。为了使说明更为简洁,本实施例可将经纬度坐标点a和经纬度坐标点b分别作为第一边界坐标点a和第二边界坐标点b进行说明。
[0180]
需要注意的是,上述每个边界网格的网格层级为索引所在的层级。例如,时空数据库中构建的全球离散四叉树网格的索引层级为l,则本实施例中得到的边界网格的网格层级也为l。具体的,将边界坐标点所在的网格确定为边界网格,需要将边界坐标点转换为网格编码,网格编码转换方式根据时空数据库采用的索引网格系统原理的不同而有所差异。在本实施例中,可以先将第一边界坐标点a的经纬度坐标转换为网格对应的行号和列号其中,符号表示向下取整。再将行号row和列号col转换为l位二进制数(row)2、(col)2,以行号在前、列号在后,执行莫顿交叉运算,可得到第一边界坐标点a对应的2l位的二进制网格编码(gs)2。例如,(row)2=100111,(col)2=011010,则(gs)2=100101101110。本实施例中,是基于z阶曲线的网格编码转换方式,在其他实施例中,并不局限于此种网格编码转换方式,也可以是基于希尔伯特曲线的网格编码转换方式,并且,该网格编码也可转换为四进制、十进制整型数或字符串。
[0181]
步骤402:按序依次将上述第一边界坐标点和上述第二边界坐标点之间的边界部分进行网格填充,得到第三边界网格。
[0182]
因为构成空间区域的经纬度坐标点是有限个的,故由经纬度坐标点得到的边界网格可能没有完全覆盖空间区域的边界。如图4b中的(2),五个经纬度坐标点分别确定得到五个边界网格,显而易见的,该五个边界网格并没有完全覆盖空间区域的边界部分。因此,还需依次对相邻的经纬度坐标点之间的边界区域进行网格填充,得到边界网格。
[0183]
具体的,按序依次将上述第一边界坐标点a和上述第二边界坐标点b之间的边界部分进行网格填充,得到第三边界网格。如图4b中的(3),对第一边界坐标点a和第二边界坐标点b之间的边界部分进行网格填充,得到的第三边界网格分别为网格a1、a2、a3、a4、a5、a6。同理的,按照上述网格填充方法,按序依次对边界坐标点b和边界坐标点c之间的边界部分进行网格填充,对边界坐标点c和边界坐标点d之间的边界部分进行网格填充,对边界坐标点d和边界坐标点e之间的边界部分进行网格填充,对边界坐标点e和边界坐标点a之间的边界部分进行网格填充,可得到全部的第三边界网格。至此,通过上述方法得到的第一边界网格、第二边界网格以及第三边界网格能够完全覆盖空间区域的边界。
[0184]
另一方面,下文将以上述第一边界坐标点a和上述第二边界坐标点b之间的边界部分进行网格填充,得到第三边界网格为例进行详细说明。具体的,需先确定第一边界坐标点a和第二边界坐标点b所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理。
[0185]
在目标斜率的绝对值大于0且不大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的边界坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号。进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号。在第一边界网格所在行中,将第一边界网格所在列和边界交点所在
列之间的网格填充,得到的边界网格即为上述第三边界网格。
[0186]
在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的边界坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号。进而根据目标直线的解析式和边界交点的列号,可以确定边界交点的行号。在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到的边界网格即为上述第三边界网格。
[0187]
在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到的边界网格即为上述第三边界网格。
[0188]
具体的,可参阅图4c,图4c为本技术实施例提供的另一种空间区域边界网格化的效果示意图。如图4c所示,是将上述边界坐标点a和上述边界坐标点e之间的边界部分进行网格填充,得到第三边界网格。边界坐标点a和边界坐标点e可确定唯一的目标线段,该目标线段的起始网格为边界坐标点a所在的边界网格(行号10,列号13),该目标线段的终止网格为边界坐标点e所在的边界网格(行号8,列号21)。该目标线段的目标斜率的绝对值大于零且不大于一,且与网格线相交于点f和g,故可以确定边界交点f和边界交点g。该边界交点f的行号与行号10相邻,结合目标线段的解析式可以得到边界交点f的列号为列号15。该边界交点g的行号与行号8相邻,结合目标线段的解析式可以得到边界交点g的列号为列号20。故基于边界坐标点a所在的边界网格、边界坐标点e所在的边界网格、边界交点f以及边界交点g,可以确定10行14-15列、9行15-20列、8行20列的网格为上述第三边界网格。
[0189]
步骤403:将上述第一边界网格、第二边界网格以及第三边界网格作为空间区域的边界网格集。
[0190]
由上述步骤401中的边界网格化方法可得到第一边界网格和第二边界网格,由上述步骤402中通过对第一边界坐标点和第二边界坐标点之间的边界部分进行网格填充的方法可得到彼此相邻的第三边界网格。
[0191]
综上可知,将上述得到的第一边界网格、第二边界网格以及第三边界网格作为空间区域的边界网格集,可以使该边界网格集合中的所有边界网格完全覆盖空间区域的边界部分,且得到边界网格的计算过程中大大降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0192]
可选的,上述步骤402中对所有相邻边界坐标点之间的边界部分进行网格填充的过程中,还可以同步记录一个哈希表结构的行列映射集。该行列映射集中的键为空间区域的边界网格的行号,该行列映射集中的值为每个边界网格的行号对应的最后一列网格列号的集合。例如,在上述图4c中,连接边界坐标点a和边界坐标点e的空间区域的边界线段所对应的行列映射集为{8:[21],9:[20],10:[15]}。或者,上述行列映射集中的键还可以为空间区域的边界网格的列号,行列映射集中的值还可以为每个边界网格的列号对应的最后一行网格行号的集合。相应的,图4c中连接边界坐标点a和边界坐标点e的边界线段所对应的行列映射集还可以表示为{13:[10],14:[10],15:[10],16:[9],17:[9],18:[9],19:[9],20:[9],21:[8]}。该行列映射集可用于构建边界网格范围字典,以加速网格与空间区域的拓扑关系判断。
[0193]
请参阅图5a,图5a为本技术实施例提供的又一种时空数据查询方法的流程示意图,该方法包括但不限于如下步骤:
[0194]
步骤501:将边界网格集中的边界网格映射为其所在空间区域内的行列编号。
[0195]
服务器将空间区域的边界网格化处理得到边界网格集后,还需要根据该边界网格集中的边界网格构建边界网格范围字典。该边界网格范围字典记录了所有边界网格的行号和列号,可用于加速网格与空间区域的拓扑关系判断。具体的,根据该边界网格集中的边界网格构建边界网格范围字典,首先需要将边界网格集中的边界网格映射为其所在空间区域内的行列编号,上述边界网格集中的边界网格可能是通过上述边界网格化方法得到的边界网格,也可能是通过上述对相邻的边界坐标点之间的边界区域进行网格填充得到的彼此相邻的边界网格序列所包含的边界网格。然后再根据边界网格的行列编号的不同情况对其进行祛冗余操作。
[0196]
可参阅图5b,图5b为本技术实施例提供的一种生成边界网格范围字典的效果示意图。如图5b所示,将行号0-7、列号0-13区域内的边界网格映射为其所在空间区域内的行列编号。图5b中的每一个边界网格都有一个唯一对应的行号和列号,该行列编号用于指示该边界网格在空间区域内的相对位置。
[0197]
可选的,本实施例中将边界网格集中的边界网格映射为其所在空间区域内的行列编号,还可以通过遍历行列映射集来实现,该行列映射集为上述步骤402中记录得到的。因为该行列映射集中的键可以为空间区域的边界网格的行号,该行列映射集中的值可以为每个边界网格的行号对应的最后一列网格列号的集合,故遍历该行列映射集可同样得到该空间区域内的所有边界网格的行号和列号,能达到同样的目的和效果。且因为行列映射集中的数据是以哈希表数据结构存储的,可以加快数据的查询速度,故此方法得到边界网格的行列编号的效率更高。
[0198]
步骤502:对边界网格的行列编号进行祛冗余操作。
[0199]
由上述步骤501可得到边界网格集中的边界网格的行列编号,在本步骤中将根据边界网格的行列编号的不同情况对其进行不同处理。下面将以边界网格集中的任意一个边界网格为例进行说明。
[0200]
将该任意一个边界网格的行号记为第一行号,在该第一行号不为代表空间区域的多边形的边界顶点所在的网格行号的情况下,则可直接将该第一行号加入边界网格范围字典中的键,将该第一行号对应的网格列号确定为边界网格范围字典中的键对应的值。需要注意的是,上述代表空间区域的多边形的边界顶点和上述步骤402中的第一边界坐标点、第二边界坐标点表示的是同一类型的坐标点,如上述图4b中的(2)所提到的边界坐标点a、b、c、d、e也和上述代表空间区域的多边形的边界顶点为同一类型的坐标点。具体的,如图5b所示,在行号0-7、列号0-13表示的空间区域内,多边形的边界顶点有:点(行号0,列号0)、点(行号7,列号2)、点(行号4,列号5)、点(行号7,列号8)、点(行号0,列号10)、点(行号2,列号12)、点(行号0,列号13)。或者,也可以将该任意一个边界网格的列号记为第一列号,若该第一列号不为上述多边形的边界顶点所在的网格列号,则可直接将该第一列号加入边界网格范围字典中的键,将该第一列号对应的网格行号确定为边界网格范围字典中的键对应的值。
[0201]
另一方面,还是将上述任意一个边界网格的行号记为第一行号,在该第一行号为上述多边形的边界顶点所在的网格行号的情况下,需要判断第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。具体的,若第
一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于多边形内,则将该第一行号加入边界网格范围字典中的键,并将该第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值。或者,将上述任意一个边界网格的列号记为第一列号,在该第一列号为上述多边形的边界顶点所在的网格行号的情况下,判断该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。具体的,若第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于多边形内,则将该第一列号加入边界网格范围字典中的键,并将该第一列号对应的网格行中的临近两行的行号确定为上述边界网格范围字典中的键对应的值。
[0202]
另一方面,还是将上述任意一个边界网格的行号记为第一行号,在该第一行号为上述多边形的边界顶点所在的网格行号的情况下,判断第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。具体的,若该第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于多边形内,则将该第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外。由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合。或者,将上述任意一个边界网格的列号记为第一列号,在该第一列号为上述多边形的边界顶点所在的网格行号的情况下,判断该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。具体的,若第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于多边形内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外。由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。
[0203]
此外,还可结合图5b对上述边界网格的行列编号进行祛冗余操作进一步说明。如图5b所示,在行号0-7、列号0-13表示的空间区域内,多边形的边界顶点有:点(行号0,列号0)、点(行号7,列号2)、点(行号4,列号5)、点(行号7,列号8)、点(行号0,列号10)、点(行号2,列号12)、点(行号0,列号13),需要将该空间区域的所有边界网格的行列编号进行祛冗余操作以构建相对应的边界网格范围字典。以行号0作为上述第一行号,行号0对应的列集为[0,10,13]。可知,此时第一行号为多边形的边界顶点(行号0,列号0)、(行号0,列号10)所在的网格行号,故需判断第一行号对应的列集中的临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。在行号0上,分别取列区间[0,10]和[10,13]之间的任意网格,计算该任意网格的中心坐标点,可知列区间[0,10]和[10,13]之间的任意网格的中心坐标点均位于多边形内,则将该第一行号(行号0)加入边界网格范围字典中的键,并将该第一行号(行号0)对应的列号[0,10,13]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:0,v:[0,10,10,13]}。边界网格范围字典中每个行键对应的列号集表示的是该行网格属于多边形内部的列区间段。
[0204]
同理,以行号1作为上述第一行号,行号1对应的列集为[0,10,11,12]。可知,此时第一行号不为多边形的边界顶点所在的网格行号,故直接将该第一行号(行号1)加入边界网格范围字典中的键,并将该第一行号(行号1)对应的列号[0,10,11,12]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:1,v:[0,10,11,12]}。
[0205]
以行号2作为上述第一行号,行号2对应的列集为[1,10,12]。可知,此时第一行号为多边形的边界顶点(行号2,列号12)所在的网格行号,故需判断第一行号对应的列集中的
临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。在行号2上,分别取列区间[1,10]和[10,12]之间的任意网格,计算该任意网格的中心坐标点,可知列区间[1,10]之间的任意网格的中心坐标点均位于多边形内,列区间[10,12]之间的任意网格的中心坐标点不位于多边形内,则将该第一行号(行号2)加入边界网格范围字典中的键,并将该第一行号(行号2)对应的列号[1,10]确定为上述边界网格范围字典中的键对应的值,将列号12排除在上述边界网格范围字典中的键对应的值之外。在边界网格范围字典中可表示为{k:2,v:[1,10]}。
[0206]
以行号3作为上述第一行号,行号3对应的列集为[1,9]。可知,此时第一行号不为多边形的边界顶点所在的网格行号,故直接将该第一行号(行号3)加入边界网格范围字典中的键,并将该第一行号(行号3)对应的列号[1,9]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:3,v:[1,9]}。
[0207]
以行号4作为上述第一行号,行号4对应的列集为[1,5,9]。可知,此时第一行号为多边形的边界顶点(行号4,列号5)所在的网格行号,故需判断第一行号对应的列集中的临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。在行号4上,分别取列区间[1,5]和[5,9]之间的任意网格,计算该任意网格的中心坐标点,可知列区间[1,5]和[5,9]之间的任意网格的中心坐标点均位于多边形内,则将该第一行号(行号4)加入边界网格范围字典中的键,并将该第一行号(行号4)对应的列号[1,5]和[5,9]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:4,v:[1,5,5,9]}。
[0208]
以行号5作为上述第一行号,行号5对应的列集为[1,4,5,9]。可知,此时第一行号不为多边形的边界顶点所在的网格行号,故直接将该第一行号(行号5)加入边界网格范围字典中的键,并将该第一行号(行号5)对应的列号[1,4,5,9]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:5,v:[1,4,5,9]}。
[0209]
以行号6作为上述第一行号,行号7对应的列集为[2,3,7,8]。可知,此时第一行号不为多边形的边界顶点所在的网格行号,故直接将该第一行号(行号6)加入边界网格范围字典中的键,并将该第一行号(行号6)对应的列号[2,3,7,8]确定为上述边界网格范围字典中的键对应的值。在边界网格范围字典中可表示为{k:6,v:[2,3,7,8]}。
[0210]
以行号7作为上述第一行号,行号7对应的列集为[2,8]。可知,此时第一行号为多边形的边界顶点(行号7,列号2)、(行号7,列号8)所在的网格行号,故需判断第一行号对应的列集中的临近两列之间的任意网格的中心坐标点与上述多边形(空间区域)的拓扑关系。在行号7上,取列区间[2,8]之间的任意网格,计算该任意网格的中心坐标点,可知列区间[2,8]之间的任意网格的中心坐标点不位于多边形内,则将该第一行号(行号7)对应的列号[2,8]排除在上述边界网格范围字典中的键对应的值之外。在边界网格范围字典中可以表示为{k:7,v:[]}。
[0211]
步骤503:将祛冗余后的边界网格的行列编号构建为边界网格范围字典。
[0212]
由上述步骤502可得到祛冗余后的边界网格的行列编号,并将祛冗余后的边界网格的行列编号构建为边界网格范围字典。该边界网格范围字典中的数据可以哈希表数据结构存储,哈希表是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;将其应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
[0213]
请参阅图6a,图6a为本技术实施例提供的又一种时空数据查询方法的流程示意图,该方法包括但不限于如下步骤:
[0214]
步骤601:计算得到包含空间区域的外包网格。
[0215]
服务器将空间区域的边界网格化处理得到边界网格集,并根据该边界网格集中的边界网格构建边界网格范围字典后,还需要依据得到的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。具体的,依据边界网格范围字典对空间区域的非边界部分填充以得到内部网格,首先需计算得到包含该空间区域的外包网格。该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,因为以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高。计算外包网格,可以在构成空间区域的经纬度坐标点集合中找到经纬度最小值的坐标点和经纬度最大值的坐标点,从而根据这两个坐标点确定包含上述空间区域且尺度最小的外包网格。可选的,在上述空间区域覆盖的范围非常大的情况下,比如可能是一个国家,或者是横跨了北半球和南半球的空间区域,可能无法仅根据两个坐标点来确定一个能完全包含该空间区域的外包网格,此时该外包网格可能是由多个网格拼接在一起的外包网格。
[0216]
可参阅图6b,图6b为本技术实施例提供的一种空间区域内部网格填充的效果示意图。在图6b中的上图中,计算得到包含空间区域的外包网格,其中,该空间区域的范围大小与上述图4b中的(3)一致,且该空间区域已经经过边界网格化处理得到其边界网格集,并根据该边界网格集构建了相对应的边界网格范围字典。接着需要依据得到的边界网格范围字典对外包网格进行填充,得到内部网格,图6b中的下图即为对外包网格进行内部网格填充得到的结果。下面将对外包网格进行内部网格填充的过程进行说明。
[0217]
步骤602:利用外包网格和边界网格构建候选网格填充树。
[0218]
依据得到的边界网格范围字典对外包网格进行内部网格填充,首先需要构建候选网格填充树,将上述外包网格作为候选网格填充树的树顶,将上述边界网格作为候选网格填充树的叶子节点,该候选网格填充树为四叉树结构。
[0219]
详情可参阅图6c,图6c为本技术实施例提供的一种生成候选网格填充树的效果示意图。如图6c所示,候选网格填充树的树顶为上述图6b中的外包网格x。本实施例中的x代表一系列网格编码,起始剖分网格的子网格编码与起始剖分网格拥有相同的编码前缀x。由于是递归四叉剖分,为剖分结果直观可见,本实施例将以四进制编码位“0,1,2,3”表示剖分子网格的各层级编码值。
[0220]
以外包网格x的中心坐标点为原点,将外包网格x沿着十字网格线四等分为四个大小一样的网格x0、x1、x2、x3,该网格x0、x1、x2、x3的编码层级比外包网格的编码层级更高,可分别作为上述候选网格填充树的中间节点。
[0221]
进一步的,因为网格x0中包含有上述边界网格,故再以网格x0的中心坐标点为原点,将网格x0沿着十字网格线四等分为四个大小一样的网格x00、x01、x02、x03,该网格x00、x01、x02、x03的编码层级比网格x0、x1、x2、x3的编码层级又更高,可分别作为上述候选网格填充树的下一级中间节点;此外,网格x01、x02、x03的剖分方式与网格x00一致,此处不做赘述。
[0222]
进一步的,因为网格x00中未包含上述边界网格,故对网格x00停止剖分;又因为网格x01中包含有上述边界网格,故再以网格x01的中心坐标点为原点,将网格x01沿着十字网
格线四等分为四个大小一样的网格x010、x011、x012、x013,该网格x010、x011、x012、x013的编码层级比网格x00、x01、x02、x03的编码层级又更高,可分别作为上述候选网格填充树的再下一级中间节点;此外,网格x02、x03的剖分方式与网格x00一致,此处不做赘述。
[0223]
进一步的,因为网格x010、x011、x012中均未包含上述边界网格,故对它们停止剖分;又因为网格x013中包含有上述边界网格,故再以网格x013的中心坐标点为原点,将网格x013沿着十字网格线四等分为四个大小一样的网格x0130、x0131、x0132、x0133,该网格x0130、x0131、x0132、x0133的编码层级比网格x010、x011、x012、x013的编码层级又更高,可分别作为上述候选网格填充树的又下一级中间节点;此时,因为网格x0132、x0133的网格层级已经和上述边界网格的网格层级一致,故停止剖分,网格x0130、x0131、x0132、x0133为上述候选网格填充树的叶子节点。
[0224]
综上可知,依据上述的网格剖分方式对最起始的外包网格x逐级四叉剖分,直到剖分得到的新网格的网格层级与上述空间区域的边界网格的网格层级一致,停止往下剖分。此时,上述空间区域的外包网格可作为候选网格填充树的树顶,如图6c中的网格x;空间区域的边界网格可作为候选网格填充树的叶子节点,如图6c中的网格x0132、x0133、x0213、x0231、x0233、x0300、x0301、x0302。
[0225]
步骤603:对候选网格填充树缺失的叶子节点和中间节点填充,得到候选内部网格。
[0226]
由上述步骤602可知,其构建的候选网格填充树是不完整的,因为空间区域的边界网格数量有限,仅能作为该候选网格填充树的一部分叶子节点,该候选网格填充树的另一部分叶子节点和中间节点还是缺失的,因此,本步骤需要根据边界网格的编码值将候选网格填充树缺失的叶子节点和中间节点表示的网格填充完整,并且将用于填充的网格加入候选内部网格集。如图6c中带有方框的网格编码,对上述候选网格填充树缺失的中间节点填充,可得到候选内部网格x00、x010、x011、x012、x020、x022、x031、x032、x033;对上述候选网格填充树缺失的叶子节点填充,可得到候选内部网格x0130、x0131、x0210、x0211、x0212、x0230、x0232、x0303。上述得到的候选内部网格集的多个候选内部网格为多尺度网格,分别对应于候选网格填充树的不同层级分支,可能包含从索引层级直到起始剖分网格层级中的任意层级。
[0227]
经过本步骤对候选网格填充树缺失的叶子节点和中间节点表示的网格填充后,可生成一个完整的候选网格填充树,该候选网格填充树中的叶子节点和中间节点,表示上述候选内部网格和空间区域内的边界网格。其结果还可参阅图6b中的下图,图6b中的下图即为对外包网格进行内部网格填充后的结果。通过该图显而易见,候选内部网格均位于外包网格内,候选内部网格中的一部分网格位于空间区域内,候选内部网格中的另一部分网格位于空间区域外。
[0228]
步骤604:根据边界网格范围字典筛选上述候选内部网格,得到内部网格集。
[0229]
由上述步骤603可得到候选内部网格,该候选内部网格并不是最终所求的空间区域的内部网格集,其中还存在部分网格不位于空间区域内。故还需要利用边界网格范围字典对候选内部网格和空间区域的拓扑关系进行判断。具体的,利用边界网格范围字典筛选候选内部网格,需根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值。若候选内部网格的行号和列号均包含于边界网格范围字典中的键
值,则表示该候选内部网格位于空间区域内,将该候选内部网格确定为内部网格;若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则表示该候选内部网格不位于空间区域内,将该候选内部网格舍弃,如此可得到最终的内部网格集。对于候选内部网格的行号和列号是否包含于边界网格范围字典中的键值,本实施例提供了一种确定方式。以候选内部网格的行号为键,在边界网格范围字典中找到该键对应的值,也就是该键对应的列号区间;如果候选内部网格的列号大于该列号区间的最小列号且小于该列号区间的最大列号,则确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。可选的,如果边界网格范围字典中以候选内部网格的行号为键所对应的列号区间有多个,则对多个列号区间依次按照上述判断方式来确定候选内部网格的行列号归属,只要候选内部网格的列号属于任意一个列号区间,则可确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。例如,对网格编码为x032的候选内部网格进行拓扑关系判断,假设该候选内部网格x032对应的行列号为[152,396],则在边界网格范围字典中查找以行号152为键所对应的列号区间段,假设查找行152对应的列号区间段为[390,401],候选内部网格x032的列号396属于该列号区间段内,则表示该候选内部网格x032的行号和列号包含于边界网格范围字典中的键值,可确定该候选内部网格x032位于空间区域内,进而可将该候选内部网格x032确定为内部网格。
[0230]
综上可知,上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0231]
本技术实施例中所提供的时空数据查询方法,可满足高性能时空数据查询的应用需求,可支持如秒级实时查询、分钟级别空间加载,还可支持行政区边界内的电信网络问题实时分析、热点信息实时查询等时空数据查询分析的应用场景。
[0232]
例如在电信领域网规网优场景中,需要在线分析某个空间区域的网络运行状况,统计分析该空间区域的一定时间内的网元日志,并进行关联性分析,从而识别该空间区域内的网络质量异常片区,进行网络规划优化。
[0233]
对于上述的应用场景,用户希望查询某个目标空间区域内的网络信号、网络质量等时空数据,以帮助其浏览常用指标趋势,有效发现可能存在的网络问题,进行网络规划优化。此时,需要从海量的与电信网络相关的数据中高效的查询特定目标空间区域中的时空数据。该特定目标空间区域可以为预设(如高价值区域、医院、学校、办公园区、居民小区等)或用户自定义(用户提供经纬度坐标点集所定义的多边形范围)的空间区域查询范围。首先由用户(客户端)发起空间区域查询请求,与客户端通信的服务器接收该查询请求后,将待查询的空间区域转换为索引区间并在数据库中进行时空数据查询,返回结果基于用户需要的分析维度可进行全量结果返回或预汇聚。例如,用户需要监控一高价值区域的网络健康状况,以一定时间间隔定期查询该高价值空间区域范围内的信号强度、信号质量、覆盖情况等数据,并对返回数据基于预设规则进行结果统计汇聚,生成网络健康度报告。
[0234]
上述详细阐述了本技术实施例的方法,下面提供本技术实施例的装置。
[0235]
请参阅图7,图7为本技术实施例提供的一种时空数据查询装置的结构示意图,该
时空数据查询装置70可以包括确定单元701、网格化单元702以及查询单元703,其中,各个单元的描述如下:
[0236]
确定单元701,用于确定待查询的空间区域;
[0237]
网格化单元702,用于将所述空间区域网格化,得到边界网格和内部网格;其中,所述边界网格为包含边界坐标点的网格,所述边界坐标点为位于所述空间区域的边界的坐标点;所述内部网格为不包含所述边界坐标点的网格;所述边界网格的编码层级和/或所述内部网格的编码层级包括,一种编码层级,或者至少两种不同的编码层级;
[0238]
查询单元703,用于将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果。
[0239]
在本技术实施例中,首先确定待查询的空间区域,然后将待查询的空间区域网格化,得到边界网格和内部网格,最后将边界网格的索引所指向的数据和内部网格所指向的数据作为最后的查询结果。其中,常规的网格化方法是基于四叉树网格索引,自顶而下的逐级递归四分空间区域,且每次剖分过程中需通过矢量计算判断新生成的网格与待查询的空间区域的拓扑关系,重复上述过程直到达到网格索引层级。而本技术实施例改进了空间区域的剖分策略及网格拓扑关系的判断方法,即先对空间区域的边界网格化,得到边界网格的集合,进而以边界网格为依据,对空间区域的内部填充,得到内部网格的集合。上述改进后的方法可以减少网格与空间区域关系的判断次数,以关系判断取代原来的矢量计算,加速了网格与空间区域拓扑关系的判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率;与此同时,改进后的方法对位于空间区域的边界的网格和内部的网格进行了区分,提高了查询结果的精准度,可以有效满足对空间区域有针对性的精准查询的需求。
[0240]
在一种可能的实施方式中,所述网格化单元702,具体用于将所述空间区域的边界网格化,得到所述边界网格;所述时空数据查询装置70还可以包括生成单元704和填充单元705,其中:
[0241]
生成单元704,用于根据所述边界网格,生成边界网格范围字典,所述边界网格范围字典包括所述边界网格的行号和列号;
[0242]
填充单元705,用于根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格。
[0243]
在本技术实施例中,将空间区域的边界网格化,得到边界网格,该边界网格为索引所在层级,其中,边界网格化的过程主要为将边界坐标点所在的网格确定为边界网格;然后依据得到的边界网格生成边界网格范围字典,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断;最后依据生成的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。上述得到空间区域的边界网格和内部网格的方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
[0244]
在一种可能的实施方式中,所述确定单元701,还用于将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格,所述第一边界坐标点和所述第二边界坐标点为位于所述空间区域边界的两个不同的坐标点;
[0245]
所述填充单元705,还用于对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格,所述第三边界网格为不同于所述第一边界网格和所述第二边界网格的所述边界网格。
[0246]
在本技术实施例中,提供了得到空间区域的边界网格的实施方式。通过对空间区域的边界网格化,得到该边界网格。其中,边界网格化的主要过程为将边界坐标点所在的网格确定为边界网格,比如,将第一边界坐标点所在的网格和第二边界坐标点所在的网格确定为边界网格,该第一边界坐标点和第二边界坐标点为空间区域的两个不同的边界坐标点。此外,边界网格化还包括按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列,比如,按序依次对上述第一边界坐标点和第二边界坐标点之间的边界区域进行网格填充,可以得到一个包含了若干个彼此相邻的边界网格的网格序列,该网格序列中的网格可确定为边界网格,且该包含边界网格的网格序列和上述边界网格化方法得到的边界网格一起构成边界网格的集合。上述通过对空间区域的边界网格化得到边界网格的方法,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0247]
在一种可能的实施方式中,所述确定单元701,还用于若目标斜率的绝对值大于0且不大于1,将与所述第一边界网格的行号相邻的行号确定为边界交点的行号,其中,所述边界交点为所述第一边界坐标点和所述第二边界坐标点之间的坐标点,所述目标斜率为所述第一边界坐标点和所述第二边界坐标点所在的目标直线的斜率;
[0248]
所述确定单元701,还用于根据所述边界交点的行号和所述目标直线的解析式,确定所述边界交点的列号;
[0249]
所述填充单元705,具体用于在所述第一边界网格所在行中,将所述第一边界网格所在列和所述边界交点所在列之间的网格填充,得到所述第三边界网格。
[0250]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于0且不大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号;进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号;在第一边界网格所在行中,将第一边界网格所在列和边界交点所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0251]
在一种可能的实施方式中,所述确定单元701,还用于若所述目标斜率的绝对值大于1,将与所述第一边界网格的列号相邻的列号确定为所述边界交点的列号;
[0252]
所述确定单元701,还用于根据所述边界交点的列号和所述目标直线的解析式,确
定所述边界交点的行号;
[0253]
所述填充单元705,具体还用于在所述第一边界网格所在列中,将所述第一边界网格所在行和所述边界交点所在行之间的网格填充,得到所述第三边界网格。
[0254]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号;进而根据目标直线的解析式和边界交点的列号,可以确定边界交点的行号;在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0255]
在一种可能的实施方式中,所述填充单元705,具体还用于若所述目标斜率的绝对值为0,在所述第一边界网格所在行中,将所述第一边界网格所在列和所述第二边界网格所在列之间的网格填充,得到所述第三边界网格。
[0256]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0257]
在一种可能的实施方式中,所述确定单元701,还用于在所述边界网格的第一行号不为所述第一边界坐标点所在的行号且不为所述第二边界坐标点所在的行号的情况下,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列号确定为所述边界网格范围字典中的键对应的值;
[0258]
或,所述确定单元701,还用于在所述边界网格的第一列号不为所述第一边界坐标点所在的列号且不为所述第二边界坐标点所在的列号的情况下,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行号确定为所述边界网格范围字典中的键对应的值。
[0259]
在本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该
边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号不为上述第一边界坐标点所在的行号且不为上述第二边界坐标点所在的行号的情况下,将该第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列号确定为边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号不为上述第一边界坐标点所在的列号且不为上述第二边界坐标点所在的列号的情况下,将该第一列号确定为边界网格范围字典中的键,并将第一列号对应的网格行号确定为边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0260]
在一种可能的实施方式中,所述确定单元701,还用于在所述第一行号为所述第一边界坐标点所在的行号且为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于所述空间区域内,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
[0261]
或,所述确定单元701,还用于在所述第一列号为所述第一边界坐标点所在的列号且为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于所述空间区域内,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行中的相邻两行的行号确定为所述边界网格范围字典中的键对应的值。
[0262]
在本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于空间区域内,则将第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于空间区域内,将该第一列号确定为上述边界网
格范围字典中的键,并将该第一列号对应的网格行中的相邻两行的行号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0263]
在一种可能的实施方式中,所述确定单元701,还用于在所述第一行号为所述第一边界坐标点所在的行号且为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
[0264]
或,所述确定单元701,还用于在所述第一列号为所述第一边界坐标点所在的列号且为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一列号对应的网格行中的临近两行的行号确定为所述边界网格范围字典中的键对应的值。
[0265]
在本技术实施例中,还提供了根据边界网格生成边界网格范围字典的又一种实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于空间区域内,则将第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一行号确定为边界网格范围字典中的键,还需视第一行号对应的网格列的不同情况而定,若第一行号对应的网格列中除了上述临近两列之外,还存在其他列的网格中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,反之则将第一行号排除在边界网格范围字典中的键之外;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于空间区域内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一列号确定为边界网格范围字典中的键,还需视第一列号对应的网格行的不同情况而定,若第一列号对应的网格行中除了上述临近两行之外,还存在其他行的网格中心坐标点位于空间区域内,则将该第一列号确定为边界网格范围字典中的键,反之则将第一列号排除在边界网格范围字典中的键之外。上述生成边界网格范围字典的方法所得到的边界网格范围字典,其键值包含的是经过祛冗余后的行号和列号的集合,可以使空间区域网格化得到的网格结果更为精准,从而使网格索引所指向的数据作为最后的查询结果更为精准;且该边界网格范围字典可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0266]
在一种可能的实施方式中,所述时空数据查询装置70还可以包括计算单元706和
构建单元707,其中:
[0267]
计算单元706,用于计算得到外包网格,所述外包网格包含所述空间区域所在的网格;
[0268]
构建单元707,用于根据所述外包网格和所述边界网格,构建候选网格填充树,其中,所述候选网格填充树为四叉树结构,所述候选网格填充树的树顶为所述外包网格,所述候选网格填充树的叶子节点为所述边界网格;
[0269]
所述填充单元705,还用于对所述候选网格填充树缺失的叶子节点和中间节点填充,得到候选内部网格,所述候选内部网格为所述候选网格填充树缺失的叶子节点和中间节点;
[0270]
所述确定单元701,还用于根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格。
[0271]
在本技术实施例中,利用边界网格范围字典对空间区域的非边界部分进行网格填充操作,可得到上述内部网格,该内部网格为包含于空间区域内部的多尺度网格,即该内部网格的编码层级包括至少两种不同的编码层级。具体的,首先计算得到完全包含上述空间区域的外包网格,该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高;然后利用外包网格和边界网格构建候选网格填充树,将外包网格作为候选网格填充树的树顶,将边界网格作为候选网格填充树的叶子节点;接着对候选网格填充树中缺失的叶子节点和中间节点填充,可得到候选内部网格,该候选内部网格为上述候选网格填充树中填充的叶子节点和中间节点;最后利用边界网格范围字典筛选候选内部网格,得到上述内部网格。上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0272]
在一种可能的实施方式中,所述确定单元701,具体还用于若所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值,将所述候选内部网格确定为所述内部网格。
[0273]
在本技术实施例中,对空间区域的非边界部分填充,最先得到的只是候选内部网格,还需利用边界网格范围字典对候选内部网格进一步筛选,得到上述内部网格。本技术实施例提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和列号均包含于边界网格范围字典中的键值,则将该候选内部网格确定为内部网格。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0274]
在一种可能的实施方式中,所述确定单元701,具体还用于在所述边界网格范围字典中的键为所述候选内部网格的行号的情况下,若所述候选内部网格的列号大于列号区间的最小列号且小于所述列号区间的最大列号,确定所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值;所述列号区间为所述边界网格范围字典中的键对应的
值。
[0275]
在本技术实施例中,对于候选内部网格的行号和列号是否包含于边界网格范围字典中的键值,提供了一种确定方式。以候选内部网格的行号为键,在边界网格范围字典中找到该键对应的值,也就是该键对应的列号区间;如果候选内部网格的列号大于该列号区间的最小列号且小于该列号区间的最大列号,则确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。可选的,如果边界网格范围字典中以候选内部网格的行号为键所对应的列号区间有多个,则对多个列号区间依次按照上述判断方式来确定候选内部网格的行列号归属,只要候选内部网格的列号属于任意一个列号区间,则可确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。
[0276]
在一种可能的实施方式中,所述确定单元701,具体还用于若所述候选内部网格的行号和/或列号不包含于所述边界网格范围字典中的键值,不将所述候选内部网格确定为所述内部网格。
[0277]
在本技术实施例中,提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则将该候选内部网格排除在内部网格的集合之外。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0278]
在一种可能的实施方式中,所述时空数据查询装置70还可以包括转换单元708和排序单元709,其中:
[0279]
转换单元708,用于将所述边界网格和所述内部网格转换为目标网格,所述目标网格的编码层级为所述候选网格填充树的最高索引层级;
[0280]
排序单元709,用于对所述目标网格的索引排序,得到索引区间,所述索引区间包含了所述目标网格的索引;
[0281]
所述查询单元703,具体用于将所述索引区间所指向的数据作为所述查询结果。
[0282]
在本技术实施例中,将边界网格的索引所指向的数据以及内部网格的索引所指向的数据作为最后的查询结果。首先将边界网格和内部网格中的所有网格转换为目标网格,具体的,对于本身为最高索引层级的边界网格和内部网格不做转换处理,对于低于最高索引层级的边界网格和内部网格,可将其表示为该网格包含的索引层级对应的最小与最大编码子网格区间段,因为本实施例是基于四叉树网格索引进行的网格化,所以转换得到的目标网格的编码层级为候选网格填充树的最高索引层级;目标网格的索引可以形成索引区间段,对目标网格按网格索引排序,若两相邻目标网格的索引连续,则可将它们合并为一个新的索引区间,依次类推,最终得到的索引区间包含了上述所有目标网格的索引;最后根据该索引区间将其所指向的数据作为最后的查询结果。上述构建索引区间的方法,可以提高时空数据的查询速度,也可以使查询结果的精准度大大提高。
[0283]
在一种可能的实施方式中,所述边界网格范围字典中的数据以哈希表数据结构存储。
[0284]
在本技术实施例中,边界网格范围字典中的数据以哈希表数据结构存储,哈希表
是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
[0285]
根据本技术实施例,图7所示的装置中的各个单元可以分别或全部合并为一个或若干个另外的单元来构成,或者其中的某个(些)单元还可以再拆分为功能上更小的多个单元来构成,这可以实现同样的操作,而不影响本技术的实施例的技术效果的实现。上述单元是基于逻辑功能划分的,在实际应用中,一个单元的功能也可以由多个单元来实现,或者多个单元的功能由一个单元实现。在本技术的其它实施例中,基于服务器也可以包括其它单元,在实际应用中,这些功能也可以由其它单元协助实现,并且可以由多个单元协作实现。
[0286]
需要说明的是,各个单元的实现还可以对应参照图3、图4a、图5a以及图6a所示的方法实施例的相应描述。
[0287]
在图7所描述的时空数据查询装置中,通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
[0288]
请参阅图8,图8为本技术实施例提供的一种服务器80的结构示意图。该服务器80可以包括存储器801、处理器802。进一步可选的,还可以包含通信接口803以及总线804,其中,存储器801、处理器802以及通信接口803通过总线804实现彼此之间的通信连接。通信接口803用于与时空数据查询装置进行数据交互。
[0289]
其中,存储器801用于提供存储空间,存储空间中可以存储操作系统和计算机程序等数据。存储器801包括但不限于是随机存储记忆体(random access memory,ram)、只读存储器(read-only memory,rom)、可擦除可编程只读存储器(erasable programmable read only memory,eprom)、或便携式只读存储器(compact disc read-only memory,cd-rom)。
[0290]
处理器802是进行算术运算和逻辑运算的模块,可以是中央处理器(central processing unit,cpu)、显卡处理器(graphics processing unit,gpu)或微处理器(microprocessor unit,mpu)等处理模块中的一种或者多种的组合。
[0291]
存储器801中存储有计算机程序,处理器802调用存储器801中存储的计算机程序,以执行以下操作:
[0292]
确定待查询的空间区域;
[0293]
将所述空间区域网格化,得到边界网格和内部网格;其中,所述边界网格为包含边界坐标点的网格,所述边界坐标点为位于所述空间区域的边界的坐标点;所述内部网格为不包含所述边界坐标点的网格;所述边界网格的编码层级和/或所述内部网格的编码层级包括,一种编码层级,或者至少两种不同的编码层级;
[0294]
将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果。
[0295]
在本技术实施例中,首先确定待查询的空间区域,然后将待查询的空间区域网格化,得到边界网格和内部网格,最后将边界网格的索引所指向的数据和内部网格所指向的数据作为最后的查询结果。其中,常规的网格化方法是基于四叉树网格索引,自顶而下的逐级递归四分空间区域,且每次剖分过程中需通过矢量计算判断新生成的网格与待查询的空
间区域的拓扑关系,重复上述过程直到达到网格索引层级。而本技术实施例改进了空间区域的剖分策略及网格拓扑关系的判断方法,即先对空间区域的边界网格化,得到边界网格的集合,进而以边界网格为依据,对空间区域的内部填充,得到内部网格的集合。上述改进后的方法可以减少网格与空间区域关系的判断次数,以关系判断取代原来的矢量计算,加速了网格与空间区域拓扑关系的判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率;与此同时,改进后的方法对位于空间区域的边界的网格和内部的网格进行了区分,提高了查询结果的精准度,可以有效满足对空间区域有针对性的精准查询的需求。
[0296]
在一种可能的实施方式中,在将所述空间区域网格化,得到边界网格和内部网格方面,所述处理器802具体用于:
[0297]
将所述空间区域的边界网格化,得到所述边界网格;
[0298]
根据所述边界网格,生成边界网格范围字典,所述边界网格范围字典包括所述边界网格的行号和列号;
[0299]
根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格。
[0300]
在本技术实施例中,将空间区域的边界网格化,得到边界网格,该边界网格为索引所在层级,其中,边界网格化的过程主要为将边界坐标点所在的网格确定为边界网格;然后依据得到的边界网格生成边界网格范围字典,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断;最后依据生成的边界网格范围字典判断网格和空间区域的拓扑关系,对空间区域的非边界部分填充,得到内部网格。上述得到空间区域的边界网格和内部网格的方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
[0301]
在一种可能的实施方式中,在将所述空间区域的边界网格化,得到所述边界网格方面,所述处理器802具体用于:
[0302]
将第一边界坐标点所在的网格确定为第一边界网格,将第二边界坐标点所在的网格确定为第二边界网格,所述第一边界坐标点和所述第二边界坐标点为位于所述空间区域边界的两个不同的坐标点;
[0303]
对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格,所述第三边界网格为不同于所述第一边界网格和所述第二边界网格的所述边界网格。
[0304]
在本技术实施例中,提供了得到空间区域的边界网格的实施方式。通过对空间区域的边界网格化,得到该边界网格。其中,边界网格化的主要过程为将边界坐标点所在的网格确定为边界网格,比如,将第一边界坐标点所在的网格和第二边界坐标点所在的网格确定为边界网格,该第一边界坐标点和第二边界坐标点为空间区域的两个不同的边界坐标点。此外,边界网格化还包括按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列,比如,按序依次对上述第一边界坐标点和第二边界坐标点之间的边界区域进行网格填充,可以得到一个包含了若干个彼此相邻的边界网格的网格序列,该网格序列中的网格可确定为边界网格,且该包含边界网格的网格序列和上述边界网
格化方法得到的边界网格一起构成边界网格的集合。上述通过对空间区域的边界网格化得到边界网格的方法,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0305]
在一种可能的实施方式中,在对所述第一边界坐标点和所述第二边界坐标点之间的所述边界坐标点所在的网格填充,得到第三边界网格方面,所述处理器802具体用于:
[0306]
若目标斜率的绝对值大于0且不大于1,将与所述第一边界网格的行号相邻的行号确定为边界交点的行号,其中,所述边界交点为所述第一边界坐标点和所述第二边界坐标点之间的坐标点,所述目标斜率为所述第一边界坐标点和所述第二边界坐标点所在的目标直线的斜率;
[0307]
根据所述边界交点的行号和所述目标直线的解析式,确定所述边界交点的列号;
[0308]
在所述第一边界网格所在行中,将所述第一边界网格所在列和所述边界交点所在列之间的网格填充,得到所述第三边界网格。
[0309]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于0且不大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的行号为与第一边界网格的行号相邻的行号;进而根据目标直线的解析式和边界交点的行号,可以确定边界交点的列号;在第一边界网格所在行中,将第一边界网格所在列和边界交点所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0310]
在一种可能的实施方式中,所述处理器802具体还用于:
[0311]
若所述目标斜率的绝对值大于1,将与所述第一边界网格的列号相邻的列号确定为所述边界交点的列号;
[0312]
根据所述边界交点的列号和所述目标直线的解析式,确定所述边界交点的行号;
[0313]
在所述第一边界网格所在列中,将所述第一边界网格所在行和所述边界交点所在行之间的网格填充,得到所述第三边界网格。
[0314]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值大于1的情况下,确定边界交点,该边界交点与网格线相交且为第一边界坐标点和第二边界坐标点之间的坐标点,该边界交点的列号为与第一边界网格的列号相邻的列号;进而根据目标直线的解析
式和边界交点的列号,可以确定边界交点的行号;在第一边界网格所在列中,将第一边界网格所在行和边界交点所在行之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0315]
在一种可能的实施方式中,所述处理器802具体还用于:
[0316]
若所述目标斜率的绝对值为0,在所述第一边界网格所在行中,将所述第一边界网格所在列和所述第二边界网格所在列之间的网格填充,得到所述第三边界网格。
[0317]
在本技术实施例中,对边界网格化方法中的按序依次对相邻两边界坐标点之间的边界区域进行网格填充,形成彼此相邻的边界网格序列提供了进一步更为详细的实施方式。按序依次对相邻两边界坐标点之间的边界区域进行网格填充,首先需确定相邻两边界坐标点所在的目标直线的目标斜率和解析式,视目标斜率的不同情况做不同处理,以第一边界坐标点和第二边界坐标点所在的目标直线为例,在目标斜率的绝对值为0的情况下,在第一边界网格所在行中,将第一边界网格所在列和第二边界网格所在列之间的网格填充,得到第三边界网格,该第三边界网格即为彼此相邻的边界网格序列中包含的网格。上述对第一边界坐标点和第二边界坐标点之间的边界坐标点所在的网格填充得到第三边界网格,可以使空间区域的边界网格化得到的边界网格构成的集合完全覆盖空间区域的边界部分,降低了算法复杂度,提高了计算效率,且提高了查询结果的精准度,可以有效满足对空间区域的边界部分有针对性的精准查询的需求。
[0318]
在一种可能的实施方式中,在根据所述边界网格,生成边界网格范围字典方面,所述处理器802具体用于:
[0319]
在所述边界网格的第一行号不为所述第一边界坐标点所在的行号且不为所述第二边界坐标点所在的行号的情况下,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列号确定为所述边界网格范围字典中的键对应的值;
[0320]
或,在所述边界网格的第一列号不为所述第一边界坐标点所在的列号且不为所述第二边界坐标点所在的列号的情况下,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行号确定为所述边界网格范围字典中的键对应的值。
[0321]
在本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号不为上述第一边界坐标点所在的行号且不为上述第二边界坐标点所在的行号的情况下,将该第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列号确定为边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号不为上述第一边界坐标点所在的列号且不为上述第
二边界坐标点所在的列号的情况下,将该第一列号确定为边界网格范围字典中的键,并将第一列号对应的网格行号确定为边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0322]
在一种可能的实施方式中,所述处理器802具体还用于:
[0323]
在所述第一行号为所述第一边界坐标点所在的行号且/或为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于所述空间区域内,将所述第一行号确定为所述边界网格范围字典中的键,将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
[0324]
或,在所述第一列号为所述第一边界坐标点所在的列号且/或为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于所述空间区域内,将所述第一列号确定为所述边界网格范围字典中的键,将所述第一列号对应的网格行中的相邻两行的行号确定为所述边界网格范围字典中的键对应的值。
[0325]
在本技术实施例中,提供了根据边界网格生成边界网格范围字典的实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点位于空间区域内,则将第一行号确定为边界网格范围字典中的键,并将第一行号对应的网格列中的临近两列的列号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一行号为键所对应的值是经过祛冗余后的列号的集合;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点位于空间区域内,将该第一列号确定为上述边界网格范围字典中的键,并将该第一列号对应的网格行中的相邻两行的行号确定为上述边界网格范围字典中的键对应的值,由此可知,以第一列号为键所对应的值是经过祛冗余后的行号的集合。上述生成边界网格范围字典的方法,可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0326]
在一种可能的实施方式中,所述处理器802具体还用于:
[0327]
在所述第一行号为所述第一边界坐标点所在的行号且/或为所述第二边界坐标点所在的行号的情况下,若所述第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一行号对应的网格列中的临近两列的列号确定为所述边界网格范围字典中的键对应的值;
[0328]
或,在所述第一列号为所述第一边界坐标点所在的列号且/或为所述第二边界坐标点所在的列号的情况下,若所述第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于所述空间区域内,不将所述第一列号对应的网格行中的临近两行的行号确定为所述边界网格范围字典中的键对应的值。
[0329]
在本技术实施例中,还提供了根据边界网格生成边界网格范围字典的又一种实施方式,该边界网格范围字典中的键值分别为边界网格的行号和列号,该边界网格范围字典以关系判断取代原来的矢量计算,可用于加速网格和空间区域的拓扑关系判断。具体的,得到边界网格范围字典需首先遍历包含边界网格的集合,将边界网格映射为其所在空间区域内划分的行列编号,然后再根据边界网格的行列编号的不同情况做不同的处理,以边界网格集合中的任意一个边界网格为例,将该边界网格的行号作为第一行号,在该边界网格的第一行号为上述第一边界坐标点所在的行号且/或为上述第二边界坐标点所在的行号的情况下,若第一行号对应的网格列中的临近两列之间的任意网格的中心坐标点不位于空间区域内,则将第一行号对应的网格列中的临近两列的列号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一行号确定为边界网格范围字典中的键,还需视第一行号对应的网格列的不同情况而定,若第一行号对应的网格列中除了上述临近两列之外,还存在其他列的网格中心坐标点位于空间区域内,则将该第一行号确定为边界网格范围字典中的键,反之则将第一行号排除在边界网格范围字典中的键之外;或者,还是以边界网格集合中的任意一个边界网格为例,将该边界网格的列号作为第一列号,在该边界网格的第一列号为上述第一边界坐标点所在的列号且/或为上述第二边界坐标点所在的列号的情况下,若该第一列号对应的网格行中的临近两行之间的任意网格的中心坐标点不位于空间区域内,则将第一列号对应的网格行中的临近两行的行号排除在上述边界网格范围字典中的键对应的值之外;可选的,是否将该第一列号确定为边界网格范围字典中的键,还需视第一列号对应的网格行的不同情况而定,若第一列号对应的网格行中除了上述临近两行之外,还存在其他行的网格中心坐标点位于空间区域内,则将该第一列号确定为边界网格范围字典中的键,反之则将第一列号排除在边界网格范围字典中的键之外。上述生成边界网格范围字典的方法所得到的边界网格范围字典,其键值包含的是经过祛冗余后的行号和列号的集合,可以使空间区域网格化得到的网格结果更为精准,从而使网格索引所指向的数据作为最后的查询结果更为精准;且该边界网格范围字典可用于加速网格和空间区域的拓扑关系判断,大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0330]
在一种可能的实施方式中,在根据所述边界网格范围字典对所述空间区域的非边界部分填充,得到所述内部网格方面,所述处理器802具体用于:
[0331]
计算得到外包网格,所述外包网格包含所述空间区域所在的网格;
[0332]
根据所述外包网格和所述边界网格,构建候选网格填充树,其中,所述候选网格填充树为四叉树结构,所述候选网格填充树的树顶为所述外包网格,所述候选网格填充树的叶子节点为所述边界网格;
[0333]
对所述候选网格填充树缺失的叶子节点和中间节点填充,得到候选内部网格,所述候选内部网格为所述候选网格填充树缺失的叶子节点和中间节点;
[0334]
根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格。
[0335]
在本技术实施例中,利用边界网格范围字典对空间区域的非边界部分进行网格填
充操作,可得到上述内部网格,该内部网格为包含于空间区域内部的多尺度网格,即该内部网格的编码层级包括至少两种不同的编码层级。具体的,首先计算得到完全包含上述空间区域的外包网格,该外包网格在满足完全包含上述空间区域的前提下,可以是尺度尽可能小的网格,以此外包网格为起始剖分的区域,可以使剖分次数更少,计算效率更高;然后利用外包网格和边界网格构建候选网格填充树,将外包网格作为候选网格填充树的树顶,将边界网格作为候选网格填充树的叶子节点;接着对候选网格填充树中缺失的叶子节点和中间节点填充,可得到候选内部网格,该候选内部网格为上述候选网格填充树中填充的叶子节点和中间节点;最后利用边界网格范围字典筛选候选内部网格,得到上述内部网格。上述通过对空间区域的非边界部分填充得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准;且相对于基于四叉树网格索引自顶而下的逐级递归四分空间区域的常规网格化方法,本方法大幅降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0336]
在一种可能的实施方式中,在根据所述边界网格范围字典筛选所述候选内部网格,得到所述内部网格方面,所述处理器802具体用于:
[0337]
若所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值,将所述候选内部网格确定为所述内部网格。
[0338]
在本技术实施例中,对空间区域的非边界部分填充,最先得到的只是候选内部网格,还需利用边界网格范围字典对候选内部网格进一步筛选,得到上述内部网格。本技术实施例提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和列号均包含于边界网格范围字典中的键值,则将该候选内部网格确定为内部网格。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0339]
在一种可能的实施方式中,在所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值方面,所述处理器802具体用于:
[0340]
在所述边界网格范围字典中的键为所述候选内部网格的行号的情况下,若所述候选内部网格的列号大于列号区间的最小列号且小于所述列号区间的最大列号,确定所述候选内部网格的行号和列号包含于所述边界网格范围字典中的键值;所述列号区间为所述边界网格范围字典中的键对应的值。
[0341]
在本技术实施例中,对于候选内部网格的行号和列号是否包含于边界网格范围字典中的键值,提供了一种确定方式。以候选内部网格的行号为键,在边界网格范围字典中找到该键对应的值,也就是该键对应的列号区间;如果候选内部网格的列号大于该列号区间的最小列号且小于该列号区间的最大列号,则确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。可选的,如果边界网格范围字典中以候选内部网格的行号为键所对应的列号区间有多个,则对多个列号区间依次按照上述判断方式来确定候选内部网格的行列号归属,只要候选内部网格的列号属于任意一个列号区间,则可确定候选内部网格的行号和列号包含于边界网格范围字典中的键值。
[0342]
在一种可能的实施方式中,所述处理器802具体还用于:
[0343]
若所述候选内部网格的行号和/或列号不包含于所述边界网格范围字典中的键值,不将所述候选内部网格确定为所述内部网格。
[0344]
在本技术实施例中,提供了利用边界网格范围字典对候选内部网格筛选的方法,具体为根据上述候选内部网格的行号和列号判断候选内部网格是否包含于边界网格范围字典中的键值,若候选内部网格的行号和/或列号不包含于边界网格范围字典中的键值,则将该候选内部网格排除在内部网格的集合之外。上述筛选候选内部网格得到内部网格的方法,可以使空间区域网格化得到的内部网格的结果更为精准,从而使内部网格的索引所指向的数据作为最后的查询结果也更为精准,并且降低了算法复杂度,消除了冗余计算,提高了计算效率。
[0345]
在一种可能的实施方式中,在将所述边界网格的索引所指向的数据和所述内部网格的索引所指向的数据作为查询结果方面,所述处理器802具体用于:
[0346]
将所述边界网格和所述内部网格转换为目标网格,所述目标网格的编码层级为所述候选网格填充树的最高索引层级;
[0347]
对所述目标网格的索引排序,得到索引区间,所述索引区间包含了所述目标网格的索引;
[0348]
将所述索引区间所指向的数据作为所述查询结果。
[0349]
在本技术实施例中,将边界网格的索引所指向的数据以及内部网格的索引所指向的数据作为最后的查询结果。首先将边界网格和内部网格中的所有网格转换为目标网格,具体的,对于本身为最高索引层级的边界网格和内部网格不做转换处理,对于低于最高索引层级的边界网格和内部网格,可将其表示为该网格包含的索引层级对应的最小与最大编码子网格区间段,因为本实施例是基于四叉树网格索引进行的网格化,所以转换得到的目标网格的编码层级为候选网格填充树的最高索引层级;目标网格的索引可以形成索引区间段,对目标网格按网格索引排序,若两相邻目标网格的索引连续,则可将它们合并为一个新的索引区间,依次类推,最终得到的索引区间包含了上述所有目标网格的索引;最后根据该索引区间将其所指向的数据作为最后的查询结果。上述构建索引区间的方法,可以提高时空数据的查询速度,也可以使查询结果的精准度大大提高。
[0350]
在一种可能的实施方式中,所述边界网格范围字典中的数据以哈希表数据结构存储。
[0351]
本技术实施例中,边界网格范围字典中的数据以哈希表数据结构存储,哈希表是根据关键码值而直接进行访问的数据结构,即通过把关键码值映射到表中的具体位置来访问记录;应用于边界网格范围字典可以加快数据的查询速度以及表中数据的增删速度,有利于加速网格与空间区域拓扑关系的判断,提高计算效率。
[0352]
需要说明的是,服务器80的具体实现还可以对应参照图3、图4a、图5a以及图6a所示的方法实施例的相应描述。
[0353]
在图8所描述的服务器80,通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
[0354]
本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当所述计算机程序在一个或多个处理器上运行时,可以实现图3、图4a、图5a
以及图6a所示的时空数据查询方法。
[0355]
本技术实施例还提供一种计算机程序产品,当所述计算机程序产品在处理器上运行时,可以实现图3、图4a、图5a以及图6a所示的时空数据查询方法。
[0356]
综上所述,通过改进空间区域的剖分策略及网格拓扑关系的判断方法,解决了算法复杂度高、计算效率低的问题,且对空间区域的边界和内部包含的时空数据查询进行区分,提高了查询结果的精准度,可以有效满足对空间区域精准查询的需求。
[0357]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序相关的硬件完成,该计算机程序可存储于计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:只读存储器rom或随机存储记忆体ram、磁碟或者光盘等各种可存储计算机程序代码的介质。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献