09. 一种面向服务器制图可视化的矢量数据多尺度组织方法
摘要
提出了一种面向服务器制图可视化的矢量数据多尺度组织方法。基于矢量数据瓦片化思想, 将矢量数据按照全球地理空间金字塔索引模型划分为层次化瓦片数据,将服务器制图可视化处理中对数 据图层的空间查询操作,转化为对瓦片数据的数据读取操作。实验及应用表明,该方法减少了数据读取时 间,降低了I/O 代价,提高了矢量数据服务器制图可视化的整体性能。
关键词
矢量数据;多尺度;制图可视化;球面墨卡托;矢量瓦片
1. 引言
由于传统基 于 个 人 电 脑 的 地 理 信 息 系 统 GIS (GeographicInformationSystem)平 台 难 以 处 理 数据量日益庞大、结构日益复杂的各类地理空间信 息,越来越多的地理空间信息管理与处理应用开始 采用服务器集群体系架构来构建[1~3]。其中,基于 高性能服务器集群的地理空间数据制图可视化是 面向服务器架构的 GIS三个核心功能———数据管 理、空间分析和制图可视化———之 一,也 是 该 领 域 当前的研究热点。目前,主流的服务器地理信息应 用系统通常采用预渲染的方式提前将地图绘制好 以提供浏览服务,这种模式由于提供的是只读性质 的地图,而难以满足用户在线交互制图的需求。
当前实现在线交互制图的主流解决方案是:对 包含修改内容的图层数据进行全部重新绘制,然后 与其它图层数据重新进行融合渲染,再返回用户。 对该机制进行分析,可知其性能在大用户并发情况 下难以满足应用需求,主要原因是:当用户进行交 互制图作业 时,客 户 端 将 与 服 务 器 开 展 大 量 交 互 (例如修改样式),服务器将反复读取相同数据进行不同样式的绘制,并进行频繁查询处理操作,从而 消耗大量资源,导致系统响应变慢,服务质量下降。 尤其当操作大规模矢量数据时,密集的查询操作将 导致磁盘长时间处于高负荷状态。在高并发条件 下,会导致服务器负载过重,甚至失去响应。
上述问题的根源在于服务器数据绘制需要多 次执行复杂度高的空间查询操作,而其中相当数量 的操作属于重复操作,应当予以避免。为此,作者 提出根据空间瓦片模型对用户绘制的空间范围进 行划分,将被绘制的矢量数据根据瓦片划分模式进 行重组,形成矢量瓦片模型;当被绘制区域首次绘 制时,将生成矢量瓦片数据并予以缓存;当被绘制 区域重复绘制时,只需读取对应矢量瓦片数据进行 处理,从而减少了大量空间查询处理操作,提高交 互制图性能。
2. 研究现状
2.1 全球空间瓦片模型
全球空间瓦片模型是当前使用最广泛的空间 数据多尺度(多分辨率)组织模型[4]。该模型的主 要原理是:对全球空间进行不同尺度的划分,每个 尺度上的划分都将形成一系列彼此相接的空间瓦 片区域(以下简称瓦片),这些瓦片将无缝地覆盖全 球空间;对于同一空间区域,相邻尺度上瓦片的空 间几何特征(例如长度、宽度、空间范围等)是可以 通过递推计算得到的。将上述瓦片集合按照划分 尺度大小的顺序组织起来,即成为对全球空间描述 的多尺度模型。按照尺度由大到小排列,瓦片数目 规模成等比级数增长,状若金字塔,因此全球瓦片 模型也称为金字塔模型。
构建全球瓦片模型需要明确两个问题,一是如 何建立全球划分的基础空间。当前的主要做法是 将全球空间通过某种空间投影转换到平面上,形成 平面连续的全球空间范围。二是如何在全球空间 上进行多尺度划分。当前的主要做法是基于四叉 树结构对全球空间进行多尺度递推划分[5]。
目前使用较广泛的全球空间瓦片模型主要有 两种:基于球面墨卡托投影构建四叉树结构的瓦片 金字塔和基于等距圆柱投影构建双四叉树结构的 瓦片金字塔。
球面墨卡托投影把地球看作正球体[6],地球半 径取 R = 6378137m,赤 道 周 长 为 2πR = 2× 20037508.342789m。该投 影 将 赤 道 作 为 标 准 纬 线,本初子午线作为中央经线,两者交点为坐标原 点,向东向北为正,向西向南为负,经线和经线之间 相互平行且 间 隔 相 等,坐 标 范 围 为 ±20037508. 342789m,对应地理坐标为 ±180°,纬线和纬线之 间相互平行,间隔从赤道向两级逐渐增大,坐标范 围也 是 ±20037508.342789m,对 应 地 理 坐 标 ±85.05°。该投影未包括南北两极的部分区域,整 幅地图呈正方形[7]。该模型基于四叉树结构将投 影后得到的区 域 进 行 层 次 划 分,划 分 方 法 是:第0 层包含一个瓦片,空间范围为全球,假设该瓦片像 素尺寸为256×256,则第0层瓦片的像素分辨率 为156543.0339m;设第i层(i>1)的瓦片像素 分辨率为Ri ,则按照四叉树结构,Ri =Ri-1/2,即 高层中每一块都将被分为四块;定义左上角为瓦片 编号原点。如图1所示为该方法划分模型。
依据上述方法构建的瓦片金字塔,可以根据层 数(z)、行号(x)、列 号(y)三 个 参 数 以 及 瓦 片 像 素 尺寸和投影参数确定转换公式,计算出瓦片所表示 的空间范围,也可以根据层数和空间坐标对瓦片进 行定位。这种构建方法可以对全球范围内的数据 进行统一组织和管理,而不需要针对特定数据构建 瓦片金字塔,可以方便地实现多个地图数据的叠加 操作。
等距圆柱投影则是将全球空间范围投影成一 个长宽比为2的矩形,进行空间划分时,如将瓦片 形状取正方形,则需要对东西半球分别按四叉树模 型构建瓦片金字塔。因其划分后数据量比基于球 面墨卡托投影划分的瓦片金字塔大,其使用没有基 于球面墨卡托投影划分的金字塔模型范围广。
两种投影方式都可以将全球空间范围投影成 一个平面,利用四叉树结构建立瓦片金字塔,提高 访问效率。
2.2 矢量瓦片
传统的地图瓦片技术将数据进行渲染绘制后 生成图片格式的瓦片,客户端接收到的瓦片中不包 含数据内容。AntoniouV 等[8]提出了一种将矢量 数据瓦片化应用于网络高效传输矢量数据的方法, 该方法将需要用于传输的矢量数据根据一定规则划分成若干个小数据单元进行传输,各个数据单元 的传输相互独立,这样的矢量数据单元称之为矢量 瓦片。
受该思路启发,本文提出将被操作的大规模矢 量数据根据全球空间瓦片划分模型进行瓦片化划 分,并将划分后的数据进行存储,形成一系列规模 较小的矢量瓦片数据,然后利用这些矢量瓦片数据 参与渲染绘制,以减少复杂的空间查询代价。
3. 基于矢量瓦片的矢量数据多尺度 组织模型
基于矢量瓦片的矢量数据多尺度组织模型借鉴 了矢量瓦片在处理矢量数据中相互独立的特点,根 据瓦片金字塔构建的索引及其使用的投影,计算出 瓦片的空间范围,并从原始数据中通过空间查询得 到要素集合,生成矢量瓦片进行数据多尺度组织。
3.1 数据组织
通过基于球面墨卡托投影构建的全球空间瓦 片模型可以实现全球多尺度空间数据索引与组织 的一体化集成,实现数据的快速调度[4]。
但是,在实际应用时,针对不同空间范 围 的 数 据全部建立统一的全球金字塔结构不利于数据的 快速检索,且会产生大量冗余的空白数据,故该模 型只负责建立全球统一的金字塔结构的瓦片索引, 各个数据在该索引机制下分别独立地建立局部的 子金字塔模型进行数据组织。该子金字塔模型的 空间索引是全球空间索引的子集,存储的数据则是 局部多尺度空间数据。
由此,进行空间数据检索时,将根据数 据 的 标 识找到该数据的子金字塔,再根据索引完成瓦片的 查询。
3.2 数据内容
上述模型中的每个矢量瓦片中的数据是被操 作矢量数据与瓦片空间范围拓扑相交计算后得到 的结果要素集合,每一个集合元素都包含了要素几 何特征与描述属性。
矢量瓦片一般用文件进行存储。根据 不 同 解 码方案,可以是文本数据文件,也可以是二进制数 据文 件。在作者参与的科研项目中,采 用 的 有 GeoJSON(基于JavaScript对象表示法的地理数据 格式)格式[9]、PBF(ProtocolbufferBinaryFormat) 格式[10]和 MVT(MapnikVectorTiles)格式[11]。
3.3 矢量瓦片的生成
当矢量空间数据参与交互制图操作时,需要对 该数据进行瓦片化处理,步骤是:
步骤1 根据数据的范围初始化瓦片空间;
步骤2 接收交互系统传入的操作参数,如数 据空间范围、设备显示范围等;
步骤3 通 过 空 间 范 围 和 显 示 范 围 计 算 出 当 前瓦片框架集合,任意瓦片都含有层数、行号、列号 等索引信息;
步骤4 对 任 意 瓦 片 通 过 空 间 求 交 操 作 得 到 该瓦片要素集合并解码,按照瓦片文件组织方法对 应的文件路径保存矢量瓦片文件。
上述生成矢量瓦片金字塔的过程是一个动态 过程,服务器会根据用户浏览需要实时按需生成对 应瓦片。
3.4 矢量瓦片的数据更新
矢量瓦片模型和文件建立后,瓦片中的数据内 容有可能随着系统应用而更新。更新的数据往往 是局部区域的。因此,当图层数据产生变化时,只 需对与变化区域对应的瓦片数据进行更新即可,不 必更新整个矢量瓦片模型。更新步骤如下:
步骤1 计算出所有更新数据的空间范围,并 标记数据的状态:新增、删除、修改等;
步骤2 获 取 待 更 新 数 据 的 子 金 字 塔 已 构 建 的层数;
步骤3 对 已 构 建 的 每 一 层 通 过 空 间 范 围 计 算出更新范围所包含的瓦片范围,遍历瓦片内的瓦 片数据,根据更新数据标记的状态分别对瓦片中的 数据进行更新。
如果数据被删除,那么该数据对应的矢量瓦片 金字塔也将被清空。
3.5 多图层矢量瓦片合成
在交互制图过程中,有时需要对多个数据独立 进行制图,有时也需要对多个数据组合进行综合制 图,两种制图方式的绘制结果是有差异的。前者多 个数据的绘制结果以多个数据图层的形式进行简 单叠加即可,数据间相互独立;而后者的绘制会根 据数据不同的组织方式、不同的组合形式而产生不 同的绘制结果,多个数据的矢量瓦片需要整合在一 个瓦片中以便绘制。
当用户需要对多个数据合成进行制图时,为保 持各数据的独立性,其各自的子金字塔保持不变, 系统新构建一个包含所有数据金字塔索引结构的 子金字塔,而该新建的子金字塔瓦片中的数据将通 过各数据的子金字塔中相同索引的瓦片数据合成 一个数据瓦片。
4. 矢量瓦片地图服务的实现
瓦片金字塔的建立,标志着任意瓦片的逻辑索 引和矢量数据多尺度组织的逻辑索引的确定。服 务器在绘制时,根据瓦片索引直接读取矢量瓦片进 行绘制,不再依赖于原始数据。
在交互制图过程中,任意矢量瓦片只在首次请 求生成该瓦片时从原始数据进行空间查询操作,而 后只要数据本身未做更新,无论多少次请求都将直 接使用矢量瓦片中的数据进行绘制。与每次绘制 都需要进行空间查询相比,构建矢量瓦片金字塔将 提高交互制图时的性能,改善用户体验。尤其是大 规模矢量数据的交互制图,空间查询过程非常消耗 资源且耗时,矢量瓦片技术的优势将突出体现。
4.1 矢量瓦片提供地图服务实现流程
通过分析瓦片地图的服务模式,得到在建立矢 量瓦片金字塔的情况下服务器响应瓦片绘制请求 的主要流程如图2所示。其中,地图瓦片是否保存 可根据需要进行选择。在交互制图过程中,一般不 选择保存地图瓦片。
4.2 矢量瓦片提供地图服务请求-响 应 的 代 价 模 型及代价函数
设客户端需要绘制的图层为集合L = {l0,l1, …,ln},当前绘制 区 域 的 空 间 范 围 为 BBox (球 面 墨卡托投影下的地理坐标,单位:m),可视范围为 View (绘制设备的像素范围,单位:像素),得 到 当 前可视区域的像素分 辨 率 r=BBox.Width/ View.Width,通过r及构建瓦片金字塔时确定 的 各层像素分辨率,用就近原则得出当前视图瓦片所 在的层数z及其对应的像素分辨率Res。得 到 层 数信息后,根据空间范围计算出在当前层命中的瓦 片行列的范围 [x1,x2]× [y1,y2],计算公式为:
4.3 代价分析
在相同的网络环境以及相同的客户端、服务器 等软、硬件条件下,在是否构建矢量瓦片金字塔的 情况下,服 务 器 在 处 理 瓦 片 Ti(z,xp,yq)的 请 求 时,二者在Draw(i,z,p,q)与Transmit(i,z,p,q) 的差异基本可以忽略不计,其主要的差异存在于函 数Read(i,z,p,q)所代表的读取数据时间。如已 构建矢量瓦片金字塔,则绘制任务可以根据瓦片索 引快速读取数据进行绘制,反之,则需要根据空间 范围进行空间查询,从原始数据获取数据。故函数 Read(i,z,p,q)所消耗 的 时 间 将 决 定 二 者 性 能 上 的差异。
5. 实验结果与分析
5.1 实验环境
服务器集群含数据库服务器和制图服务器。 数据库服务 器 的 配 置 是:双IntelXeon 四 核 处 理 器、16GB内存、RedHatEnterpriseLinux5.5操 作系统,使用 PostgreSQL数据库存储矢量空间数 据,挂 接 磁 盘 阵 列,容 量 为 12TB,文 件 系 统 是NFS。制图服务器的配置是:双IntelXeon六核处 理器、32GB内存、RedHatEnterpriseLinux6操 作系统,与数据库服务器共享磁盘阵列存储系统。 数据库服务器主要实现矢量空间数据存储和访问 功能;制图服务器主要实现矢量瓦片生成、瓦片数 据绘制、矢量瓦片提取与访问等功能。瓦片存储在 磁盘阵列存储系统中。各服务器由万兆以太网交 换机连接。
5.2 实验数据及实验方法
实验所用数据为:(1)从 OpenStreetMap[12]下载 的中国道路数据,包含487240个线要素,如图3a所 示;(2)从 OpenStreetMap下载的德国行政区划数 据,包含61683个面要素,如图3b所示。
实验数据导入数据库后,按照本文提出的方法 实时构造交互制图区域的矢量瓦片,然后分别从对 应的矢量瓦片结构的第4~11层中各选取一个瓦 片作为该层的实验样本,样本信息见表1和表2。
其中表(1)为数据1选取的瓦片样本信息,表 2为数据(2)选取的瓦片样本信息。
为了进行对比,采用两种渲染方式:(1)直接从 数据库中 读 取 交 互 制 图 区 的 矢 量 数 据 进 行 渲 染; (2)从构建好的矢量瓦片结构中读取交互制图区的 矢量数据进行渲染。记录和对比两种方式下服务 器进行渲染操作的数据读取时间。为减少实验过 程中网络及磁盘状态的随机误差,将重复10次的 读取时间的平均值作为实验结果进行分析。
5.3 实验结果
得到的实验结果分别如表3和表4所示。
从表3实验结果可看出,方式(2)的数据读取 时间远小于方式(1)的数据读取时间,带来了交互 制图性能的大幅提高。
从表4的实验结果可看出,使用矢量瓦片存储 数据用于绘制仍然可以明显减少读取数据时间,但 随着数 据 量 的 减 少,加速效率下降比较明显。因 此,实验结果表明,本文提出的方法在大规模矢量 数据在线交互制图时更为适用。
本文提出的基于矢量瓦片的矢量数据多尺度 组织方法已经在面向集群服务器的高性能地理信 息系统 HiGIS[13]中 得 到 了 初 步 的 应 用,如 图4所 示即为本文实验所使用的 OpenStreetMap中国道 路数据使 用 矢 量 瓦 片 在 HiGIS 中 渲 染 绘 制 的 结 果。
6. 结束语
本文深入分析了当前主流的在线地图服务模 型,针对地图瓦片在交互制图过程中出现的弊端, 在数据层面上对瓦片进行缓存,使用存储矢量数据 的矢量瓦片进行交互制图。实验结果表明,使用矢 量瓦片进行数据绘制可大幅减少获取数据时间,从 而提高服务器提供在线交互制图服务的性能。
尽管使用矢量瓦片可以加快获取绘制数据的 速度,但其在实际应用中仍有较多的改进空间:
(1)瓦片生成过程中,要素解码操作消耗的时 间较多,导致其首次绘制的性能低于不使用瓦片, 可考虑首次绘制时直接使用数据绘制,后台进行解 码生成矢量瓦片;
(2)可以考虑并实现要素解码操作的并行化;
(3)可以考虑,在生成矢量瓦片的过程中,有条 件地使用要素简化相关算法,减少瓦片的数据量;
(4)绘制矢量大规模数据时,可以考虑将矢量 瓦片存储于并行文件系统,使用并行绘制程序绘制 瓦片,提高绘制速度;
(5)如果应用于数据量较小的数据,将产生较 多无矢量要素的空白瓦片,需要研究合理处理空白 瓦片的方法。
本文作者:Sail away' Blogs
本文链接:https://www.cnblogs.com/flying-birds-xyg/p/16010014.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步