生成地图时,MapServer会自动执行多项任务。 它标注要素并防止相邻标注之间的冲突。它提供了bitmapped和TrueType字体的使用。
MapServer 有一个非常灵活的标注引擎。它支持本地的位图和TrueType字体。字体缩放使用TrueType支持。标注的角度和放置可以被定制。
下面是地图文件(mfa4.map):
01 MAP
02 IMAGETYPE "PNG"
03 EXTENT -180 -90 180 90
04 SIZE 600 300
05 SHAPEPATH "/gdata"
06 IMAGECOLOR 255 255 255
07 FONTSET "../fonts/fonts.list"
08 LAYER
09 NAME "states_poly"
10 DATA "wcountry.shp"
11 STATUS OFF
12 TYPE POLYGON
13 LABELITEM "NAME"
14 CLASS
15 NAME "States"
16 STYLE
17 COLOR 232 232 232
18 END
19 LABEL
20 COLOR 132 31 31
21 SHADOWCOLOR 218 218 218
22 SHADOWSIZE 2 2
23 TYPE TRUETYPE
24 FONT "arial-bold"
25 SIZE 8
26 ANTIALIAS TRUE
27 POSITION CC
28 PARTIALS FALSE
29 MINDISTANCE 300
30 BUFFER 4
31 END
32 END
33 END
34 LAYER
35 NAME "states_line"
36 DATA "wcountry.shp"
37 STATUS OFF
38 TYPE LINE
39 CLASS
40 NAME "State Boundary"
41 STYLE
42 COLOR 132 132 32
43 END
44 END
45 END
46 END
带标注的 Mapfile
该文件包含字体别名字体位置由 FONTSET
关键字指定。
为了使用 shapefile 中的属性标记每个城区,需要确定名称作为 LABELITEM
关键字的值。当渲染一个国家要素时,该要素的 NAME
属性的值将被用来创建标注。
如果你想查看 Shapefile ,可以有几种方法。你可以在Excel打开相关的DBF文件或其他可以读取DBF文件的电子表格程序,你可以看到要素属性值。如果你只是想找出属性的名称,你可以使用的实用程序 dbfinfo,shapelib库的一部分。此外,应用程序 ogrinfo
提供地理信息,以及要素值。
每个城区都会被贴上标签,027至030指定的标签参数。Label对象以关键字Label开始和终止关键字END(030行)。层对象,LABELITEM值设置为‘名称’。选择属性NAME作为标签文本的来源。每个标签都将被绘制成黑色,其大小将很小。除了小,你可以选择小,中,大,或巨大。
MapFile 结构,通过对象,看起来像这样:
MAP (states_poly) LAYER----------|---------LAYER (states_line) (land) CLASS-----|-CLASS (water) |-CLASS STYLE-|-LABEL |-STYLE |-STYLE
文件变动如下:
6 | IMAGECOLOR 255 255 255 | 6 | IMAGECOLOR 255 255 255 | ||
n | n | 7 | FONTSET "../fonts/fonts.list" | ||
7 | LAYER | 8 | LAYER | ||
11 | TYPE POLYGON | 12 | TYPE POLYGON | ||
n | 12 | CLASSITEM "NAME" | n | 13 | LABELITEM "NAME" |
13 | CLASS | 14 | CLASS | ||
n | 14 | NAME "China" | n | 15 | NAME "States" |
15 | EXPRESSION "CHINA" | ||||
16 | STYLE | 16 | STYLE | ||
n | 17 | COLOR 232 30 30 | n | 17 | COLOR 232 232 232 |
18 | END | 18 | END | ||
n | 19 | END | n | ||
20 | CLASS | ||||
21 | NAME "Others" | ||||
22 | STYLE | 19 | LABEL | ||
20 | COLOR 132 31 31 | ||||
23 | COLOR 198 198 255 | 21 | SHADOWCOLOR 218 218 218 | ||
22 | SHADOWSIZE 2 2 | ||||
23 | TYPE TRUETYPE | ||||
24 | FONT "arial-bold" | ||||
25 | SIZE 8 | ||||
26 | ANTIALIAS TRUE | ||||
27 | POSITION CC | ||||
28 | PARTIALS FALSE | ||||
29 | MINDISTANCE 300 | ||||
30 | BUFFER 4 | ||||
24 | END | 31 | END | ||
31 | TYPE LINE | 38 | TYPE LINE | ||
n | 32 | CLASSITEM "NAME" | n | ||
33 | CLASS | 39 | CLASS | ||
n | 34 | NAME "China Boundary" | n | 40 | NAME "State Boundary" |
35 | EXPRESSION "land" | ||||
36 | STYLE | 41 | STYLE | ||
t | 37 | COLOR 32 32 32 | t | 42 | COLOR 132 132 32 |
38 | WIDTH 1 | ||||
39 | END | ||||
40 | END | ||||
41 | CLASS | ||||
42 | NAME "Others Boundary" | ||||
43 | STYLE | ||||
44 | COLOR 150 150 150 | ||||
45 | WIDTH 0.4 | ||||
46 | END | 43 | END |
在这里,我们介绍几个参数与标注对象:
FONTSET "../fonts/fonts.list"
在这里,我们指定的TrueType字体列表(或字体的完整路径集)的文件。该文件列出了每个可用字体。 请参阅文件本身和 MapFile 参考获取更多信息。FONTSET的MAP对象是一个参数。
这个文件的内容如下:
01 # This be the fonts list
02 arial Vera.ttf
03 arial-bold VeraBd.ttf
04 arial-italic VeraIt.ttf
05 arial-bold-italic VeraBI.ttf
06 times VeraSe.ttf
07 times-bold VeraSeBd.ttf
08 andale-mono VeraMono.ttf
09 vera_sans Vera.ttf
10 vera_sans-bold VeraBd.ttf
11 vera_sans-italic VeraIt.ttf
12 vera_sans-bold-italic VeraBI.ttf
13 vera_sans_mono VeraMono.ttf
14 vera_sans_mono-bold VeraMoBd.ttf
15 vera_sans_mono-italic VeraMoIt.ttf
16 vera_sans_mono-bold-italic VeraMoBI.ttf
17 vera_serif VeraSe.ttf
18 vera_serif-bold VeraSeBd.ttf
19 simsun simsun.ttc
LABELITEM
在 "STATE"
情况下,指定数据属性用于标注。 LABELITEM
是该层对象的一个参数,。
LABEL
标志着开始定义 LABEL
对象。标注对象可用于其他对象(即比例尺对象)
COLOR
标注内的对象,颜色指定标注文本的颜色。SHADOWCOLOR
这指定的标注文字的阴影颜色。SHADOWSIZE
指定阴影的大小。该值对应于在X
和Y
的像素的转变。因此,2
是指由两个两个像素宽像素高。TYPE
在LABEL对象,类型指定使用什么类型的字体。我们有选择的TrueType或位图(内置字体)。我们选择TRUETYPE
。FONT
如果指定为TrueType类型,你需要指定使用什么字体。这里所说的值是"alias";在字体列表文件中的“别名”。SIZE
如果使用TrueType字体,该值的像素是尺寸大小。如果是位图,可以说像“小”或“大”的东西。ANTIALIAS
这将truetype的抗锯齿开启或关闭。请记住值不是OPEN
或CLOSE
,而是TRUE
或FALSE
。POSITION
定位标注文本的标注点。该值是一个组合的垂直和水平位置。你有以下几种选择:C
为中心垂直对齐,U
上,和L
为低。 对于水平对齐你有以下选择:C
为中心,L
为左,右为R
。 因此,要标注文本对齐的标注ID的中心,你使用值CC
(中心 - 中心)。或者,如果你想它是在左下方的ID,你会使用LL
。 另一种方法是让MapServer的决定标注的最佳位置。对于这一点,你可以使用AUTO
值。PARTIALS
告诉MapServer是否生成不全的标注文本。这里的默认值是不产生标注文本的碎片。该值是TRUE
或FALSE
。MINDISTANCE
这是重复的标注之间的最小距离,以像素。如果你增加或减小该值,看会发生什么。BUFFER
填充(像素)的标注。这是用来提高可读性。缓冲区4个像素的意思是没有标注将被绘制于彼此的四个象素。再次,改变,来看看它是如何工作的。
您还可以创建标注来分离一个多边形层。你与注释的数据类型一起做。看下面的例子的 MapFile ,看你如何实现这种标注。你会发现,类对象内“标注”层具有色彩参数值 -1 -1 -1
。负数告诉MapServer的给这个类透明色(标注标识不显示)。再来一次,修改这些值并查看结果以了解它是如何影响地图的。
为了避免地图看起来杂乱, MapServer 会根据数据的比例尺进行标注的优化调整。
自6.2版以来,MapServer能够为标签空间有问题的功能绘制标签线(通常在标签文本大于标记的多边形时)。此功能是通过添加的 MS RFC 81:带引线的偏移标签 。此功能只针对多边形标注。
31 | END | 31 | END | ||
t | t | 32 | LEADER | ||
33 | GRIDSTEP 40 | ||||
34 | MAXDISTANCE 1000 | ||||
35 | STYLE | ||||
36 | COLOR 200 100 100 | ||||
37 | WIDTH 2 | ||||
38 | END | ||||
39 | END | ||||
32 | END | 40 | END |