一种矢量瓦片预处理方法及装置与流程

文档序号:17950711发布日期:2019-06-19 00:00阅读:226来源:国知局
一种矢量瓦片预处理方法及装置与流程

本发明属于地理信息技术领域,尤其涉及一种矢量瓦片预处理方法及装置。



背景技术:

矢量切片是对矢量数据按照金字塔的方式进行切割,一层层的生产出某行某列的矢量数据存进瓦片。矢量瓦片的数据以protobuf格式存储,最终生产完成后会存储在介质中。

目前,在浏览器端,矢量瓦片在逐渐成为互联网地图的主流技术。矢量瓦片体积小,可高度压缩,占用的存储空间比栅格瓦片要小很多。矢量瓦片的出现,一方面减少网络带宽消耗,另一方面使地图渲染与矢量瓦片存储分离,支持在客户端或者服务器端渲染,使地图定制化成为可能。

对于大范围的矢量数据,由于类型众多,范围广泛,往往数据量极大,而矢量切片的需求通常需要切多级,如果对原始数据不进行预处理,直接将数据读取到内存进行切片,那么在每一层级进行矢量切片的时候,都需要遍历一遍原始数据,整个过程将耗费大量的时间,从而导致矢量瓦片生产的效率低下。



技术实现要素:

鉴于上述问题,本发明的目的在于提供一种矢量瓦片预处理方法及装置,旨在解决现有矢量瓦片生成中,每一层级需要遍历所有原始数据,生产效率低下的技术问题。

一方面,所述矢量瓦片预处理方法包括下述步骤:

步骤s1、读取原始数据并存入输入数据池中;

步骤s2、从输入数据池中按批读取原始数据,对每批原始数据中的每个几何对象进行简化和正确性修复处理,得到处理后的数据包并存入输出数据池中;

步骤s3、不断地从输出数据池中读取一个个数据包,按照级层分类,将所有数据包中同一级层的数据写到对应的临时文件中,最终得到多个层级的临时文件。

另一方面,所述矢量瓦片预处理装置包括:

数据输入模块,用于读取原始数据并存入输入数据池中;

数据处理模块,从输入数据池中按批读取原始数据,对每批原始数据中的每个几何对象进行简化和正确性修复处理,得到处理后的数据包并存入输出数据池中;

输出输出模块,用于不断地从输出数据池中读取一个个数据包,按照级层分类,将所有数据包中同一级层的数据写到对应的临时文件中,最终得到多个层级的临时文件。

本发明的有益效果是:本发明设计了一种矢量瓦片预处理方案,在矢量切片之前单独对矢量原始数据进行预处理,改变矢量瓦片的生产流程,对原始数据进行加载的时候进行预处理,使得在切多级瓦片的时候,只需要读取一次数据,在这一次数据读取的过程中,将数据在不同层级分辨率下的简化和正确性修复工作一次性做完,这样通过一次对原始数据遍历的过程,就把所有数据处理完毕,从而缩短数据读取和数据处理(数据简化和正确性修复)过程所需的时间,大大提升矢量瓦片的生产效率。

附图说明

图1是本发明第一实施例提供的矢量瓦片预处理方法的流程图;

图2是数据处理的工作流程示意图;

图3是面数据修复示意图;

图4是数据处理完成后生成数据包的数据结构示意图;

图5是本发明第二实施例提供的矢量瓦片预处理装置的结构方框图。

具体实施方式

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

本发明旨在设计一种预处理方案,在矢量切片之前单独对矢量数据进行预处理,改变矢量瓦片的生产流程,从而减少对原始数据的访问次数,缩短数据简化及后续正确性修复工作所需要的时间,提高矢量瓦片的生产效率。为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。

实施例一:

图1示出了本发明实施例提供的矢量瓦片预处理方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。

本实施例提供的矢量瓦片预处理方法包括下述步骤:

步骤s1、读取原始数据并存入输入数据池中。

本实施例定义两个数据池,一个是输入数据池,用于存放读取的矢量数据;一个是输出数据池,用于存放处理完毕的矢量数据。两个数据池都是定义在内存中的,具有一定的数据容量。

在读取原始数据过程中,当输入数据池里的数据量没有达到上限时,则继续读取原始数据并存入输入数据池;当数据输入池里的数据已满,则停止读取原始数据,进行等待。

步骤s2、从输入数据池中按批读取原始数据,对每批原始数据中的每个几何对象进行简化和正确性修复处理,得到处理后的数据包并存入输出数据池中。

矢量切片的需求往往需要切多级瓦片,因此如果对原始数据不进行处理,在切每一级的时候都对数据进行读取、简化,再对正确性遭到破坏的数据进行修复,则是一个非常耗时的过程。矢量切片因其原始数据体积较大,设计初衷并没有为网络传输优化,因此需要重新组织数据结构。重新组织数据结构的中心思想就是不损失原数据细节的情况下,尽量减小冗余,缩小数据体积。在组织数据结构的过程中,会涉及对空间坐标数据做简化。根据不同的缩放级别和细节,适当调节简化的程度,从而使得原始数据在当前尺度下具有最为合适的显示效果。

本步骤中,数据处理包含两个部分的内容:数据简化以及数据的正确性修复。对数据处理这一过程,采取并行策略,使得数据处理更为高效。具体的,不断地向输入数据池中取原始数据,并行地对取得的数据进行处理,当从数据输入池中取得一批原始数据时,对所取原始数据中的每一个几何对象(即每一条原始数据)进行并发处理,处理过程按照从高到低的级层,一级一级地进行简化和数据正确性修复工作,处理完毕后,存进输出数据池里。当输出数据池里的数据没有达到上限时,则继续进行简化和正确性修复处理;当输出数据池的数据已满时,则停止数据处理,进行等待。

假设对原始数据进行3-9级的切片,则数据处理的工作示意流程如图2所示。图示中,从输入数据池中读取一批原始数据,一条原始数据即一个几何对象,假设读取了n个几何对象,分别为object_1至object_n,n个几个对象并行处理,从9级开始向低级一级一级进行简化和正确性修复,由于在矢量切片中,高层级的要显示的对象要更精细,更复杂,分辨率相对也比较高;随着层级越低,要显示的几何对象也会越粗糙、越简单,分辨率也越低。因此,在数据简化以及正确性重构次序应该是从高层级到低层级,底层级的数据由比它高一层级的数据中简化重构得来。每个几何对象处理后,都会生成一个数据包存入输出数据池中,每一个数据包中,包含切片所需的各个级层的数据。

下面对本步骤所述的简化和正确性修复进一步详细说明。

对每一条数据,即每一个几何对象,需要在所有层级的分辨率下对其空间坐标做简化处理,即在所有层级下将实际空间坐标变换为当前层级分辨率下的像素坐标,浮点型的空间坐标值变换成为整型的像素坐标值。对于每一个几何对象,在作简化之后,可能会破坏原始数据的正确性,在某一层级的分辨率下:点数据进行简化后则可能产生重复点;线数据简化后有些线段的长度可能变为0;面数据简化后则面的有效性可能遭到破坏。因此,相比原始数据,对于正确性遭到破坏的数据,需要进行正确性修复。

对于在实际空间中坐标比较接近的两个点,在某一层级分辨下,变换为整型像素坐标点,就可能重叠在一起,对于重叠的像素坐标点,采用先到先得的策略,如果某一像素坐标点已经存在,则下一个与之重合的像素坐标点舍去;

由点构成的线数据也有可能因为坐标简化,起点和终点只剩一个点数据,变为无效线段,由线构成的面数据的有效性也有可能发生变化。因此对于此种情况,就需要对数据的正确性进行重构。具体的,由像素坐标点构成的线段也有可能因为坐标简化,起点和终点只剩一个点数据,变为无效线段,将长度等于0的无效线段剔除。由线段构成的面的有效性也有可能发生变化,在构成面的线段数据集中,按照奇偶法则,对于出现次数为奇数次的线段进行保留,出现偶数次的线段剔除,最后对剩余的线段进行重新构面。下面举例说明面数据的修复过程:

如图3所示,图3(a)所示的面数据存在4个面,经空间坐标简化后,point1与point2处于同一像坐标素点,只保留下了一个点,因此简化后line1和line2重合。所以由line1、line2以及point1与point2连线构成的面数据,由于line出现两次,则该面被剔除,其余三个面中,每条线段都只出现一次,故保留,如图3(b)所示。

所有数据处理完毕后,对于每一个几何对象,都会生成一个数据包存入输出数据池中,每一个数据包中,包含切片所需的各个级层的数据,一个几何对象数据包的数据结构如图4所示。

步骤s3、不断地从输出数据池中读取一个个数据包,按照级层分类,将所有数据包中同一级层的数据写到对应的临时文件中,最终得到多个层级的临时文件。

因此从整体过程来看,输入的是待切的原始矢量数据,输出的是多个级层的临时数据文件,通过一次对原始矢量数据遍历的代价,将所有数据在每一级层的分辨率下都处理一遍,一次性将切片所需要的数据准备好。所以当切片时,不需再对数据做特殊处理,只需要读取相应层级的临时文件中的数据,进行切片,切片结束之后再对临时文件进行删除即可,从而减少对原始数据的访问次数,缩短数据简化及后续正确性修复工作所需要的时间,提高矢量瓦片的生产效率。

实施例二:

图5示出了本发明实施例提供的矢量瓦片预处理装置的结构,为了便于说明仅示出了与本发明实施例相关的部分。

本实施例提供的矢量瓦片预处理装置包括:

数据输入模块1,用于读取原始数据并存入输入数据池中;

数据处理模块2,从输入数据池中按批读取原始数据,对每批原始数据中的每个几何对象进行简化和正确性修复处理,得到处理后的数据包并存入输出数据池中;

输出输出模块3,用于不断地从输出数据池中读取一个个数据包,按照级层分类,将所有数据包中同一级层的数据写到对应的临时文件中,最终得到多个层级的临时文件。

本实施例提供的各个功能模块1-3对应实现了实施例一中的步骤s1-s3。具体的,通过数据输入模块1完成读取原始数据并存入数据输池,通过数据处理模块2按批读取,并进行简化和正确性修复处理,最后通过输出输出模块处理输出多个层级的临时文件。

其中所述输入模块中,如果输入数据池里的数据量没有达到上限,则继续读取原始数据并存入输入数据池;当数据输入池里的数据量已满,则停止读取原始数据,进行等待。

作为一种优选方式,所述数据处理模块用于不断地向输入数据池中读取原始数据,每取得一批原始数据时,对所取每批原始数据中的每个几何对象进行并发简化和正确性修复处理,处理过程按照从高到低的级层,一级一级进行,每个几何对象处理后,都会生成一个数据包存入输出数据池中,每一个数据包中,包含切片所需的各个级层的数据。

所述数据处理模块包括:

简化处理单元,用于对每个几何对象在所有层级的分辨率下对其空间坐标做简化处理,即在所有层级下将实际空间坐标变换为当前层级分辨率下的像素坐标,浮点型的空间坐标值变换成为整型的像素坐标值。

所述数据处理模块还包括:

正确性修复单元,用于对每个几何对象简化后还要进行正确性修复处理;具体包括:

点修复组件,用于对于在实际空间中坐标比较接近的两个点,在某一层级分辨下,变换为整型像素坐标点,就可能重叠在一起,对于重叠的像素坐标点,采用先到先得的策略,如果某一像素坐标点已经存在,则下一个与之重合的像素坐标点舍去;

线修复组件,用于对由像素坐标点构成的线段因为坐标简化,起点和终点只剩一个点数据,变为无效线段,将长度等于0的无效线段剔除;

面修复组件,用于在构成面的线段数据集中,按照奇偶法则,对于出现次数为奇数次的线段进行保留,出现偶数次的线段剔除,最后对剩余的线段进行重新构面。

综上,本发明在矢量瓦片的生产过程中,通过设置预处理流程,将对原始矢量数据的简化及正确性修复放到预处理中进行,整个矢量瓦片成产流程就包含两部分:预处理和切片,通过对原始数据的高效预处理,提高矢量切片的效率。另外,预处理是一次输入,多个输出的过程。输入为原始数据,输出为多个临时文件,所有对数据的预处理都是在内存中进行的。通过一次对原始数据的遍历,一次性将切片各个层级所需要的数据准备好。最后,在预处理过程中,多个对象在处理进程中是并发的,低层级的数据从它高一级的数据处理得来,因此在对低层级的数据做处理时,就不用每次从原始数据这一比较复杂的数据层面做计算。从而提高预处理的效率,缩短矢量瓦片的生产时间。

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

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