首页 > 代码库 > 谈谈地图中的道路绘制
谈谈地图中的道路绘制
GIS属于可视化领域。一所谓可视化技术是利用计算机图形学和图形处理技术,将数据转化成图形或者图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。个人理解地图中也有几个关键点:
- 原始数据可以是图像也可以是矢量数据,如我们底图是点、线、面等矢量数据,卫片、街景是图像数据。
- 渲染即显示到屏幕上,现在各家手机端都是基于opengl,不论图形还是图像最终显示到屏幕都必须像素化(光栅化)。
- 交互性 地图APP中分量最重的就是交互,背后隐藏的巨大的需求。
目前地图中各种Feature数据,楼块是真正三维的,不过只是一些多边形垂直拉出一定高度形成一个挤出体,但是没有贴图。GIS中绝大多数数据还是以二维为主,面数据绘制最简单,标注点数据在预处理时做重叠避让处理绘制时不会相互遮挡,只有线之间有遮挡和层次关系。那么苍白的2D道路数据如何描述现实世界中复杂的道路交错关系呢?尤其北京的桥最为出名,XX桥上的立交关系非常之重要。涉及下面两个基本技术:
1. 道路立交、平交关系表达
地图中路线用一个有宽度的多边形带表示,有背景描边和前景填充组成。
图中椭圆框为立交关系,蓝色框位置为平交关系。假设A级路重要度大于B级路。
立交关系比较简单:
B级路_border,B级路_fill;
A级路_border,A级路_fill
最终可实现A级路在B级路之上。
平交关系:
丁字形路口两处平角关系绘制过程如下:
从左到右绘制顺序为:
A道路_border(灰色),
B道路_border(橙色);
A道路_fill(白色),
B_道路_fill(黄色)
最终A、B道路平交效果如第四个子图。
2. ZLevel立交数据
现实世界是3D的,地图是2D的,那么地图可以理解成现实世界的顶视图。顶视图的信息一定没有自由透视模式的信息多。不管道路立交关系有多少层,顶视图中获取的图像只能看到相交处处于最高层的道路。
ZLevel数据正是这么一份补丁数据,它关联了道路相交处于最高层的道路路段。如下图是定慧桥的卫星图:
它的ZLevel数据和路网如下图,黑色路线为道路数据,蓝色粗线为ZLevel数据。
最终道路绘制时候,先画路网。然后再绘制ZLevel数据。最终实现道路的立交层次的表示。
3. 各家地图道路绘制效果对比
左图是谷歌地图道路:立交关系与现实一致道路有点宽且没有箭头,“定慧桥”文字一直没出现,这么重要的标注。
右图是腾讯地图:立交关系与现实一致,箭头稍密,有定慧桥标注。
左图是百度地图道路:立交关系蓝色椭圆标注的地方不对,有箭头,有定慧桥标注。
右图是高德地图道路:没有立交关系都是平交,应该是没有使用ZLevel数据,有箭头,有定慧桥标注。
地图这东西,你越欣赏越懂得欣赏!
谈谈地图中的道路绘制