■ 文/公安部第一研究所 王超
北京中盾安全技术开发公司 李佩虎
呼和浩特市公共安全大数据应用实验室 王德清
呼和浩特市公安局科技信息化支队 张健
关键字:PGIS 矢量瓦片 地图样式 个性化在线制图
随着PGIS平台的推广、普及与应用,地理信息及电子地图已被广泛应用于指挥调度、警情分析、巡防勤务、社区警务等各类公安业务领域,成为公安信息化工作不可或缺的一部分。随着应用的不断深入,各应用场景对电子地图可视化效果的差异化需求也越来越明显。目前,PGIS平台采用基于栅格瓦片的预渲染技术来提供警用电子地图的浏览服务,数据量大,在地图浏览、查询、分析等应用中需要的时间较长,效率较低,地图样式单一,无法实现按需设置的地图可视化显示效果,难以满足实战业务部门在业务开展过程中提出的在线交互制图需求。
特别是随着公安“四项建设”的推进,公安警务工作对于移动端地图的应用场景越来越多。移动端具有存储有限、对数据量要求高的特点,对于网络传输量和传输速度有较高的要求。同时,高分大屏在公安指挥中心、交警指挥中心、应急指挥等场景中的应用日益广泛,由于PGIS栅格瓦片地图预渲染的特点,导致其在高分大屏的应用存在诸多问题。因此,寻找一种既能有瓦片地图分片访问优势、同时又可以实现矢量地图动态渲染的技术,是未来PGIS地图发展的一个方向。
近年来,为解决栅格瓦片显示效果单一、无法交互的问题,国内外学者通过大量探索与研究,提出许多切实可行的技术思路与方法。杨梅等提出一种用于大规模矢量数据调度的策略,引入基于"金字塔"思想的数据调度和工作空间的服务配置技术,采用WFS服务的方式调度数据,将GML数据解析为坐标数据进行展示。孙璐等提出一种面向服务器制图可视化的矢量数据多尺度组织方法。基于矢量数据瓦片化思想,将矢量数据按照全球地理空间金字塔索引模型划分为层次化瓦片数据,将服务器制图可视化处理中对数据图层的空间查询操作,转化为对瓦片数据的读取操作。这种方案是谷歌栅格瓦片技术的一种延伸,将用于传输的矢量数据切分成小的数据单元进行传输,每个数据单元只包含一定范围内的要素信息,瓦片携带的是用于绘制的数据,而不是已经绘制出的固定样式的图片,从而实现矢量数据的瓦片化,使数据的请求和传输变得更加高效,在客户端进行更快、更灵活的渲染。
实现基于矢量瓦片的地图服务,首先需要完成矢量数据的瓦片化处理。王亚平等提出一种基于开源软件的矢量瓦片生成方法,为矢量瓦片的构建提供了可行的技术参考。在矢量瓦片的数据格式与组织方法方面,目前并没有明确的格式标准和体系标准,但已经有了一些探索和实际应用的成果。孙晨龙等针对当前矢量数据组织方法在显示效率和效果方面存在的不足,提出一种基于矢量瓦片的矢量数据组织方法,此外还有GeoJSON、PBF、SVTiles等开源及商用的矢量瓦片数据格式定义参考。
在上述理论与技术研究的基础上,研究人员进一步开展了基于矢量瓦片的原型系统研究与开发。周婷通过自行搭建矢量瓦片服务器,按照瓦片地图金字塔模型切割并缓存地图数据,完成矢量地图的渲染工作,基于地图功能的基本实现,以用户轨迹数据和手机通话记录数据为例,在矢量地图上分别采用网眼和动态弧线的方式进行了可视化呈现。朱秀丽等研究了矢量瓦片的图形数据和要素数据的编码、矢量瓦片的组织存储方式并实现对矢量瓦片的实时渲染。周强等、何猛等还将矢量瓦片技术应用到移动端地图中,提出了移动地图中矢量瓦片的组织方法,讨论了移动终端瓦片技术的应用模式及其业务发展的主要制约因素。
当前研究成果表明,矢量瓦片技术克服了传统栅格瓦片的缺陷,在交互性、渲染效果、动态制图及实时属性查询等方面具有很大的优势和应用价值。本文在综合分析当前研究成果的基础上,采用矢量瓦片技术,将警务空间矢量数据与瓦片化的多分辨率“金字塔”数据组织模型结合起来,利用前端实时渲染技术,研究开发了交互式警用电子地图在线制图与服务系统,并成功应用于呼和浩特市“平安首府”项目中,为各警种警务空间数据可视化展现提供了有效支撑。
“金字塔”模型是当前使用最广泛的多尺度瓦片数据组织模型。其主要原理是将空间区域进行不同尺度的划分,每个尺度上形成一系列彼此相接、无缝覆盖的空间瓦片区域。不同尺度的瓦片数目规模按尺度大小呈等比级数增长,状若“金字塔”,因此称之为“金字塔”模型。
矢量地图采用前端实时绘图模式完成地图渲染,在服务器端的缓存数据为原始的矢量数据集。缓存之前需要作数据分层处理,即将同类型的需要协同展示的数据分配在一个图层中。理论上讲,可以直接使用警用基础地理信息数据库、警用专用地理信息数据库及公共地理信息数据库中的图层划分。但考虑到“三库”中的图层划分是以数据管理为目的的,而动态数据处理是以地图绘制、展示和应用为目的,因此需要对图层划分进行一定的调整,形成新的图层数据。调整方式主要有以下三种:
(1)图层剔除。将“三库”中一些在一般绘图中不需要的图层剔除,不进行矢量数据整理。如高程点、等高线、土地覆盖、注记、动态目标等。
(2)图层拆分。对“三库”中部分承载内容较多,各种类型要素表达方式相差较大的图层进行拆分,尽量做到同一图层中的数据表达方式一致。如各类场所、管理设施、管线等。
(3)图层合并。“三库”中图层分类比较细,图层数量较多,为减少客户端绘图时的数据获取次数,提供地图绘制效率,需要结合各业务地图绘制需求,对“三库”中的部分图层进行合并操作。
根据以上原则,将基础地理信息数据划分为:行政区划、交通、水系、居民地及设施、管线等图层。将警用公共信息数据划分为交通、场所、单位信息、门牌、警用管理分区、水系、基础设施等。
矢量瓦片采用分层分级的技术路线和金字塔数据组织方式,在瓦片制作时需要考虑不同比例尺下的瓦片制作级别问题。大比例尺矢量数据在的直接绘制会给前端带来巨大的压力,需要对不同比例尺制作不同级别的瓦片数据。概括前,应尽量选择比例尺恰当的原始数据,以减少概括的工作量,参考如表1。
表1 矢量地图切片级别参照表
在对图层进行概括时遵循以下原则与基本规律:保持事物分布特点;反映事物密度对比;既尊重指标又灵活掌握;制图对象的密度越大,其选取标准越高,反之亦然;遵循从主到次、从大到小的顺序原则进行选取,以使地图保持原来区域的基本面貌;在保持各密度去之间具有最小辨认系数的前提下,保持各区域间的密度对比关系。
在对要素进行概括时,主要表现在对复杂地理要素的简化处理。对于点要素的处理,根据点要素的优先级别,通过抽稀和分级显示的方法处理。对于线状要素,在要素整体相似性、一致性和精确性的基本要求下,采用目前公认的矢量线要素简化经典算法Douglas-Peucker(D-P算法)对线要素逐比例尺进行抽稀和化简处理。针对面要素,随着比例尺级别的缩小,面积较小的图斑在地图上显示时无法表达地理要素信息,根据显示级别处理掉面积较小的图斑。
为了与PGIS栅格瓦片兼容,参照PGIS栅格瓦片构建规则,某一级别下,矢量瓦片个数、瓦片地面分辨率、显示比例尺和矢量数据源比例尺见表2。
表2 各级地图矢量瓦片特征表
根据与PGIS原有的栅格瓦片兼容的原则,按照PGIS切片规则逐比例尺逐层的对矢量数据进行分割,形成矢量瓦片数据。矢量瓦片数据遵循以下标准:采用CGCS2000国家大地坐标系;切图原点为(-180,90),向东向南逐渐递增;地图分级1-20,根据实际应用需要可以继续扩展。某级单个瓦片的所表示地面范围的大小:
其中:Sn表示单个矢量瓦片所代表的地面范围的大小,单位为m2;96为PGIS栅格瓦片像素密度;0.0254为米到英寸的转换系数;256*0.0254/(96*地图显示比例)为某一级矢量瓦片的宽度,单位为m;地图显示比例可以根据地图级别从表2中获得。
切图时,根据“金字塔”模型,首先通过地图数据源的坐标范围,确定1-20级各级矢量切片的行列号;然后计算出每一级切片下每个瓦片的坐标范围;最后根据各级地图所包含的图层和图层中要素的显示级别,结合各瓦片的坐标范围生成选定格式的矢量瓦片数据。
目前主流的矢量空间数据交换格式分为基于XML(可扩展标记语言)的地理空间数据交换格式(如SVG、GML、KML)和基于JSON(JavaScript对象表示法)的轻量级地理空间数据交换格式(如GeoJSON、TopoJSON)两种。基于XML的数据交换格式在面对数据量大、数据结构复杂的情况时,会存在大量的数据冗余,进而影响数据的存储和网络传输效率,同时解析时在浏览器端还会存在一定的兼容性问题。GeoJSON作为一种基于JSON的数据交换格式,遵循OGC简单要素规范,可以对地理要素进行编码,具有易读性强、扩展新高和通用性强的特点,有利于地理数据的传输。结合PGIS数据的特点和主流数据交换格式的特点,采用GeoJSON格式进行数据的承载。
每个矢量瓦片包含若干个图层,每个图层由若干个点、线、面等地理实体的集合组成,每个实体集合由若干个地理实体组成,每个地理实体包含有实体的位置信息和属性信息。一个矢量瓦片就是一个GeoJSON文件(如图1所示),包含所有落在该瓦片范围内实体(点、线、面)的位置信息和属性信息。位置信息包括要素的类别和实际地理位置信息。属性信息以键值对的(key-value)的方式存储,主要包括属性名称和级别两个属性。GeoJSON字符串如下:
{"features":[{"geometry":{"coordinates":[],"type":"Lin eString"},"properties":{},"type":"Feature"}],"type":"Feature Collection"}
其中,features是一个字符串数组,包括一个瓦片中所有地理实体的位置信息和属性信息,每一个元素代表一个地理实体;coordinates是由coordinate构成的数组,表示一个地理实体的位置信息,数组元素结构由几何类型来确定;type为地理要素类型,"Point", "MultiPoint","LineString","MultiLineString","Polygon","MultiPolygon","GeometryCollection","Feature",或者"FeatureCollection";properties是由地理要素属性集合构成的一个对象。
图1 矢量瓦片示例图
地图样式采用JSON格式的配置文件进行存储,以配置文件的方式独立于矢量瓦片单独存在。通过这样的方式,可以在不改变矢量瓦片的条件下对样式属性信息进行修改,进而实现要素样式信息的交互性。矢量瓦片的组织结构如图1所示。
图2 矢量瓦片组织结构模型
矢量瓦片在服务器中以GeoJSON文件格式存储,数据文件分为三层,Z/X/Y/*.geojson(Z:地图级别,X:列号,Y:行号),地图样式文件采用JSON格式以配置文件的方式单独存储。通过建立瓦片金字塔,确定任意瓦片的逻辑索引和矢量数据多尺度组织的逻辑索引之间的映射。客户端在绘制时,根据瓦片索引直接读取矢量瓦片进行绘制,不再依赖于原始数据。
与栅格瓦片的预渲染机制不同,矢量瓦片技术通过调用原始数据采用实时渲染的机制。当用户在前端进行地图操作时,矢量瓦片可以根据样式配置在前端进行实时渲染,提升用户的交互性和灵活性。
图3 矢量地图数据组织形式
图3 矢量地图数据组织形式
根据矢量地图数据组织形式(图3),每个地图对象由多个图层组成。每个图层包含一个数据源和一个JSON格式的样式文件,然后将所有图层的样式文件整合为一个统一的地图样式配置文件。样式文件用以控制每个图层的展示样式。通过动态修改样式文件,实现不同风格地图的在线制作。根据拓扑结构的不同,样式又分为点、线和面样式。各类样式属性见图4。
图4 样式属性
通过可视化的样式编辑页面,对样式属性进行动态修改,实现样式文件的在线动态编辑。然后采用oPenlayers开源引擎,调用编辑后的样式文件,由浏览器负责进行矢量地图渲染,进而实现对矢量地图的实施渲染。
本文构建一套交互式警用电子地图在线制图与服务系统,该系统利用矢量瓦片技术,将警务空间矢量数据与瓦片化的多分辨率金字塔结构数据缓存结合起来,利用前端实时渲染技术,提供个性化的地图定制服务,在交互性、渲染效果、动态制图及实时属性查询等方面具有很大的优势,为各警种警务空间数据可视化和个性化定制提供有效支撑。系统界面(见后页)。
为了和PGIS互相兼容,互为服务,系统参照《警用地理信息系统基础地图选用技术要求》《警用地理信息数据分层及命名规则》《警用地理信息属性数据结构》《警用地理信息瓦片地图规范》等标准规范对数据进行存储与管理。系统在提供PGIS原有的栅格地图服务的同时,提供六套不同风格的矢量地图模板。用户可以基于系统提供的六套模板(湛蓝简洁地图、深黑湛蓝地图、简约地图、深黑简约地图、全市路网图、主城区路网图),在线进行个性化地图的定制服务,定制后的样式通过定制服务可同步到地图样式数据中,用户可以直接发布并使用定制好的地图解决方案。地图定制化效果如图6。
图5 动态矢量地图展示系统
图6 在线个性化定制效果
通过这种方式,可实现一种所见即所得的地图配置形式,避免了传统web地图每次展示细节的调整均需要专业人员进行配图、编译和发布的过程,明显提高了个性化定制与服务水平。
矢量瓦片技术采用“金字塔”模型和高效的切片存储格式,可以在前端按需灵活绘制、渲染并展示,并且能进行地图样式的灵活配置,能够有效解决栅格瓦片地图存在的切图体积过大、切图效率低、地图样式单一、对高分屏支持不足的问题,为今后PGIS平台的升级和发展提供有益经验。