MS RFC 49:符号学、标签和制图改进

日期

2009/01/26

作者

托马斯·邦福特,斯蒂芬·莱姆

联系

Thomas.Bonfort在Camptocamp.com,Steve.Lime在dnr.state.mn.us

状态

通过并实施

版本

MAPServer 5.4

目的

这个RFC对mapserver呈现或mapfile语法进行了一些小的添加或更改。

这些变化都是在RFC45中进行的,但由于RFC45中的一些东西在不久的将来缺乏资金,所以被提取出来以保持进展。

尺寸和宽度的分数值

agg可以处理分数宽度和大小,但StyleObj将这些属性定义为int。这不算什么,因为gd和agg都不直接使用这些值,而是在必要时使用scalled values with are cast或rounded to an int。

https://github.com/MapServer/MapServer/issues/2766

用于样式和标签的minscaledenom/maxscaledenom

这些关键字可以通过避免创建多个层或类来减少映射文件的大小和维护。

https://github.com/MapServer/MapServer/issues/2865

大纲宽度在线层

目前不可能绘制一条轮廓线,其宽度取决于比例。我们建议在样式块中添加outlinewidth关键字,该关键字指示应该围绕主线颜色呈现的像素宽度。

这一点的实现在mapdraw.c中。当一条线的样式块有一个outlinewidth时,底层形状实际上被绘制了两次:一次是根据outlinewidth调整宽度,正常情况下绘制一次。保留行的当前缓存机制。

示例用法:

LAYER
  TYPE LINE
  SIZEUNITS meters
  CLASS
    STYLE
      COLOR 255 0 0
      OUTLINECOLOR 0 0 0
      OUTLINEWIDTH 1
      WIDTH 25 #this is in meters (ground units)
      MINWIDTH 1 #minimal width (in pixels) for far zoomed maps
      MAXWIDTH 20 #maximal width (in pixels) for close zoomed maps
    END
  END
END

无论地图的范围或比例如何,此线条层都将始终由带有一个像素黑色轮廓的红线呈现。

https://github.com/MapServer/MapServer/issues/2865

将标签添加到layersobj

备注

此功能尚未实现

这样就可以为所有类(类似于模板)定义默认值。一个阶级标签将成为先例。

https://github.com/MapServer/MapServer/issues/XXX

受影响的文件

  • mapfile.c

  • mapdraw.c(线条上的大纲宽度,样式对象上的比例)

  • mapserver.h

  • maplabel.c(标签上的比例)

文档

关键字的文档将加载到主mapfile语法文档中。

MapScript

将为mapscript的可用性添加关键字的getter和setter。

向后不兼容

无人期待

评审期意见

  • LabelMethod建议被撤回

  • 模式、间隙、偏移的分数值:6.0的一个很好的候选者(当模式和间隙移动到StyleObj时?)

  • 人们一致认为,增加参数化比例,有助于主题映射(例如大小与特征属性成比例)

    • 通过允许简单表达式,例如大小(18+[poptotal]*((43-18)/(5000-30000))。

    • 或者在层级别添加伪项:::

      PSEUDOITEM
       'mySize' (mrange([itemname], mininput, maxinput, minoutput,
      maxoutput))
       'myText (commify(round([itemname], 2)) + ' ac')
      END
      
      LABELITEM 'myText'
      CLASS
       STYLE
        COLOR 255 0 0
        SIZE [mySize]
       END
       LABEL
        ...
       END
      END
      

    此增强将在特定的RFC中解决。

投票历史

+1:史蒂文,翁伯顿,塔马斯,史蒂文,丹尼尔(,阿兰布)