我正在制作一张包含有关公共交通信息的地图:公共汽车,电车等。该地图将包含一个图层,其中包含例如电车线路。每条线都有其自己的颜色,并由线串的几何形状表示。为了向用户展示此内容,我希望这些线条彼此平行,而不是相互绘制。例如,请参阅Google Maps如何显示纽约地铁线。
我使用PostGIS / GeoServer / OpenLayers作为堆栈,但是任何开源解决方案都是可以接受的。

评论

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

抱歉不行。客户没有优先考虑此问题,我们进行了相当讨厌的修改以防止重叠。

#1 楼

如果您想了解更多有关该领域的知识,则将问题称为制图位移及其制图一般化的一个方面。

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

巴德,马蒂亚斯。 2001年。能量
特征最小化方法
地图中的位移
归纳。
Steiniger,S Tefan S和S Iegfried
M Eier。蛇:一种在地图上平滑线条和置换线条的技术
概括:1-11。
Ware,Mark J和Christopher B
琼斯。 1998年。
使用迭代方法改进地图通用化中的冲突解决方法。 GeoInformatica 2,编号。 4:
383-407 +。


评论


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

–马克·爱尔兰
2010年8月26日在17:18

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

–伊恩·特顿♦
2010年8月26日在17:26

#2 楼

这个问题是制图综合中非常典型的问题。为此,存在自动化的方法,但尚无实现方法。 )。以下是关于道路数据的梁算法的一些结果:

之前:



之后:



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

评论


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

– Underdark♦
2010年8月31日上午10:15

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

–朱利安
2010年8月31日,11:29



#3 楼

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

#4 楼

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



Geoserver的SLD几何转换功能“偏移”似乎不等于您可以在UMN Mapserver地图文件中指定“偏移”。
PostGIS不提供平行线-默认情况下-也不提供。 (请参阅相关问题:如何在PostGIS中创建单侧缓冲区或平行线?)
我不确定是否可以用OpenLayers JavaScript达到令人满意的效果。

总结一下up:我知道的最简单的方法是使用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


#5 楼

如果要绘制重叠的线层,则可以使用多种方法让查看者查看所有线。在底部。
不透明度/透明度-您可以使各个线层部分不透明,从而可以“透视”各个层。
偏移-您可以将代表实际线要素的线符号偏移到线的实际几何图形的一侧。各个层可以在不同方向上以不同的量偏移,以允许看到所有层。
线可以由一系列点符号表示,这些点符号之间具有定义的间隙。通过更改符号,符号颜色,符号大小以及不同线层之间的间距,应该使每个单独的线层都可以区分。

我不使用GeoServer,但我知道MapServer具有功能来完成所有这些事情。 GeoServer可能也是如此。

评论


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

–mwalker
2010年8月26日在16:06

MapServer和其他Web地图服务器以及GIS可以解决标签的冲突,但是我不知道有什么功能可以让您即时进行此操作。当然,如果您的数据是相当静态的,则可以对数据进行预处理,以识别来自不同图层的线相交(或在公差范围内)的位置,并基于此对数据进行分类。然后,您的地图渲染引擎可以根据数据中的属性应用“位移”符号系统。

– DavidF
10年8月26日在17:50