首页 > 代码库 > 谈谈地图中的道路绘制

谈谈地图中的道路绘制

GIS属于可视化领域。一所谓可视化技术是利用计算机图形学和图形处理技术,将数据转化成图形或者图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。个人理解地图中也有几个关键点:

  • 原始数据可以是图像也可以是矢量数据,如我们底图是点、线、面等矢量数据,卫片、街景是图像数据。
  • 渲染即显示到屏幕上,现在各家手机端都是基于opengl,不论图形还是图像最终显示到屏幕都必须像素化(光栅化)。
  • 交互性 地图APP中分量最重的就是交互,背后隐藏的巨大的需求。

 目前地图中各种Feature数据,楼块是真正三维的,不过只是一些多边形垂直拉出一定高度形成一个挤出体,但是没有贴图。GIS中绝大多数数据还是以二维为主,面数据绘制最简单,标注点数据在预处理时做重叠避让处理绘制时不会相互遮挡,只有线之间有遮挡和层次关系。那么苍白的2D道路数据如何描述现实世界中复杂的道路交错关系呢?尤其北京的桥最为出名,XX桥上的立交关系非常之重要。涉及下面两个基本技术:

1. 道路立交、平交关系表达

地图中路线用一个有宽度的多边形带表示,有背景描边和前景填充组成。


图中椭圆框为立交关系,蓝色框位置为平交关系。假设A级路重要度大于B级路。


立交关系比较简单:

B级路_borderB级路_fill

A级路_borderA级路_fill

最终可实现A级路在B级路之上。

平交关系

丁字形路口两处平角关系绘制过程如下:


从左到右绘制顺序为:

A道路_border(灰色),

B道路_border(橙色);

A道路_fill(白色),

B_道路_fill(黄色)

最终AB道路平交效果如第四个子图。

2. ZLevel立交数据

现实世界是3D的,地图是2D的,那么地图可以理解成现实世界的顶视图。顶视图的信息一定没有自由透视模式的信息多。不管道路立交关系有多少层,顶视图中获取的图像只能看到相交处处于最高层的道路。

ZLevel数据正是这么一份补丁数据,它关联了道路相交处于最高层的道路路段。如下图是定慧桥的卫星图:


它的ZLevel数据和路网如下图,黑色路线为道路数据,蓝色粗线为ZLevel数据。

 

最终道路绘制时候,先画路网。然后再绘制ZLevel数据。最终实现道路的立交层次的表示。

 

3. 各家地图道路绘制效果对比

左图是谷歌地图道路:立交关系与现实一致道路有点宽且没有箭头,“定慧桥”文字一直没出现,这么重要的标注。

右图是腾讯地图:立交关系与现实一致,箭头稍密,有定慧桥标注。

左图是百度地图道路:立交关系蓝色椭圆标注的地方不对,有箭头,有定慧桥标注。

右图是高德地图道路:没有立交关系都是平交,应该是没有使用ZLevel数据,有箭头,有定慧桥标注。


地图这东西,你越欣赏越懂得欣赏!



谈谈地图中的道路绘制