小比例尺下的铁路绘制

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

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

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

迷之图例

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

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

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

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

数据处理

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

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

优化处理

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

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

访问网站 http://geohey.com

联系我们 contact@geohey.com

长按关注公众号