地图中的标注

生成地图时,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 2556    IMAGECOLOR 255 255 255
nn7    FONTSET "../fonts/fonts.list"
7    LAYER8    LAYER
11        TYPE POLYGON12        TYPE POLYGON
n12        CLASSITEM "NAME"n13        LABELITEM "NAME"
13        CLASS14        CLASS
n14            NAME "China"n15            NAME "States"
15            EXPRESSION "CHINA"
16            STYLE16            STYLE
n17                COLOR 232 330n17                COLOR 232 232 232
18            END18            END
n19        ENDn
20        CLASS
21            NAME "Others"
22            STYLE19            LABEL
20                COLOR 132 31 31
23                COLOR 198 198 25521                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            END31            END
31        TYPE LINE38        TYPE LINE
n32        CLASSITEM "NAME"n
33        CLASS39        CLASS
n34            NAME "China Boundary"n40            NAME "State Boundary"
35            EXPRESSION "land"
36            STYLE41            STYLE
t37                COLOR 32 32 32t42                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            END43            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 指定阴影的大小。该值对应于在 XY 的像素的转变。因此, 2 是指由两个两个像素宽像素高。
  • TYPE 在LABEL对象,类型指定使用什么类型的字体。我们有选择的TrueType或位图(内置字体)。我们选择 TRUETYPE
  • FONT 如果指定为TrueType类型,你需要指定使用什么字体。这里所说的值是"alias";在字体列表文件中的“别名”。
  • SIZE 如果使用TrueType字体,该值的像素是尺寸大小。如果是位图,可以说像“小”或“大”的东西。
  • ANTIALIAS 这将truetype的抗锯齿开启或关闭。请记住值不是 OPENCLOSE ,而是 TRUEFALSE
  • POSITION 定位标注文本的标注点。该值是一个组合的垂直和水平位置。你有以下几种选择: C 为中心垂直对齐,U 上,和 L 为低。 对于水平对齐你有以下选择:C 为中心, L 为左,右为 R 。 因此,要标注文本对齐的标注ID的中心,你使用值 CC(中心 - 中心)。或者,如果你想它是在左下方的ID,你会使用 LL 。 另一种方法是让MapServer的决定标注的最佳位置。对于这一点,你可以使用 AUTO 值。
  • PARTIALS 告诉MapServer是否生成不全的标注文本。这里的默认值是不产生标注文本的碎片。该值是 TRUEFALSE
  • MINDISTANCE 这是重复的标注之间的最小距离,以像素。如果你增加或减小该值,看会发生什么。
  • BUFFER 填充(像素)的标注。这是用来提高可读性。缓冲区4个像素的意思是没有标注将被绘制于彼此的四个象素。再次,改变,来看看它是如何工作的。

您还可以创建标注来分离一个多边形层。你与注释的数据类型一起做。看下面的例子的 MapFile ,看你如何实现这种标注。你会发现,类对象内“标注”层具有色彩参数值 -1 -1 -1。负数告诉MapServer的给这个类透明色(标注标识不显示)。再来一次,修改这些值并查看结果以了解它是如何影响地图的。

标注的自动优化

为了避免地图看起来杂乱, MapServer 会根据数据的比例尺进行标注的优化调整。

标注的处理

自6.2版以来,MapServer能够为标签空间有问题的功能绘制标签线(通常在标签文本大于标记的多边形时)。此功能是通过添加的 MS RFC 81:带引线的偏移标签 。此功能只针对多边形标注。

31            END31            END
tt32            LEADER
33                GRIDSTEP 40
34                MAXDISTANCE 1000
35                STYLE
36                    COLOR 200 100 100
37                    WIDTH 2
38                END
39            END
32        END40        END