labelObj用来实现标注,可以在地图上显示数据中的某一个字段的字段值,标注用到的字段名字需要在layer对象中使用LABELITEM定义。Mapserver将label也视为渲染,一种特殊的渲染—文字渲染,它与style类似,不同的是style用来渲染要素的几何图形特征,label用来展示几何要素的某个字段的属性信息,二者处于同一级别,都必须包含在class对象之中使用。如下是一个包含labe和style对象的class示例:
CLASS
NAME "Cities"
EXPRESSION "1"
LABEL
ANGLE 0.000000
ANTIALIAS TRUE
FONT "sans-italic"
MAXSIZE 256
MINSIZE 4
SIZE 8
TYPE TRUETYPE
BUFFER 0
COLOR 255 0 0
FORCE FALSE
MINDISTANCE -1
MINFEATURESIZE -1
OFFSET 0 0
OUTLINECOLOR 255 255 255
PARTIALS FALSE
POSITION AUTO
#MAXLENGTH 5
WRAP " "
ALIGN center
END
STYLE
ANGLE 360
COLOR 0 0 0
SIZE 8
SYMBOL 2
WIDTH 1
END
TEMPLATE "ttt_query.html"
END
通过以上的Mapfile片段可以看出label对象与style对象同级,都包含在class之中。Label对象的属性非常丰富,这里也仅仅列出了一部分。Label对象的作用域与style对象一样,也是由class中的Expression来控制。上例中的EXPRESSION "1"含义就是该class只对classitem字段值为"1"的要素有效,因此该label对象只负责标注classitem字段属性值为"1"的要素,通过与class对象的配合,可以实现同一图层中不同类型的要素赋予不同的标注样式。
在csharp_mapscript中使用labelobj对象也非常简单,有如下几行代码可以方便的获取以及使用labelobj:
//直接从classobj中获取
classObj pClassObj = new classObj(null);
labelObj pLabelObj = pClassObj.label;
//新定义labelobj
labelObj pLabelObj = new labelObj();
//设置各种参数
pLabelObj.angle = 1;
pLabelObj.autofollow = 0;
pLabelObj.buffer = 1;
Label对象的各种属性参数非常丰富,可以实现多种标注特效,下面介绍一下label中几个比较常用参数的含义:
ALIGN [left|center|right] 5.4版本中新增。控制多行标注文本的对齐方式(如何产生多行文本标注参见WARP),要注意的是目前对齐运算的精度还不高,效果可能很差。
WRAP [character] 实现多行标注,该参数定义一个换行字符,mapserver将该字符视为换行符。这样会生成多行文本标注。还可以与MAXLENGTH参数配合使用,可以在MAXLENGTH指定数量的字符之后才执行换行操作。
例如:WRAP ‘a’。表示在标注中遇到字母‘a’,就会将‘a’视为一个换行符,标注在‘a’处打断产生一个新行。
ANGLE [double|auto|follow|attribute] 实现旋转标注,该参数定义绘制标注时使用的角度,以度为单位。
l AUTO 允许MapServer自动计算旋转角度。只对LINE图层有效。
l FOLLOW 4.10版本中新增,允许MapServer计算要素的线性特征,并用沿该线性特征来绘制标签。例如:标注一条弯曲的道路时,设置了该参数标注就会沿道路的走向分布。
l [Attribute] 5.0版本中新增。设置属性表中的一个字段,其字段值作为标注的角度。属性字段名必须包含在中括号[]中。例如:如果你的shapefile的dbf表有一个字段名为“MYANGLE”,其字段值是每一个要素的角度值,那么你的LABEL对象可以包含:
LABEL
COLOR 150 150 150
OUTLINECOLOR 255 255 255
FONT sans
TYPE truetype
SIZE 6
ANGLE [MYANGLE]
POSITION AUTO
PARTIALS FALSE
END
ANTIALIAS [true|false] 设置标注文本的抗锯齿。
COLOR [r] [g] [b] | [attribute] 设置标注的颜色。
FORCE [true|false] 强制显示该CLASS中的标注,忽略碰撞检测,缺省值是false。
TYPE [bitmap|truetype] 标注使用的字体类型。bitmap字体的绘制速度最快,然后是TrueType字体。TrueType字体可支持缩放,用的比较多。如果你使用了TrueType字体,一定要设置FONT参数。