- +1
地图湃 | 技术帖告诉你,地图的细节是如何被简化的?
地图既是一种工具也是一种艺术。简化地图轮廓和标注(术语为制图综合,cartographic generalization)的主要目的是使之准确、简洁、美观,以及突出重点。当画幅(比例尺)变化的时候,很多细节不可能一一表现在图上。
图片来源:加拿大拉瓦尔大学当比例尺是1:1000的时候,地图上可以保留很多细节,如所有路径和建筑们的轮廓。但当比例尺变成1:27176时,如果再保留这么多细节,地图就一团乱麻,什么也看不清了。少即是多,只有削去了不重要的枝枝叶叶,主干的信息才能被突出展示,地图才能达到它应有的效果。
当然,比例尺并不是地图简化的唯一原因。每一幅地图都有自己的目的,对于细节的要求也不一样。例如这张反映“一带一路”的地图:
图片来源:中美聚焦经常看地图册的人一眼就能看出很多“错误”:北京的位置貌似偏了些,琼州海峡没了,马尔代夫和琉球也没了,日本那几个岛连在一块了,等等。但是,这张图的目的是展现一带一路,并不是为了告诉人们马尔代夫在哪里、北京在哪里。弱化了细枝末节,更能强调出“一带一路”的主题。试想一下,如果这张地图把陆地轮廓画得特别详细,还加上中国的省界、甚至长江黄河,那路线规划是不是就被冲淡了?
接下来我们回到本篇标题:地图的细节是如何被简化掉的?
大致有四种简化方式:
一、轮廓简化 ( Simplified )。通过去掉一些比较次要的转折,把复杂的轮廓变得平滑一些。例如中国东南沿海的地图,在比例尺有限的情况下可以把曲折的海岸线进行模糊化处理。
二、融合 ( Fused )。把距离接近、性质相同、相关性大的地物合并为一个。比如上面那张“一带一路”的地图,日本还有菲律宾的几个岛被合并了,就是一例。
三、筛选 ( Omitted )。把不重要的东西扔掉,保留最关键的。比如地图上原本标注有北京、天津、石家庄和廊坊,但实在画不下的时候,就选择性地把廊坊扔了。
四、错位( Displaced )。对于地理精度没那么高的地图(一般是示意图),如果某一个区域的信息太过密集而周围区域空白较多,可以适当(注意是适当)地让地理位置错位。或者为了地图的整体效果,小幅度的位移也是允许的。比如上面“一带一路”地图中的北京。
下面重点说一下轮廓简化。绘制轮廓一般用的是矢量数据,所以这里讨论的地图轮廓简化方法,实际上也是矢量数据的压缩方法。不管多复杂的曲线,我们也认为它是由许多线段组成的,线段两端是一个个的数据点。越“圆滑”的轮廓,数据点就越多。常见的简化方法有这几种:1. 简单粗暴 —— 隔点法
隔点法就是在矢量曲线的一系列点中,每隔n个点选取一个来保留,其余没选中的点都删除。比如说下面这张图的曲线:
现在我每隔两个点连接曲线,剩下的点删除,就把曲线简化成了紫色的这条:如果每隔3个点连接,则简化后的曲线是这个样子的:这种做法的优点是算法简单、操作简单,但是缺点是比较重要、有特色的数据点很有可能会被漏掉。在原本的曲线就不那么平滑的情况下,这种简化方式很可能造成比较大的形变,例如地图上的半岛或者海湾,很可能直接被剪切掉。2. 步步为营 —— 垂距法
这种垂距法是一种比较常用的办法。它是按照某个指定的方向,一步一步地简化曲线。比如下面这张图:首先我们要指定一个参数长度,比如图中的红色线段。
开始从左到右地简化这条曲线:选择图中1、2、3这三个点,连接点1和点3,然后通过点2作垂线和连线相交。测量垂2的长度,图中垂2的长度大于参数,因此保留点2。
然后挪位到2、3、4这三个点,连接点2和点4,画出垂3。比较垂3和参数长度:这里的垂3还是大于参数,因此点3也保留。接下来是3、4、5这三个点,作出垂4。这里,垂4的长度是小于参数的,因此点4就要删除。以此类推向右进行下去。
3. 宏观调控 —— 分裂法分裂法还有一个高大上的名字叫做道格拉斯 • 普克算法 ( Douglas–Peucker algorithm ),也是一种用得比较多的方法。它和垂距法的相似之处是都需要设定一个参数来进行比较。但是它们也有很大的不同。例如,垂距法是从左到右(或从右到左)一步步地进行曲线简化,而分裂法是把曲线看做一个整体,来进行“宏观调控”。它的具体操作如下:
初始状态是下面的这条曲线:
步骤一:从整体入手,首先选取参数“红色线段”,然后连接整条曲线的首尾两个点。连接之后,找出离这条连线距离最远的那个点,比较这个点到连线的垂距和参数线段。图中的最远点是明显大于参数的,因此这个点被保留。步骤二:分别连接刚才的保留点和起点终点,再找出两条连线区间范围内的最远点,并将它们的距离和参数比较。这里,最远点1的距离是小于参数的,因此在这个区间内的所有点都要被删除掉。而最远点2的距离刚好大于参数,因此最远点2也成为了被选取的保留点。步骤三:亮色实线为刚才筛选后形成的简化线段。用虚线连接新老两个保留点,以及新保留点和曲线终点。同理,分别找出两个区间内的最远点以及距离。这里的最远点1的距离小于参数,因此这一区间的所有点都删除。最远点2的距离大于参数,则成为新的选取点被保留。同理再重复上述步骤四次:(本文经作者授权转载,内容略有删减,原文链接为:https://www.zhihu.com/question/38347271)
- 报料热线: 021-962866
- 报料邮箱: news@thepaper.cn
互联网新闻信息服务许可证:31120170006
增值电信业务经营许可证:沪B2-2017116
© 2014-2024 上海东方报业有限公司