1 引言
地理信息系统(Geographic InformaTION System, 简称GIS)产品被广泛应用于交通、测绘、环境、国防、航空航天等与国民经济乃至国家命脉相关的重要领域,带来了显著的经济和社会效益。近年来随着嵌入式技术的迅猛发展, GIS 技术也逐步应用于以手机、掌上电脑为代表的移动终端, 使得嵌入式GIS 成为当今GIS 研究领域的一个重要趋势。 当前地图数据量巨大,要求地图刷新频率高、实时性强, 普通桌面系统的地图显示方法很难适用于存储器容量小、处理器性能低的嵌入式系统, 提高地图的显示效率成为嵌入式GIS产品研发的首要问题。 矢量地图拥有数据结构紧凑,冗余度低; 图形显示质量好, 精度高, 不失真等优点,目前已被广泛应用与嵌入式移动终端。 本文针对矢量电子地图研究了地图显示数学模型, 设计了基于LOD的逐层分块的地图数据组织结构, 并以此为基础建立网格索引, 通过实验证明该方法可有效提高地图显示速度。
2 矢量地图显示数学模型
地图的数据组织结构是影响地图显示速度的核心因素。 因此, 要对矢量地图显示数学模型分析研究,合理组织地图数据, 才能有效提高地图显示速度。
由于电子地图的数据量较大, 嵌入式设备的地图数据一般会存放在外存储器中, 系统显示地图时需要先将地图数据读入内存, 再由地图绘制程序解析内存中的数据, 将地图显示在屏幕上。 假设某矢量地图数据占用物理存储空间为D, 数据读入内存速度为V1,显示速度为V2, 数据读取准备时间为f (n) , 用户可等待时间为T, 嵌入式设备内存容量为R, 则有以下公式成立:
嵌入式设备内存容量一定, 若V1, V2, T 为常数,则必须减少D 和f (n)才能满足数据显示和处理的要求,提高地图的显示速度。
通过对地图显示数学模型的分析可以发现, 要使地图的显示速度达到最快, 需要解决两个问题: 一是尽量减少地图非屏幕显示区域的数据量, 即根据显示范围限制读入的数据量; 二是要能以最快的速度从庞大的地图数据中找到当前显示范围所涉及的相关数据。
针对问题一, 本文采用逐层分块策略组织地图数据, 减少非屏幕区域的数据读入; 对于问题二, 则对图块建立索引, 以降低外存调度当前显示数据的时间。
3 矢量地图快速显示策略
3.1 数据组织模型设计
作者引入多细节层次LOD(Levels of Detail)技术思想,该技术最初是一种运用于控制三维场景复杂程度的技术, 其基本思想是: 在建立地表模型时, 应充分考虑人的视觉特点, 对处于视觉不同区域的模型采用不同的分辨率表示, 这样整个地表模型就表现为以"块"为单位的具有多分辨率的细节层次模型, 当从近处观察物体时, 采用精细模型, 当从远处观察物体时采用较为粗糙的模型[5]. 这一思想不仅限用于三维场景, 对于矢量地图的快速显示同样适用。
系统对每个地图分别制作多个比例尺的地图数据,同时参考地图地理要素的规范, 根据要素的重要程度将不同比例尺地图中的图层划分为不同的显示层次,这样电子地图在缩放显示过程中, 可根据当前显示比例尺, 确定需要显示的地理要素。 同时考虑到嵌入式设备显示屏幕较小, 显示覆盖范围相对有限, 需根据显示屏幕尺寸对矢量地图数据进行分块处理, 以减少地图显示时读入内存的冗余数据。 通过上述对矢量地图的分层分块组织, 便形成了基于LOD 的逐层分块地图数据组织模型, 如图1所示。
地图显示时, 在不同显示层次上需要读入相应的数据集合, 并实现根据设备显示范围读入相应图块数据, 从而大大减少地图数据读取和显示数据量, 提高了地图显示的效率。
图1 基于LOD 的逐层分块地图数据组织模型
3.2 矢量地图数据分层处理
在地图的显示过程中, 地图缩小时屏幕覆盖地图的范围增大, 只需显示主要地理要素对象, 相对次要的地理要素可隐藏而不显示; 地图放大显示时屏幕覆盖范围减小, 在当前已显示的地理要素基础上, 相对次要的地理要素也需显示出来。 基于这一特性, 可将地图数据所描述的地理要素依据其重要性特征分为多个数据层次, 即对所需显示的地图按照图层的重要程度设置一个显示参数, 该参数代表地图放大到什么程度时, 才显示该图层。 划分的地图数据层次依次记为L1, L2, L3, …, 其中L1 记录地图中最主要的地理要素,L2记录次重要的地理要素, L3记录一般性地理要素, 依此类推。
实际操作时, 对地图数据分层处理显示参数的确定非常重要, 其选择的优劣直接影响地图显示效率。
本文依据地理要素的属性, 按照以下原则确定显示参数将:
① 对于基础地理要素, 如道路、桥梁、河流、行政区边界等, 在国家标准《基础地理信息要素分类与代码》中采用要素编码区分了其重要性特征, 可以参考其要素编码设定显示参数;② 对于非基础地理要素, 如学校、酒店、商业街区、街区居民地等, 其重要性特征没有统一的标准, 则根据这类地理要素自身包含的等级属性, 如酒店星级、街区面积等来确定显示参数。
以某城市公路网为例, 采用道路要素编码为显示参数进行分层处理, 可分为4 个层次: L1 记录城市一级、二级道路: 高速公路及环线; L2 记录城市三级道路: 市内主干道, L3 记录四级道路: 市内次干道, L4 记录城市五级道路: 市区分支街道。 地图显示时, 不同层次细节显示需要在上一层次显示的基础上读入相应Li 的数据集合来支持, 如图2 给出某城市公路网L1~L4 的显示效果。
图2 某城市公路网不同层次显示效果图
3.3 矢量地图数据分块方法
要提高地图的显示速度, 应尽量减少地图非屏幕显示区域的数据量, 因此需对矢量地图进行分割形成地理范围更小的图块, 并将图块作为嵌入式GIS 系统地图数据处理的基本单元。
对于矢量数据的分块方法分别是对点、线、面的矩形分割, 即将地图数据根据屏幕显示范围大小横向分为N 份, 纵向分为M 份, 形成由N×M 个同等大小的基本地理单元组成的图块集合。 地图显示时, 系统只需根据显示层次读入与显示覆盖区域相交的部分图块, 快速将地图绘制在屏幕上。
在对地图数据进行分块处理时, 需要重点考虑分割图块的大小。 因为一定矢量数据划分的图块较大, 则读入内存的非屏幕显示区域的数据就会越多, 增加了不必要的冗余数据; 而数据划分的图块越小, 读取数据的准备时间就越长, 且对矢量数据的分割还会增加显示的数据量, 也会影响显示速度。 因此在数据分块时要根据实际屏幕显示尺寸和地图比例尺综合考虑分块大小。
若已知屏幕分辨率为L×W 像素, 地图的比例尺为1:S, 地图经度覆盖范围X, 纬度覆盖范围Y, 地图表示精度记为A, 地球圆周单位秒代表距离为m (m 为常量, m ≈31 米), 记地图横向划分图块数量为N, 纵向划分图块数量为M, 则有以下公式:
其中, X, Y 单位为秒, A=0.1×10-3×S.
以比例尺为1:50 000, 经度范围25', 纬度范围15'
的矢量地图和800×480 的屏幕为例, 可由式(2)推导得该地图应划分为12×12 块图块。
3.4 矢量地图网格索引
如前文所述, 提高地图显示速度还必须使地图显示时能快速的从外存检索和调度当前显示范围所涉及的矢量数据, 因此还需建立空间索引。针对逐层分块的地图组织策略, 建立了基于文件存储的网格索引。
基于文件的网格索引以索引文件存储索引数据, 通过名为POSITION 的位置指针可以对每个空间目标的首地址进行快速定位, 具有操作简洁、直接访问、适应广泛的优点, 其索引结构如图3 所示。
图3 基于文件的网格索引结构图
索引数据按地图层次存储, 每层索引数据与相应的地图分层数据对应。 索引数据结构包括索引头、层次描述信息和每层划分图块索引: 索引头主要包括该地图数据的名称、编号和划分层数; 层次描述信息包括各层次的编号、左下角点坐标、分块的宽度和高度、分块的行数和列数以及该层图块索引在索引文件中的位置; 图块索引内容主要包括图块数据在地图数据文件中的位置指针及其地理要素概要信息, 包括标识、要素类型编码、外接矩形、占用存储空间大小等。
建立网格索引后, 地图显示时系统首先计算出当前层次覆盖显示区域的图块; 然后根据每个图块的地理要素信息进行重复显示判断, 过滤掉已经显示的地理要素; 再根据位置指针, 从地图文件中读取该图块的矢量数据, 进行显示处理。 因此网格索引能直接过滤掉非屏幕显示区域图块及地理要素, 极大地减少地图数据的读取量, 并通过索引文件中的POSITION 指针直接从地图文件中查找到矢量数据, 有效缩短了检索时间。
4 性能测试与分析
为验证本文设计的嵌入式GIS 地图快速显示方法的有效性, 本文选择UT6410 开发板搭建嵌入式试验平台进行了测试。 实验平台拥有主频667MHz 的ARM处理器、128MB 内存、8GB SD 卡存储器和分辨率800×480 的显示屏幕, 并搭载嵌入式Linux 系统; 测试地图是比例尺分别为1:50 000 和1:250 000 同一地区的全要素矢量地图。 实验将采用本文方法及未采用本文方法时直接全图读入内存显示方法的地图显示性能进行了对比测试, 实验结果参见表1.
表1 采用逐层分块法与全图读入法地图显示性能对比
由实验结果可以看出, 在矢量地图数据相同的条件下, 采用逐层分块并建立网格索引方法比未采用此方法时的地图显示速度提高了6~8 倍, 并达到了平滑漫游和缩放的显示要求。
5 结语
为使矢量地图能够在嵌入式GIS 平台上实现快速显示, 本文基于对矢量地图显示数学模型的分析, 从减少地图非屏幕显示区域的数据量和快速检索并调度当前显示数据两方面入手, 引入LOD 思想构建了逐层分块地图数据组织模型, 结合嵌入式矢量地图数据访问特点重点研究了地图分层、分块的策略及实施, 并在此基础上建立了文件存储的网格索引。 定性分析和实验结果表明, 本文提供的方法能够很好地满足嵌入式环境下地图快速显示的要求, 有效提高地图操作效率。