MS RFC 112:在MaxOverlappangle Colision之后重试“跟随”标签定位

日期

2014/10

作者

托马斯堡

联系

thomas.bonfort@gmail.com

状态

实施

版本

MAPServer 7.2

1。现状

用于放置“follow”标签的当前算法有以下限制:

  • 当标签的两个后续字符的相对角度超过定义的“maxoverlappangle”时,标签将被无条件丢弃。

  • 用于计算字符位置的函数依赖于中断代码流的“goto”

  • 重复标签的放置仅在使用repeatInstance时对奇数次重复有效,即即使有两个标签的空间,也只会呈现一个标签。

2。建议的增强

  • 该算法将进行扩展,以考虑并尝试纠正当maxoverlappangle开始时发生的交集,方法是确保这些交集仅在单词之间发生:

    • “space”字符上发生的冲突将被忽略

    • 当发生共缩聚时,将重试标签放置,并放置一个偏移量,使共缩聚落在一个空格上或字符串的开始或结束处。

  • 代码将被重构以避免使用goto

  • 将修改放置算法以优化处理偶数个标签重复:

  • 之前:

-------label--------
  • 后:

--label------label--

2.1问题/限制

  • 默认情况下是否应启用重试行为,和/或是否可以将其停用?计算和测试重试的偏移量并不昂贵,性能方面的影响应该最小,并将导致更多的标签被放置。

  • 允许的最大偏移量是否可配置?目前似乎不需要,所有关于最大偏移量的相关信息都包含在行长度、标签长度和repeatDistance中。

2.2向后兼容性

除了事实创建的地图之外,没有其他预期的地图可能包含更多/不同的标签。

2.3性能影响

有限的。在冲突后重试标签不是CPU繁重的操作。计算glyph高级和/或格式化文本运行等代价高昂的操作不会在每次重试时重新运行。

三。实施细节

3.1受影响的文件

  • mapprimitive.c:实现重试行为-计算重试偏移量

3.2跟踪问题

第四章。投票历史

+史蒂文、丹尼尔姆、斯蒂芬、佩林、米克斯、斯蒂芬、托马斯布