一种高效自适应三维地名瓦片生产方法及装置与流程

文档序号:12465468阅读:291来源:国知局
一种高效自适应三维地名瓦片生产方法及装置与流程

本发明属于地理信息系统GIS技术领域,尤其涉及一种高效自适应三维地名瓦片生产方法及装置。



背景技术:

互联网技术的高速发展催生了GIS行业的瓦片地图技术,它解决了终端用户显示矢量数据的低效率问题,大大的提升了用户体验。瓦片技术非常适合各种互联网应用与GIS行业的大数据做交互,例如桌面端、手机端等终端,目前的瓦片技术不仅仅可以提供底图(栅格图像)给终端用户展示,甚至地名数据也可以使用瓦片技术来给终端用户做展示和查询。

吉奥三维地名瓦片服务(WTFS服务),是一种可以将GeoGlobe的三维地名数据集发布为瓦片服务的一种服务。这种服务传输给终端的数据并不是栅格瓦片,而是按照栅格瓦片地理位置组织的地名数据,也就是矢量数据。

瓦片技术在各种终端应用上比传统矢量快的数据本质是用更多的空间来换取了查询时间,也就是计算机最常用的空间换时间的方式。一个省的原始矢量或许只有1G,使用瓦片技术瓦片化之后它的存储量可能会成倍的增长,有时候如果需要高精度的数据,那么数据量可能成几何倍增长都可能,所以数据生产的成本是非常高的。

传统的三维地名数据集瓦片生产的方式为循环每层级范围,一批一批的瓦片去生产,将地名数据组织为瓦片数据。即按照每张瓦片大小256*256像素的地理矩形范围查询矢量地名数据,然后将查询出的结果(此范围的地名信息)保存为一张瓦片。

具体的,如图1所示的一张地名数据分布,如果按照现有瓦片生产方式生产地名数据,即按照每张瓦片大小256*256像素的地理矩形范围查询矢量地名数据,然后将查询出的结果(此范围的地名信息)保存为一张瓦片,最后入库成为瓦片数据,假设图1中某层的数据有n×n张瓦片范围地名数据,查询n×n次后,可以将所有数据三维地名数据瓦片生产成功。这种瓦片生产方式效率极为低下,效率测试,以下表1示出了各种数据库的地名瓦片生产效率:

表1

Oracle数据库、Mongo数据库和Sqlite数据库是目前市面上典型的数据库。现有技术的瓦片生产方法是对每层瓦片范围做瓦片数次数的数据库查询,这个查询速度对于1-18级别的数据,将是一个非常大的查询次数,对于矢量的地名数据来说这将是一个非常恐怖的耗时,按照全国范围18级别的瓦片数去生产将是亿级别以上的查询,这对于GIS空间数据库来说无疑是耗时巨大。



技术实现要素:

鉴于上述问题,本发明的目的在于提供一种高效自适应三维地名瓦片生产方法及装置,旨在解决现有三维地名数据集瓦片生产的效率低下的技术问题,通过减少瓦片地名生产的查询耗时来减少瓦片生产总时间,达到提高整体瓦片生产效率,提升瓦片化的更新速度,简化生产流程。

一方面,所述高效自适应三维地名瓦片生产方法包括下述步骤:

针对每层的三维地名瓦片生产,计算当前层的地名瓦片生产的总瓦片数C;

计算当前层的每次查询范围窗口,该窗口为正方形窗口,其边长其中D为矢量地名点数,P为数据库的批量提交量最优数,k为调节系数,|*|表示取整;

根据所述查询范围窗口大小,按照一定顺序移动窗口,使得窗口遍历当前层所有的地名瓦片,在遍历过程中,对每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。

另一方面,所述高效自适应三维地名瓦片生产装置,包括:

总瓦片计算单元,用于针对每层的三维地名瓦片生产,计算当前层的地名瓦片生产的总瓦片数C;

窗口获取单元,用于计算当前层的每次查询范围窗口,该窗口为正方形窗口,其边长其中D为矢量地名点数,P为数据库的批量提交量最优数,k为调节系数,|*|表示取整;

窗口遍历生产单元,用于根据所述查询范围窗口大小,按照一定顺序移动窗口,使得窗口遍历当前层所有的地名瓦片,在遍历过程中,对每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。

本发明的有益效果是:本发明方案动态结合数据库提交数据能力和实际地名数据量进行瓦片化生产,通过设计一个合理大小的查询范围窗口,最大限度利用数据库性能的情况下,保证了地名瓦片数据生产的效率,本质上减少了数据查询交互时间,提升地名命中瓦片效率,综合复杂度为N。经实验验证,Oracle数据库约有100倍提升,mongodb和Sql i te数据约有1000倍提升,地名瓦片生产效率大幅提高。

附图说明

图1是地名瓦片示意图;

图2是19×12未分割的地名瓦片示意图;

图3是高效自适应三维地名瓦片生产方法的流程;

图4是一层地名瓦片的分割示意图;

图5是N=14时地名瓦片的分割示意图;

图6是高效自适应三维地名瓦片生产装置的结构方框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

现有技术中,矢量数据查询还是一大难题,查询速度都很慢。数据库是存储数据的载体,目前市面上主流数据库都支持批量提交数据,假如查询的数据是批量查询,提交的数据也是批量提交的,那么就能最大限度的利用数据库性能。假如有如图2所示数据,其中的点为地名点数据,网格为瓦片,一块网格和网格内的所有地名点数据组织为一张地名瓦片,如够按照现有的地名瓦片生产方式,那么图2中共有19x12=228张瓦片,因此需要对数据库做228次查询,然后将地名点和每张瓦片组织为地名瓦片数据,这样首先要做228查询,然后再做228次提交数据库操作。与数据库的交互次数就达到了456次。图2只是一层瓦片的示例图,真实环境下瓦片数据都是千万级别的,这样必然需要做千万级别的数据库操作,那么耗时是相当多的。

为了解决这个问题,本发明找到一种合适的分割方式将每层地名瓦片进行分割,通过降低查询次数,充分利用现有数据库的查询能力,最好是刚刚使用到查询能力的瓶颈,这样充分利用了数据库能力的情况下,保证的了地名瓦片数据生产的效率。本发明的目的就是减少瓦片地名生产的查询耗时来减少瓦片生产总时间,达到提高整体瓦片生产效率。

为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。

实施例一:

图3示出了本发明实施例提供的高效自适应三维地名瓦片生产方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。

如图3所示,本实施例方法包括下述步骤:

步骤S1、针对每层的三维地名瓦片生产,计算当前层的地名瓦片生产的总瓦片数C。

步骤S2、计算当前层的每次查询范围窗口,该窗口为正方形窗口,其边长其中D为矢量地名点数,P为数据库的批量提交量最优数,k为调节系数,|*|表示取整。

步骤S3、根据所述查询范围窗口大小,按照一定顺序移动窗口,使得窗口遍历当前层所有的地名瓦片,在遍历过程中,对每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。

假设所选用的数据库的批量提交量最优数为P,一般这个数是固定的数值,某一层的地名瓦片生产的总瓦片数C,矢量地名点数为D,对于其中某一层的瓦片生产,P、C、D这三个参数均有一个固定的值。对于不同层的瓦片,C、D可能不同,因此在生产每层地名瓦片时,首先要当前层地名瓦片的C和D两个参数的值。考虑到每次查询的生产瓦片数据按照这三个参数的一定比例去提交,例如每次查询N行N列窗口大小的瓦片地名数据,然后按照该窗口大小去生产瓦片,那么对于某一层级的地名瓦片生产,有如下关系:N为查询范围窗口的边长大小,以该窗口大小为单位对当前层瓦片进行分割。

地名瓦片生产的时候将会生产多层级的瓦片,由于每层瓦片中,参数C、D可能不同,因此每一层的查询范围窗口大小是一个变化的数据,可以自适应调整。

对于某一层级的瓦片数据,如果有以下范围的瓦片数据;nMinRow为最小行号,nMinCol为最小列号,nMaxRow为最大行号,nMaxCol为最大列号,那么当前层的地名瓦片生产的总瓦片数C=(nMaxCol-nMinCol)×(nMaxRow-nMinRow),因此可得查询范围窗口边长这里k为调节系数,为定值,可以对窗口大小根据实际情况进行微调,以达到最高的生产效率,正常情况下,k的取值范围是0.5-1.5,优选为1。经实际验证,一般情况下,计算得到查询范围窗口边长N≥30。

然后根据窗口大小按照一定顺序遍历当前层瓦片,如图4所示,图中的大方框为查询范围窗口,比如可以从左至右、从上至下的顺序移动窗口进行遍历,经过八次窗口移动,完成对当前层所有地名瓦片的遍历。在遍历过程中,对每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。

本发明方法综合考虑了查询的实际数据量、数据库的性能、程序的内存性能等方面指标。三维地名矢量数据数据量为动态生成,以当前层的三维地名点数据量、需要生产的瓦片总数量以及数据库单次提交瓦片量进行比例生产,保证减小查询次数,提高点与瓦片查询命中率,减少查询无效三维地名点的几率,进而达到提高生产效率。

现列举一列,假设P=195,D=200,C=19x12=228,计算得N=14。瓦片将按照如图5所示窗口做两次查询,查询范围窗口的大小应为14行14列,经过两次查询后,然后提交两次,这与原有的数据库456次交互相比,相差约有100倍次数差距。

正常情况下,窗口内覆盖的瓦片为N行N列,若窗口遍历至到边界位置时,发现窗口内的瓦片行数或者列数小于N,则保持当前窗口覆盖并进行地名瓦片生产,此时窗口内的瓦片总数小于N的平方。

对于图4,右边界窗口内瓦片数量都小于N的平方。

对于图5,按照左窗口范围内瓦片先生产一次,最后生产剩余瓦片。具体的,左窗口内瓦片只有12行,小于N=14,就按照12行14列的范围进行瓦片生产,右窗口内瓦片不足14行也不足14列,因此该范围内瓦片将会一次生产完毕。因此基本上所有的边界数据基本上都会碰到这种情况,不能保证所有分割都是按照N行N列分割。

根据实验效率测试,效率测试和原有的测试对比如下表2所示,查询效率有很大提高。Oracle近100倍提升,mongodb和Sqlite约1000倍提升。

表2

实施例二:

图6示出了本发明实施例提供的高效自适应三维地名瓦片生产装置的结构,为了便于说明仅示出了与本发明实施例相关的部分

如图6所示,本实施例提供的高效自适应三维地名瓦片生产装置包括:

总瓦片计算单元61,用于针对每层的三维地名瓦片生产,计算当前层的地名瓦片生产的总瓦片数C;

窗口获取单元62,用于计算当前层的每次查询范围窗口,该窗口为正方形窗口,其边长其中D为矢量地名点数,P为数据库的批量提交量最优数,k为调节系数,|*|表示取整;

窗口遍历生产单元63,用于根据所述查询范围窗口大小,按照一定顺序移动窗口,使得窗口遍历当前层所有的地名瓦片,在遍历过程中,对每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。

本实施例提供的各个功能单元对应实现实施例一中的步骤S1-S3。具体实现时,针对每层的三维地名瓦片生产,总瓦片计算单元61计算出当前层的地名瓦片生产的总瓦片数C;然后窗口获取单元62根据公式计算得到查询范围窗口大小;最后窗口遍历生产单元63窗口大小遍历当前层的所有地名瓦片,对遍历过程中每次窗口所覆盖瓦片进行生产组织地名数据,然后继续下一层,直至所有层的地名瓦片生产完成。特别的,所述窗口遍历生产单元63在遍历过程中,正常情况下窗口内覆盖的瓦片为N行N列,若窗口移动到边界位置时,发现窗口内的瓦片行数或者列数小于N,则保持当前窗口覆盖并进行地名瓦片生产,此时窗口内的瓦片总数小于N的平方。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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