小比例尺下的铁路绘制

地图 Apr 30, 2016

地图以一种图形化的方式来描述我们生活的世界,它体现了我们对周边环境的认识和了解。

GeoHey地图更新:道路和文字渲染效果增强一文中,我们提到了制图综合的手段,诸如简化、平移、缩小、夸张等对于地图制作的重要性。对同样大小的地图,小比例尺地图展现的地理范围更大,因此需要把地理要素简化,否则大范围内的所有要素堆叠在一起既显得主次不分又影响美观。

下面我们讨论一下小比例尺下的铁路如何进行制图综合

迷之图例

铁路不同于一般的道路,它有着特殊的黑白相间的样式,如下图的印刷地图所示:
alt

然而,想在上图所示的比例尺上绘制出地铁样式来却不容易。

我们可以用点线的方式来绘制铁路,比如设置沿地铁线5个像素白,5个像素黑,但是这要求在该比例尺下的地铁线的长度至少需要10个像素,换算成地理单位,就是需要地铁线长度至少为50公里。实际上绝大多数铁路的长度都大于50公里,但是由于我们使用了OpenStreetMap的铁路数据,这些铁路大多数都是用户自己上传的,同一条铁路分成了许多段,因此绝大多数都不满足这个条件。

下图显示了不做处理按照点线方式绘制铁路的效果,由于铁路太短,基本上看不出黑白相间的铁路样式,总体的效果就是一团糟:
alt

数据处理

因此,我们的首要任务是把属于同一条铁路的要素给按顺序连起来。是否属于同一条铁路可以通过要素的名称字段来确定,但是由于OpenStreetMap数据有很多的要素名字为空,我们还需要处理名字虽然不匹配但是实际上也是同一条路的情况,这可以通过空间相交运算来判断。下面是算法的流程图。
alt

上述算法中 find_start() 方法借助R树寻找没有访问过的要素作为新的道路的起始,而 find_connected(start_feature) 方法则寻找与 start_feature 相连的要素,寻找的过程中需要考虑道路名称存在和不存在的两种方法。由于 find_start() 方法找到的起始道路可能不是真正的起始道路,因此需要进行多次迭代直到 conn_railrailway 相等,此时表明已经没有可以继续合并的道路了。下面显示了道路合并后绘制的效果,比之前的情形好多了:
alt

优化处理

对于合并后的道路,我们继续计算每条道路的长度,并且过滤掉长度小于50公里的道路,这些小的铁路往往是一些不重要(铁路的长度是否和重要性相关?)或者是作为连接作用的铁路,过滤掉这些铁路能使地图整体更清晰。下面是过滤掉细碎铁路后的效果:
alt

欢迎从GeoHey获取地理和位置相关的数据、知识、服务

访问网站 http://geohey.com

联系我们 contact@geohey.com

长按关注公众号

Atlas

To see what can we bring to the world.

评论正在加载...
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.
分享