APP下载

国产平台上GIS矢量绘制的多线程改造

2017-04-14荔,郑

软件 2017年2期
关键词:角点瓦片交点

朱 荔,郑 昊

国产平台上GIS矢量绘制的多线程改造

朱 荔1,郑 昊2

(1. 中国电子科技集团第十五研究所,北京市 100083;2. 中国电子科技集团第十五研究所,北京市 100083)

为解决目前国产基础软硬件平台上GIS矢量地图绘制性能问题,本文尝试基于矢量瓦片技术,对MGIS的矢量绘制进行多线程改造,其中包括对矢量数据模型的瓦片化改造以支持并行计算。实验结果表明,本文提出的多线程改造技术能够大幅提升矢量地图可视化性能。

地理信息系统;矢量地图可视化;矢量瓦片;多线程

0 引言

描述人类活动的信息有60%左右与位置相关[1],在信息化的时代,国防、政府、企业和大众都离不开地理信息系统(Geographic Information System,缩写为GIS)[2]。

MGIS是一个专业面向国防领域的系列化地理信息系统平台,其基于商业化软硬件平台的版本目前已在国防领域得到了广泛的应用。为确保关键领域信息系统安全,提供支持国产基础软硬件平台的MGIS系列产品是十分必要的。

矢量地图是地理信息系统中最复杂、处理难度最大的数据,相对于栅格地图,它具有精确度更高、数据显示不受分辨率影响、包含的关系数据可以使得一些空间分析更有效率(例如网络分析)、数据所占据的存储空间相对较小、便于编辑修改等优点[3][4]。

由于商用软硬件平台的成熟性和高性能,MGIS只需采用串行计算的体系结构,在矢量地图显示、漫游、尺度切换等各方面就能满足用户使用要求。但是,目前的国产基础软硬件(包括CPU/GPU的计算能力、操作系统对显卡等外设的驱动能力、二三维图形支撑环境的图形绘制性能、国产整机的综合性能等)与主流商用软硬件相比还存在不小差距[5],如果只是将基于商用基础软硬件平台的MGIS简单移植到国产基础软硬件平台上,矢量地图显示、漫游、尺度切换等方面指标将达不到用户使用要求,我们的实践已经证明了这点。

考虑到现有国产CPU一般都是多核,这为我们解决国产平台上MGIS矢量绘制性能问题提供了一种可能——将最耗时的矢量绘制进行多线程改造,以充分利用现有国产多核CPU的并行计算能力。

本文主要针对国产基础软硬件平台上MGIS的矢量地图绘制展开多线程改造,以期对解决国产平台上MGIS矢量绘制性能问题有所突破。

1 多线程改造与矢量瓦片

1.1地理信息系统体系结构分析

一个通常的地理信息系统体系结构如图一所示[6,7]

图1 一个典型的地理信息系统体系结构Fig.1 a typical architecture of GIS

图中各模块具体介绍如下:

(1)基础软件层:包括操作系统、数据管理系统(文件系统、关系数据库等)、图形支撑环境(比如GD1/GDI+、GTK、QT、OpenGL等);

(2)数据访问对象:是中间件层,它屏蔽底层数据存储层软件(比如不同关系数据库管理系统之间及同一数据库管理系统不同版本之间)之间的差异,对上层提供统一的数据对象访问接口;

(3)数据层:地理信息库负责地理信息的组织与管理;

(4)空间数据引擎层:包括负责读写地理信息库的空间数据库访问引擎、元数据及空间数据在内存与本地缓存一体化存储管理与调度的数据缓存共享区、以及对缓存共享区数据进行读写的缓存共享数据访问引擎;

(5)功能处理层:提供地理信息系统常用功能,主要包括数据装载、数据处理(编辑、拓扑关系处理、空间索引与矢量金字塔生成、拼接裁剪等)、可视化、属性与空间查询(含属性查询、空间查询、基于地名的查询等)、空间分析计算(路径规划、地形分析计算、缓冲区分析、叠置分析、空间计算等)、综合查询分析、制图输出(含可视化显示、打印等)。各功能一般以组件方式实现,便于功能模块间的集成与协同工作;

(6)主控:为功能处理层各功能模块的集成提供统一的集成框架,负责统一获取用户的交互操作、各功能组件自身的状态、各功能组件的处理结果的状态,并将对应的处理通过消息交给相应的功能组件去处理,各功能组件将处理结果以消息的方式返回给主控,通过这样实现功能组件间的集成与协同工作;

(7)交互界面:提供人机交互接口,如鼠标操作、菜单选取、在对话框中输入信息等。

矢量地图显示、漫游、尺度切换的性能主要与矢量绘制密切相关。典型的矢量绘制的流程是:

(1)交互界面向主控发布任务;(2)主控向绘制模块分派任务;

(3)绘制模块向空间数据引擎请求数据;

(4)空间数据引擎从数据层得到数据;

(5)绘制模块进行图形绘制,并将绘制结果显示在交互界面中。

在上述流程中,空间数据引擎从数据层得到数据、绘制模块进行图形绘制两个步骤是最具有多线程改造的潜力,而对它们进行多线程改造必将伴随着对数据模型的改造[2]。

1.2地理数据模型改造与矢量瓦片

Richard Healey等在进行支持并行计算的地理信息系统设计时,提出过一种称之为“多区块”的矢量数据结构。所谓“多区块”是用指一系列彼此独立的规则网格来覆盖一个区域[2]。这与当今在许多在线上商用地理信息系统中使用的“地图瓦片”概念有相似的部分,尽管“地图瓦片”的本质是栅格地图,是将矢量地图在服务器端栅格化形成图片并在各个比例尺上进行切分所形成的,为的是解决初期线上地理信息系统的客户端浏览器常常不支持绘图功能以及网络带宽不支持快速的全图传输的问题。随着客户端浏览器的绘图能力由于一些绘图插件(如WebGL)的出现得到提高,以及用户对线上地图的编辑性要求的提高,“矢量瓦片”的概念被提了出来。应该说,“矢量瓦片”虽然并不是为了解决并行计算问题而诞生,却是最接近Richard Healey等人提出的“多区块”数据结构的概念。

“矢量瓦片”的思想与“地图瓦片”类似,是将矢量数据组织成类似的、按照地理位置组织地理要素的小片,并统合各比例尺数据进一步形成矢量瓦片金字塔,以应对多比例尺的切换问题。不过矢量瓦片比起地图瓦片更为复杂,需要考虑格式标准、瓦片划分体系、细节概括程度、基本几何要素、图层组织、属性信息组织等等因素[4]。当前一个比较成熟的矢量瓦片体系是来自Mapbox的矢量瓦片服务。

Mapbox的一个矢量瓦片内部包含一个或几个图层,每个图层都有一个版本号和名字,并记录了其覆盖的地理范围。图层内部有多个地理要素并存有这些地理要素所拥有的全部非几何属性的名称和这些非几何属性的值。每个地理要素除了需要指向这些非几何属性的键和值外,还需要标明id、要素类型以及几何信息。其中,几何信息是以指令信息和参数信息所组成的。指令信息共有三种:MoveTo、LineTo、和ClosePath。最初的起点设为(0,0),MoveTo有两个参数(dx,dy),它表示从当前点(x,y)直接移动到(x+dx, y+dy)画点,并将新起点设为(x+dx, y+dy);LineTo也有两个参数(dx,dy),它表示从当前点(x,y)移动到(x+dx, y+dy)画点,并将(x,y)与(x+dx,y+dy)连线,起点不变;ClosePath没有参数,它表示从当前点(x,y)回到起点并连线。这三条指令相互配合,能够表示地理要素中可能出现的所有几何类型,并且能够被机器解读,再与符号搭配表对照,从而绘制出相应的几何图形[8]。如果可以将这项技术应用于改造现有的关系数据库,不但可以降低多线程改造的难度,而且可以大大减少在读取数据时的I/O次数,从而提升绘制性能。

根据上述思路,我们拟以矢量瓦片技术为基础,并对绘制模块进行多线程改造的方法来对基于国产软硬件基础平台的MGIS进行优化。

2 MGIS矢量绘制的多线程改造实验

2.1实验环境

本文所采用的实验环境如表1所示。

2.2设计方案

MGIS矢量绘制多线程改造方案如图2所示。

表1 实验环境Tab.1 experiment context

图2 MGIS矢量绘制多线程改造方案Fig.2 the design of the multithreading modification of MGIS vector drawing

其中:

(1)界面线程为主线程,负责接收用户的交互输入、将内存中的图像进行贴图和保存在本地缓存中;

(2)共有四个绘制线程,负责按矢量瓦片块数据绘制成图像,并写入内存的图像缓冲区中;

(3)一个后台运行的注记线程,负责地图注记的绘制与压盖处理;

(4)一个空间数据读取线程,负责从本地缓存中按顺序依次读取地图瓦片、矢量瓦片和从地理信息库中读取矢量瓦片数据;

(5)建立0-22级基于矢量瓦片的多尺度矢量数据库。

2.3关键算法

原型系统主要涉及到的算法是矢量瓦片的生成算法。对于提取出的原始地理数据,首先将其处理成各比例尺所对应的地图的矢量数据,在该过程中须经历过滤和简化,即预处理;再切分空间区域;然后对每一个比例尺的每一个图层的每一个地理要素进行计算,判断他们与该比例尺的哪些瓦片相关联(穿过哪些瓦片或在瓦片内部),对横跨两个或以上的地理要素按照瓦片的边缘进行切分,再放入记录中重新进行判断,直到取出的要素只在一瓦片内部,则将其放入所属的瓦片空间中。其过程如图3所示:

图3 矢量瓦片生成流程Fig.3 the process of tiling vector data

该过程中的要点在于1.计算某个地理要素与哪些瓦片关联(穿过哪些瓦片或在瓦片内部);2.将横跨多个瓦片的地理要素按瓦片边缘进行切分。

2.3.1 计算某个地理要素与哪些瓦片关联的算法

对于某个比例尺下的点要素来说,用点的横坐标除以该比例尺下瓦片的宽度,得到的数值取整加一,得到所属瓦片的列数;用点的纵坐标除以该比例尺下瓦片的宽度,得到的数值取整加一,得到所属瓦片的行数。

对于某个比例尺下的线要素来说,对非闭合弧段首先按照点要素的方法得出除终点、前后两点的x值均小于自身x值及前后两点的y值均小于自身这三类特殊点以外的其他节点相关的瓦片行列号;对于这三类特殊点,则需考察其前一个节点的坐标值情况,若其x值小于该特殊点的x值,则计算该特殊点所关联的瓦片时,如果用点的横坐标除以该比例尺下瓦片的宽度得到的数值为整数,则按照普通的点要素得到的相关瓦片的列数要减一才是该特殊点的所在瓦片的列数,如不为整数,则按照非特殊点处理,如果前一节点的y值小于特殊点y值,则对行数也需要做类似的处理;对闭合弧段,则要用同样方式处理前后两点的x值均小于自身x值及前后两点的y值均小于自身的两类特殊点。其次,找出两端点相关联的瓦片不相邻的线段,计算以两端点相关瓦片作为两对角方格的网格中所有边界所在的直线与线段的交点,按照将x值从小到大的方式排列,依次得出线段穿过了哪些瓦片的边界,如果交点并不是瓦片的角点,则线段与所穿过的边界两边的瓦片都相关;如果恰好是角点,则取中心点离上一个计算出的交点(若该点为线段的第一个交点,则考察线段的起点)最近的那个瓦片为关联瓦片。

对于面要素来说,首先计算其边界节点相关的瓦片行列号,得到x的最大值和最小值、y的最大值和最小值,并计算在x=xmin,y=ymin,x=xmax,y=ymax所围成的瓦片网格中,有哪些瓦片的角点在图形之中,如果这些在图形内部的角点既不在图形的边上也不在图形的角点上,则这些角点四周的瓦片都与该图形相关;若这样的角点在图形的边上,则用线要素的方法计算与这条边相关联的瓦片,这些瓦片与该图形关联;若这样的角点恰好在图形的角点上,则用线要素的方法计算与该角点相连的两边的关联瓦片,这些瓦片与该图形关联。

2.3.2 将横跨多个瓦片的地理要素按瓦片边缘进行切分的算法

对于某个比例尺下的线要素,当它与多个瓦片相关联时,随意找这条弧段中与两个以上瓦片相关联的一条线段,计算它与其中存在公共边界的两个瓦片的公共边界的交点,根据交点将弧段分成起点-交点、交点-终点两条弧段。

对于某个比例尺下的面要素,首先寻找与两个瓦片相关联的边,计算这条边与这两个瓦片公共边界的交点,然后找出另一条与这条公共边界所在直线相交的边,计算出交点,根据交点将图形划分为起点-交点1-交点2-起点、起点-交点2-交点1-起点两个图形。

3 实验结果

优化前后二维地图可视化实验结果对比如表2所示。

可以看出,国产平台上的MGIS优化后所达到的性能指标与优化前相比,整体性能提升一倍左右。

表2 优化前后二维地图可视化实验结果对比Tab.2 performance comparison: before optimization vs after optimization

4 结果与讨论

综上所述,国产平台上的MGIS经过优化后所达到的性能指标与优化前相比,整体性能有大幅提升,但与用户要求仍然存在一些差距。我们认为可能的改进工作将围绕以下两点:

(1)空间数据引擎的多线程改造;

(2)对矢量数据模型的改造以支持基于CPU/ GPU的异构计算,以充分发挥GPU在二维可视化特别是符号化时的硬件加速能力。

相信在未来通过以上两点的优化,基于国产基础软硬件的GIS的矢量地图显示、漫游、尺度切换的性能还将得到进一步的提升。

[1] Hahmann S, Burghardt D. How much information is geospatially referenced? Networks and cognition[J]. International Journal of Geographical Information Science, 2013, 27(6): 1171-1189.

[2] Healey, R., Dowers, S., Gittings, B., & Mineter, M. J. Parallel processing algorithms for GIS[M]. CRC Press, 1997.

[3] Chen F, Ren H. Comparison of vector data compression algorithms in mobile GIS[C]. Computer Science and Information Technology (ICCSIT), 2010 3rd IEEE International Conference on. IEEE, 2010, 1: 613-617.

[4] Ingensand J, Nappez M, Moullet C, et al. Implementation of tiled vector services: a case study[OL]. [2016-5-27].

张晓清, 龚波, 田丽韫, 等. 国产自主可控应用性能优化研究[J]. 软件, 2015, 36(2): 5-9.

[5] ZHANG X Q, GONG B, TIAN L Y, et al. Study on the performance optimization of application running on the platform built with Chinese owned technology[J]. Software, 2015, 36(2): 5-9.

[6] 贾鹏, 王雅楠. 地理信息系统数据库设计的研究[J]. 计算机技术与应用进展2004, 2004.

JIA P, WANG Y N. The research on the design of GIS database[J]. Progress of Computer Technology and Application in 2004, 2004

[7] 谭少辉. 一种跨平台三维GIS系统的分析与实现[J]. 软件, 2014, 35(12): 94-97

TAN S H. The analysis and implementation of a cross- platform 3D GIS system[J]. Software, 2014, 35(12): 94-97

[8] Mapbox. Vector Tile Specification ver2.1[OL]. [2016-4-29]. https://github.com/mapbox/vector-tile-spec/tree/master/2.1..

Multithreading Modification of GIS Vector Drawing on Domestic Platform

ZHU Li1, ZHENG Hao2
(1. No.15 Institute of China Electronics Technology Corporation, Beijing, 100083, China; 2. No.15 Institute of China Electronics Technology Corporation, Beijing, 100083, China)

In order to solve the usability problem of vector map drawing in GIS on domestic platform, this article tries to modify vector drawing module in a multithreading way based on the idea of vector tiles, including the tiling of vector data. The result shows that this method of the multithreading modification can improve the performance of vector map drawing performance largely.

GIS; The optimization of vector map visualization; Vector tiles; Multithreading

P208

: A

10.3969/j.issn.1003-6970.2017.02.024

朱荔(1992-),女,硕士研究生,主要研究方向:计算机软件与理论;郑昊(1978-),男,研究员级高级工程师,主要研究方向:地理信息系统平台技术与数据共享。

本文著录格式:朱荔,郑昊. 国产平台上GIS矢量绘制的多线程改造[J]. 软件,2017,38(2):116-120

猜你喜欢

角点瓦片交点
一种基于主题时空价值的服务器端瓦片缓存算法
阅读理解
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法
指数函数与幂函数图象的交点的探究性学习
基于Harris角点和质量评价的图像篡改检测
基于NoSQL数据库的瓦片地图服务