渲染重叠线


24

我正在制作一张包含有关公共交通信息的地图:公共汽车,电车等。该地图将包含一个图层,其中包含例如电车路线。每条线都有其自己的颜色,并由线串几何图形表示。

问题是,许多线路有重叠的部分,其中有多个电车线路覆盖同一部分。为了向用户展示此内容,我希望这些线条彼此平行,而不是相互绘制。例如,请参阅Google Maps如何显示纽约地铁线路。

我怀疑这是制图学中一个非常普遍的问题,但不知道我应该搜索什么术语。

我使用PostGIS / GeoServer / OpenLayers作为堆栈,但是任何开源解决方案都是可以接受的。


地铁也有同样的问题。您是否找到/实施了可接受的解决方案?
Geert-Jan

很不幸的是,不行。客户没有优先考虑这一点,我们进行了相当讨厌的修改以防止重叠。
利德曼

Answers:


7

如果您有兴趣了解更多有关该领域的知识,则该问题称为制图位移,它是制图综合的一个方面。

几篇文章讨论了位移和解决问题的方法:


“移位”!那是我想记住的另一个术语。我们在FME中有一个工具(抱歉-不是开源的),该工具“使用尼克森位移算法的变体来解决特征之间的邻近冲突”-那么尼克森的Google也许会看到结果吗?
马克爱尔兰

Scholar.google.com/…抛出了指向原始文章的链接(薪酬微薄),很多人都在引用它。一些相关文章是免费的,看起来很有趣。
伊恩·特顿

4

这个问题是制图综合中非常典型的问题。为此,存在自动化的方法,但是尚无可用的实现。

基于“ Beams ”和“ Snakes ”的方法给出了解决网络数据制图冲突的有效结果(另请参见scw给出的参考文献)。这是关于道路数据的梁算法的一些结果:

之前:

替代文字

后:

替代文字

另请参阅本文和此演示文稿,它们解释了如何进行此转换

编辑:我从未测试过,但似乎GRASS中有一些与蛇有关的东西。看这里


1
如果两个线段(母线)的几何形状完全相同,这是否可行?
昏暗

1
它适用于过于封闭的线条,对于完全重叠的线条,效果不佳。需要进行调整。
julien 2010年

1

我不知道解决方案,但我认为您要寻找的术语是“冲突解决”,这是地图概括的主题。谷歌搜索“地图泛化冲突”显示了一些有趣的信息-但我不知道有很多实际用途。


1

在当前的实现中,通常可以找到“偏移”或“错位”。使用当前的堆栈,自动实现平行线看起来有些困难:

总结一下:我知道的最简单的方法是使用UMN Mapserver和那里的Offset值。Mapfile的样式示例:

STYLE
 SYMBOL 7
 OUTLINECOLOR 160 160 160
 SIZE 5
 OFFSET 2 -99 # <-- This will offset the line to the right.
 ANTIALIAS FALSE
END # STYLE

0

如果要绘制重叠的线层,则可以使用多个选项来允许查看者查看所有线。

  1. 宽度-您可以更改图层之间的线宽,并将较宽的线放在底部。
  2. 不透明度/透明度-您可以使各个线层部分不透明,因此您可以“透视”各个层。
  3. 偏移-您可以将代表实际线要素的线符号偏移到线的实际几何图形的一侧。各个图层可以在不同的方向上以不同的数量偏移,以允许查看所有图层。
  4. 线可以由一系列点符号表示,这些点符号之间具有定义的间隙。通过更改符号,符号颜色,符号大小以及不同线层之间的间距,应使每个单独的线层都可区分。

我不使用GeoServer,但我知道MapServer具有执行所有这些功能的功能。GeoServer也可能会这样做。


听起来我们想要#3,但仅适用于重叠的功能。那可能吗?
mwalker 2010年

2
MapServer以及其他Web地图服务器和GIS可以解决标签的冲突,但是我不知道有什么功能可以让您即时执行此操作。当然,如果您的数据是相当静态的,则可以对数据进行预处理,以识别不同图层的线相交(或在公差范围内)的位置,并基于此对数据进行分类。然后,您的地图渲染引擎可以根据数据中的属性应用“位移”符号系统。
DavidF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.