矢量瓦片在线制图的地图标注研究
2017-10-21朱秀丽周治武
李 静,朱秀丽 ,周治武
(1. 中南大学,湖南 长沙 410083;2. 国家基础地理信息中心,北京 100830)
0 引 言
随着网络地图技术的不断发展、地理数据获取方式的增多,地图制图与可视化领域面临着用户大众化,地图数据多样化海量化,地图样式个性化的挑战。基于矢量瓦片的在线制图技术[1]为这些难题提供了新的解决方案:将海量多样性的地理数据缓存为矢量瓦片金字塔,然后由地图渲染引擎(Mapnik等)按照配置样式实现地图的实时在线渲染。将多类型的地理数据统一到矢量瓦片,化整为零,解决了数据海量化多样化的问题,依照自定义地图样式的实时渲染满足了用户大众化、地图样式个性化的需求。但是基于矢量瓦片的在线制图技术还存在许多问题,尤其是注记的标注存在重要注记被次要注记压盖,同级注记之间互相压盖等问题,严重影响了地图的可读性和信息传递功能,因此,优化注记的标注,提高注记标注质量具有重要意义。本文基于矢量瓦片的数据结构及Mapnik地图渲染引擎,研究了注记的标注问题。
1 地图注记的特性
1.1 层次性
地图注记的主要作用是反映地理对象的名称和某些数量以及质量特征[2],由于其描述主体—地理事物和现象具有明显的层次概念,因此地图注记也具有明显的层次性[3]。地图注记的层次性体现在两个方面:重要性与类别。在重要性方面,由于地图图幅有限、地图的负载量一定,要在有限的图幅范围内表达尽量多的地理信息,必然要对所要表达的地理要素进行取舍,选择较大的具有重要意义的进行标注,忽略较小的不重要的地理要素[4]。在类别方面,相同类别要素的注记风格要统一[5],不同类别要素注记之间要有明显的差异,便于人们的识别与判读。
1.2 顺序性
注记配置也具有明显的顺序性,包括不同类别要素注记配置的先后顺序和同种要素注记配置的先后次序。不同类别要素的注记按照要素对地图主题的重要程度从高到低进行配置,而对于同类要素的注记,优先考虑位置选择余地较少的,后考虑位置选择余地较大的[3]。
1.3 拓扑关联性
地图注记是对地图中图形要素的解释与说明[6],注记与图形符号之间具有明显的拓扑关联[7]。面状要素的注记要尽量在面状要素以内,线状要素的注记要沿着线要素的走向,不允许一组注记分放在线状要素的两侧,点状要素的注记要保持与要素的紧密联系,通常是环绕点位进行[8]。
2 矢量瓦片注记配置方法研究
本文以Mapnik作为地图渲染引擎,按照Mapnik XML规范[9]配置地图样式渲染矢量瓦片生成地图。对于注记的标注配置,Mapnik具有以下策略:①地图注记显示的优先级别受两方面控制,一是矢量瓦片中注记图层的叠放顺序,二是Mapnik XML样式配置文件。后者只能控制显示的开关,前者只能按照从上到下的顺序标注显示开关打开的注记,当注记绘制发生冲突时,后绘制的注记可能因为在图面上找不到空间而不再标注[10]。②注记分为两种符号:盾标符号(ShieldSymbolizer)和文本符号(TextSymbolizer)。盾标符号是在一个盾牌中标注文字或数字说明,可用于表示线注记和点注记,如道路编号。文本符号的注记方式(placement)又分为点文本注记(point)和沿线文本注记(line)。对于点文本注记还可以设置注记避让算法(placement-type)和环绕点位的候选标注位置(placements)来处理注记冲突,在当前位置渲染某个标注时,如果与已有注记发生冲突,就按照候选标注位置中的次序逐个尝试[11]。
为了实现更加良好的注记显示效果,本文针对注记的层次性、顺序性和拓扑相关性并按照Mapnik的注记配置策略分别对注记进行基于分类与分层的注记配置、基于注记优先级的图层顺序配置和基于注记类型的分类优化配置,总体框架见下图。根据Mapnik的注记配置策略,设置优先级是调控注记显示顺序的基本手段,且优先级的配置以图层为基础,所以首先进行基于分类与分层的注记配置,然后实现基于分类与分层的注记配置,包括图层之间优先级的配置与同层不同类别注记之间优先级的配置。接着从拓扑相关性方面分别对点注记和线注记进行配置与优化,从细节上对注记进行控制。各方法的具体操作与实现如图1所示。
图1 总体框架图Fig.1 The total frame diagram
2.1 基于分类与分层的注记配置
依据地图的表达内容将注记分为:地名注记、道路注记和水系注记3个类别。再按照注记所表达要素的几何类型和形状将各类别再细分为点注记和线注记:点状要素和线状要素的注记分别为点注记和线注记,如地名点和道路的注记;对于面状要素的注记,由于面状要素的形状大小各异,对于面积小、形状扁圆的面状要素,如小的湖泊、面状水库,通常用点注记表示,并把面的中心点当做点注记的定位点,而对于狭长(如面状河流)或面积较大、形状不规则的面状地物(如面积较大的湖泊、行政区域)在中心点位置标注不能反映面状要素的空间分布形态特征、延伸方向和范围,通常提取该面状要素的骨架线作为线注记的定位参考线[7]。经过两次分类,地图注记被分为地名点注记、行政区域线注记、道路线注记、水系线注记和水系点注记5个图层。
2.2 基于注记优先级的图层顺序配置
在注记的顺序性方面,不同注记图层的优先级别可以通过控制图层在矢量瓦片中的叠放顺序实现,其中地名点注记和行政区域线注记更加重要,所以地名点注记和行政区域线注记优先级最高,其次是道路线注记和水系线注记,然后是水系点注记;而同一注记图层中不同小类之间也存在着优先级别的差异,如地名点注记图层中省会城市注记的优先级要高于普通市、县,其注记优先级要通过同图层注记数据写入矢量瓦片的顺序和Mapnik XML地图配置样式控制。因此在写入矢量瓦片之前,先将注记图层按照优先级从高到低的顺序从上到下依次叠放,并将同一注记图层的注记数据按照优先级从高到低进行排序,依次写入。
2.3 基于注记类型的分类优化配置
为得到较好的显示效果,根据线注记和点注记的各自特性,利用postgis工具对注记图层进行一系列的处理。
对于线注记层,要经过如下处理:
①注记定位参考线的提取。道路线注记是从道路线图层提取含有名称与道路编号的要素,水系线注记的定位参考线是提取有名称的线状河流和面状河流的骨架线,行政区划线注记是提取行政区划面的骨架线。
②合并处理。线注记的绘制以线段为单位,当线段比较破碎而注记字段较长时,会出现只标注部分文本的情况,因此要依据名称属性合并定位参考线中的破碎的线段。
③化简处理。定位参考线只是标示注记的走向,并不需要很高的精度,为了减少瓦片的大小,利用postgis的要素化简函数(st_simplify)对其进行抽稀处理。
对于点注记,通过配置环绕点位的标注位置,虽然可以从一定程度上解决注记冲突问题,但是每次都从同一位置开始尝试很容易导致注记聚集分布,不仅影响注记的标注,还不利于地图的美观[12]。为了使注记分布的更加合理,为每个注记添加一个属性dir,其属性值为随机函数(random)产生的一个随机数(0或1)。在配置样式时,为每个随机数设置一个候选标注位置序列,如当dir为0时,设置注记的候选标注位置序列为N、E、S、W,而当dir等于1时,将注记的候选标注位置序列设为N、W、S、E。这样可以使注记标注位置的选择具有更多的随机性,让注记分布更加均衡。
在点注记与线状要素的拓补关系方面,地名注记应尽量不压盖主要道路且最好与被注记要素位于道路的同侧,而当注记点位于两条道路之间时优先考虑对重要程度更高的道路的避让。为了达到这个效果,为点注记图层添加一个属性字段,表示该点注记与离它最近的主要道路(高速、国道、省道)形成的方位角,然后按方位角的大小,设置注记的候选标注位置,见表1。为了使用方便,在postgis中添加一个自定义函数计算其属性值,计算过程为:在该点(P1)的半径为100 m的缓冲区内查找一条与它距离最近且道路级别较高的主要道路,然后在该主要道路上寻找一个与P1点距离最近的点P2,并计算P2到P1连线的方位角(0~360)。
表1 方位角与候选标注位置的关系Tab.1 The relationship between the azimuth and placemnt
3 实验及结果
将收集到的公开地理数据进行处理,按照上述方法进行分类、分层,图层顺序配置并按照注记类型分别对点、线、面注记分类优化配置,然后依据配置将其切割为矢量瓦片,并依照Mapnik XML样式规范自定义地图样式,经Mapnik地图渲染引擎渲染后得到的显示结果与优化前的地图显示效果见如图2所示。
图2 (a)优化后的注记效果Fig.2 (a)The effect after label optimization
图2 (b)优化前的注记效果Fig.2 (b)The effect before label optimization
对比优化前和优化后的注记标注显示效果(尤其是红圈部分),可以看出地名注记在标注时对主要道路(中间的两条)实现了规避,注记不再压盖主要道路,而是标注于道路两侧且注记与被标注元素位于同侧,达到了比较好的地图显示效果,表明该方法可以实现满足拓扑关系的注记标注。
4 结束语
本文针对矢量瓦片在线制图过程中的注记自动标注问题,从矢量瓦片的组织和Mapnik XML地图样式配置两方面研究,提出了一系列注记配置优化方法。实验结果表明,经该方法优化后的注记标注在注记冲突和美学平衡方面都有较大提高,且简单易行,可操作性及实践性比较强。但是矢量瓦片制图在实际应用中还存在很多其他问题,如地图边缘的注记被切割、注记的自动化标注对瓦片依赖较大等。下一步的研究工作:解决地图边缘处注记被切割的问题,减少矢量瓦片方面的操作,从算法方面改进Mapnik渲染引擎的注记自动配置功能。