一种适用于多核CPU的矢量数据并行绘制方法和装置
技术领域
本发明涉及地理信息系统矢量数据的绘制显示技术领域。具体地说,本发明涉及一种利用矢量图层数和CPU核数之间的关系建立多线程池模型,并行获取、绘制矢量数据的方法和系统。
背景技术
社会经济的快速发展,矢量数据在社会各个领域得到广泛的应用。不同部门、不同行业根据自身的需求,生产不同比例尺、不同时态、不同数据结构的矢量数据,可以划分为基础地理、土地利用、环境等方面的数据,这造成矢量数据的异构、数据量之大的特性。
快速地在计算机终端显示器上绘制显示矢量数据,一直是各种地理信息系统(Geographical Information System,GIS)软件以及制图软件需要解决的问题。如何能够快速高效访问海量的数据并能够快速绘制显示一直是GIS软件关心的问题,这也是具有挑战性的问题。
矢量数据能够在计算机终端快速绘制显示,必然要能够快速的访问数据实体,因此要对海量的矢量数据,设计高效的数据管理方法,建立有效的海量数据的空间索引机制。目前矢量数据的存储方法提出了对象数据模型、矢量数据拓扑模型,在空间索引方面提出了网格索引、四叉树索引、R树以及R+等。
随着计算机技术革新,特别是在计算机CPU的发展方面,出现了多核处理器的体系结构,多核处理器技术在应用上的优势有两个方面:为用户带来更强大的计算性能;更重要的是可满足用户同时进行多任务处理和多任务计算环境的要求。因此在进行海量矢量数据的绘制显示时,能够利用多核CPU的优势进行并行绘制处理。
但是,目前大多数的矢量数据绘制方法仍然采用的是传统的串行处理方式,依靠单核CPU单线程模式循环遍历每个矢量图层以及矢量图层的每个要素,对于每绘制一遍海量的矢量数据,需要用户等待,效率极低。在早期的单核CPU计算机硬件水平下,这用绘制方式是可行的,随着计算硬件水平的发展,双核、四核、八核甚至更多核CPU的计算机出现,这种串行矢量数据的绘制方式,已经不是最优的绘制方式,它不能提高矢量数据的绘制效率,不能有效的利用多核CPU计算机硬件优势。
发明内容
因此,根据本发明的优选实施方式,本发明解决了现有技术中不能有效利用多核CPU计算机硬件优势,提高矢量数据的绘制效率的技术问题。
根据本发明的一个方面,本发明提供了一种适用于多核CPU的矢量数据并行绘制方法,其特征在于,所述方法包括以下步骤:
并行获取矢量数据步骤:根据计算机终端的CPU的核数和矢量图层数,建立多线程模型体系,所述多线程模型各自独立,并行处理每个矢量图层,每个多线程模型根据计算机终端的屏幕范围获取矢量图层空间索引块,通过所述空间索引块来获取索引块内的矢量要素实体集;
并行符号化绘制步骤:对获取的所述矢量要素实体集进行矢量图层并行绘制,每个矢量图层生成内存位图并放入内存位图池;
终端屏幕显示步骤:对每个矢量图层生成的内存位图,按照矢量图层叠加的先后顺序依次显示到计算机终端的屏幕。
优选的,所述方法进一步包括以下步骤:
矢量数据存储步骤:将不同数据格式、不同来源的异构矢量数据,按照不同领域的分层方式进行分层,形成矢量图层,在数据库中建立与矢量图层对应的空间索引表,进行矢量数据入库;
空间索引处理步骤:对矢量数据进行空间网格索引化,形成矢量图层的空间网格索引块。
优选的,建立网格索引的规则是采用四叉树。
优选的,每个多线程模型均对应IO和DC两个线程,所述IO线程用于获取本地或者远程数据,所述DC线程用于绘制所述IO线程获取的矢量数据。
优选的,所述IO线程和DC线程保持并行同步。
根据本发明的一个方面,本发明还提供了一种适用于多核CPU的矢量数据并行绘制装置,其特征在于,所述装置包括以下模块:
并行获取矢量数据模块:用于根据计算机终端的CPU的核数和矢量图层数,建立多线程模型体系,所述多线程模型各自独立,并行处理每个矢量图层,每个多线程模型根据计算机终端的屏幕范围获取矢量图层空间索引块,通过所述空间索引块来获取索引块内的矢量要素实体集;
并行符号化绘制模块:用于对获取的要素实体集进行矢量图层并行绘制,每个矢量图层生成内存位图并放入内存位图池;
终端屏幕显示模块:用于对每个矢量图层生成的内存位图,按照矢量图层叠加的先后顺序依次显示到计算机终端的屏幕。
优选的,所述装置进一步包括以下模块:
矢量数据存储模块:用于将不同数据格式、不同来源的异构矢量数据,按照不同领域的分层方式进行分层,形成矢量图层,在数据库中建立与矢量图层对应的空间索引表,进行矢量数据入库;
空间索引处理模块:用于对矢量数据进行空间网格索引化,形成矢量图层的空间网格索引块。
优选的,建立网格索引的规则是采用四叉树。
优选的,每个多线程模型均对应IO和DC两个线程,所述IO线程用于获取本地或者远程数据,所述DC线程用于绘制所述IO线程获取的矢量数据。
优选的,所述IO线程和DC线程保持并行同步。
本发明利用多核CPU建立多核线程模型,多核线程并行地获取和绘制矢量数据,充分利用计算机硬件水平,使海量的矢量数据绘制效率最大化。每个矢量图层创建一个内存设备,并在其上进行绘制数据,绘制过程中可实时更新屏幕,整个矢量图层绘制完毕后生成内存位图并放入内存位图池中,在下次绘制时可以直接从内存位图池中取出对应的位图进行显示。本发明所提出的所述方法和装置将会在地理信息系统的软件中提高矢量数据的绘图效率,提高数据生产单位的制图效率。本发明所提出的所述方法和装置最终将会在地理系统及相关行业的软件使用和推广,将会产生良好的社会经济效益。
附图说明
下面结合附图详细说明本发明的特征和优点,在附图中:
图1图示了根据本发明的优选实施方式的适用于多核CPU矢量数据并行绘制方法的流程图。
图2图示了根据本发明的优选实施方式的矢量数据空间索引化采用四叉数逆时针编码方式。
图3图示了根据本发明的优选实施方式的矢量数据空间索引化处理流程图。
图4图示了根据本发明的优选实施方式的矢量数据并行获取数据、并行绘制模型。
图5图示了根据本发明的优选实施方式的由IO线程获取数据的操作流程图。
图6图示了根据本发明的优选实施方式的由DC线程绘制数据的操作流程图。
具体实施方式
下面,参照附图更全面地描述本发明、示出本发明的各方面的优选实施方式。为了更好地突出本发明的实质性特点,在以下的描述中将省略对公知常识的描述。
实现海量矢量数据并行绘制方法,前期要大量的准备工作,例如矢量数据的分层设计、空间索引策略、本地缓存策略。下面根据实例和附图对本发明作进一步详细说明:
为了能够适用不同领域的矢量数据存储管理,本发明采用Oracle关系型数据库存储数据,矢量图层可按照基本的点、线、面、文本方式存储。
矢量数据图层属性结构表中包括:ID字段以及其他辅助信息字段。矢量数据存储管理中,设计一个矢量图层对应一个空间索引表以实现空间索引管理。
图1列出了海量矢量数据快速绘制的流程,下面分别按照步骤详细说明:
步骤S101:将不同数据格式、不同来源的异构矢量数据,按照不同领域的分层方式进行分层,建立矢量数据存储体系。每个矢量图层必须包含基本的ID序号字段、几何图形等基本字段信息,其中几何图形字段存储矢量要素的几何实体形状。在Oracle数据库中建立与矢量图层对应的空间索引表,进行矢量数据入库。
步骤S102:矢量数据入完库后,对矢量数据进行相应的空间网格索引化。
下面结合图2和图3进行详细说明。建立网格索引的规则是采用四叉树,如图2所示,将矢量图层在空间范围四等分块。限定每个子区域分块内要素实体个数小于某个阈值(如:2000),如果子区域分块内的要素实体个数大于阈值,则继续递归四等分该子区域,直到所有的区域都小于阈值。最后形成矢量图层的空间网格索引块,将网格索引块序号和索引块内的矢量要素实体ID集存储到空间索引表中。空间网格索引编码:以左下角为起始位置逆时针编号1、2、3、4,自顶向下,每层编码后就是对应的空间网格索引码。
矢量数据图层空间网格索引流程所图3所示。流程开始后,首先将矢量数据空间区域进行四等分,然后判断每个子区域分块内要素实体个数是否大于子区域实体数阈值,如果大于,则继续递归四等分该子区域,否则,就将子区域记录到空间索引表,最后结束整个流程。
步骤S103:根据计算机终端的CPU的核数和矢量图层数,建立多线程模型体系,模型图如图4。在图4中,每绘制一个矢量图层则调用空闲的CPU核创建一个多线程模型。每个多线程模型均对应IO(Input/Output输入输出)和DC(Device Content设备上下文,用于绘图)两个线程,IO线程负责获取本地或远程矢量数据,DC线程负责绘制IO获取的矢量数据,IO线程和DC线程通过信号通信,保持并行同步,绘制完矢量图层后则顺序的显示在计算机终端屏幕上。图4中多线程模型是各自独立的,并行处理每个矢量图层。每个多线程模型根据计算机终端的屏幕范围获取矢量图层空间索引块,通过空间索引块获取、绘制索引块内的矢量数据实体集。
下面根据图2对如何根据计算机终端的屏幕范围获取矢量图层空间索引块进行进一步的说明。在图2中,假定外框是矢量图层空间范围,由空间索引块1、21、22、23、24、3、41、421、422、423、424、43、44组成,虚线框是由计算机终端的屏幕范围计算出来的地理空间范围,其覆盖了41、423、424、43、44空间索引块。
步骤S104:根据步骤S103获取的要素实体集进行矢量图层并行绘制,每个图层生成内存位图并放入内存位图池,图5是获取数据流程,图6是绘制数据流程,分别由IO线程和DC线程两个线程模型完成。
在计算机终端开辟矢量数据存储的缓存区域(如:10000个存储单位),该缓存循环利用,IO线程和DC线程同时工作,通过信号通信。IO线程读取数据顺序放入缓存中,DC线程顺序从缓存中取出数据进行绘制。
在图5中,lPutIndex是线程IO存入数据的计数器,lGetIndex是取出数据的计数器,lBuffersize是缓存区域大小,hIOAccess是获取数据信号,bGetFeature是IO线程获取矢量数据标志,初始状态True。当满足(lPutIndex-lGetIndex)>lBuffersize条件时,IO线程等待hIOAccess为可用信号后获取数据,不满足时IO直接获取数据,直到获取完该矢量图层数据。IO线程获取完矢量图层数据后bGetFeature置为False。IO线程每放入一条数据到缓存中,lPutIndex计数加1,并设置hDCAccess为可用状态。
在图6中,hDCAccess是绘制数据信号,当满足lGetIndex>=lPutIndex条件时,DC线程等待hDCAccess信号为可用信号后,从缓存中取出数据进行绘制,不满足时直接从缓存中取出数据进行绘制,DC线程每取出一条数据后,lGetIndex计数加1,并设置hIOAccess为可用状态。DC线程循环检测bGetFeature,当为False时,停止从缓存中取出数据绘图,并生成内存位图,否则继续循环从缓存中取出数据进行绘制。
步骤S105:对每个矢量图层生成的内存位图,按照矢量图层叠加的先后顺序依次显示到计算机屏幕。
本发明利用多核CPU建立多核线程池模型,多核线程并行地获取和绘制矢量数据,充分利用计算机硬件水平,使海量的矢量数据绘制效率最大化。每个矢量图层创建一个内存设备,并在其上进行绘制数据,绘制过程中可实时更新屏幕,整个矢量图层绘制完毕后生成内存位图并放入内存位图池中,在下次绘制时可以直接从内存位图池中取出对应的位图进行显示。本发明所提出的所述方法和装置将会在地理信息系统的软件中提高矢量数据的绘图效率,提高数据生产单位的制图效率。本发明所提出的所述方法和装置最终将会在地理系统及相关行业的软件使用和推广,将会产生良好的社会经济效益。
以上内容仅为本发明的较佳实施例,对于本领域的普通技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,本说明书内容不应理解为对本发明的限制。