这部分将说明怎样在 MapServer 中定义符号。
注意:
l Symbol 的定义可以在 MapFile 中,也可以在一个独立的文件中。~在~MAP 对象下使用 SYMBOLSET 关键字指定对应的 Symbol 文件,这种方式可以复用 Symbol 文件。
l 在MapServer中有三种类型的的Symbol,这些类型可以用来渲染点、线、面。
n Vector :VECTOR 、ELLIPSE 和其子类型 Hatch
n Bitmap:
n TrueType:
l Symbol 数字 0。对点 0 表示一个~单独的像素点;对~shadowing 0 表示一个 solid fill;对线 0 表示一个像素宽的线。
l Symbol 不定义和颜色相关的内容,颜色的设置在 CLASS 中定义(除了 bitmap 类型的 Symbol)
l 每个 symbol 文件中最多~定义~64 个 symbol。这个参数可以再 mapsymbol.h 文件中修改 MS_MAXSYMBOLS 的值来调整。
1) NAME:~别名。在~CLASS 中使用的名称。~取值:~[string]
2) TYPE:MapServer 支持的符号类型:
l Vector:一个简单的用户定义符号(A simple drawing is used to define the shape of the symbol)。
l Ellipse:XY 方向的半径值。
l Pixmap:(Bitmap Symbols):支持 GIF 和 PNG 图片的符号。
l TrueType:可以在 FONTSET 中定义
取值:[vector|ellipse|hatch|cartoline|pixmap|truetype|simple]。
1) POINT:定义矢量符号的起始点或椭圆的 XY 方向的半径。以 END 结束定义。坐标的单位为像素,在使用之前请先定义其默认值。你可以在适当
的位置插入一些非负的坐标来创建一个非临近的路径。对椭圆形符号你应该提供 XY 方向的半径,如果 X 与 Y 相等那就是一个圆。
取值:[x y] [x y] ... END
2) STYLE:Defines a dash style or pattern。取值:[num on] [num off] [num on] ...
END。
3) FILLED:~设置填充色。对~MARKER 类型的符号,如果 OUTLINECOLOR 已经设置,那么符号也具有相同的边界线。取值:[true|false]。
1) IMAGE:表征符号的 PNG 或者 GIF 文件的路径。取值:[path/filename]
2) TRANSPARENT:为输入的 GIF 或 PNG 图片设置透明时的填充色,或者定义
是否所有的阴影符号应该有透明填充色。默认情况下,背景色与其父图片的颜色一致。取值:[color index]
1) FONT:~可以再~FONTSET 中使用的 TrueType 字体的名称~。取值:~[char]
2) CHARACTER:~可以引用一种特殊~TrueType 类型字体的字符。~取值:~[char]
3) ANTIALIAS:~字体是否平滑。取值:~[true | false]
4) GAP:~以像素为单位。定义~TrueType 线之间的距离。取值:[integer]
有四种矢量类型的符号:VECTOR,ELLIPSE,HATCH 和 CARTOLINE.你可以定义点的表现形式、线的表现形式以及面的表现形式。
可以使用坐标序列来定义一个矢量符号也可以定义指定 XY 半径的椭圆来定义矢量符号。
上图对应的 mapfile 内容如下(注意起始坐标与结束坐标相同):
SYMBOL
NAME "Square"
TYPE VECTOR
FILLED TRUE
POINTS
0 0
0 5
5 5
5 0
0 0
END
END
理论上,构造上述符号的最好方法是使用正方形样式,不需要这样复杂。
上面的符号都可以使用对应的 mapfile 代码写出,对应的代码请参见 chameleon 引用下 etc/symbols.sym 文件。提示:“-99 -99”坐标看起来像一个围栏,但它只使用在非填充的符号上。
矢量符号的组合使用示例:
LAYER
NAME "Test Symbols"
TYPE POINT
STATUS ON
CONNECTIONTYPE OGR
CONNECTION "test\_symbols/test\_sym.TAB"
HEADER "test"
CLASSITEM "test"
CLASS
NAME "Combined Symbol"
EXPRESSION "Combined"
STYLE
COLOR 0 0 255
OUTLINECOLOR 0 0 0
SYMBOL 'Square'
SIZE 40
END
STYLE
COLOR 200 200 255
SYMBOL 'Circle'
SIZE 30
END
STYLE
COLOR 0 0 255
SYMBOL 'Cross'
SIZE 20
END
END
END
上述代码的显示结果如下:
基本的矢量符号由一系列点组成。
上图对应的 mapfile 文件内容如下:
SYMBOL
NAME "dashed-line-short"
TYPE ELLIPSE
FILLED TRUE
POINTS 1 1 END
STYLE 2 1 END
END
参考对应的 Symbol 文件学习上图的配置。
vectors.sy^m^http://umn.mapserver.ch/MapServer/en/symbols/vectors.sym组合线示例:
LAYER
NAME "Test Line Symbology"
TYPE LINE STATUS ON
CONNECTIONTYPE OGR
CONNECTION "test\_symbols/test\_Lines.TAB"
HEADER "test"
CLASSITEM "test"
CLASS
NAME "Combined Line Symbology"
EXPRESSION "Combined"
STYLE
COLOR 0 0 255
SYMBOL 'continue'
SIZE 7
END
STYLE
COLOR 255 255 0
SYMBOL 'continue'
SIZE 5
END
STYLE
COLOR 0 0 0
SYMBOL 'dashed-line-short'
SIZE 1
END
END
END
显示结果如下:
Cartoline Line 类型:
SYMBOL
NAME "cartoline"
TYPE cartoline
LINECAP round \#\[butt|round|square|triangle\]
LINEJOIN miter \#\[round|miter|bevel\]
LINEJOINMAXSIZE 3
STYLE
40 17 1 17 1 17 1 17
END
END
Where LINEJOINMAXSIZE defines the maximum length for miter type of joins as a factor of m/d (3 means i.e. m = 3 times d) to avoid spikes when lines are almost parallel:
m = 3d
定义带有阴影的面的示例:
SYMBOL 文件的内容如下:
SYMBOL
NAME 'hatch-test'
TYPE HATCH
END
Mapfile 中 LAYER 的定义如下(nds up with a 45° hatching, with 3 pixels thick lines, 10 pixels apart:);
LAYER ...
CLASS ...
STYLE
SYMBOL 'hatch-test'
COLOR 255 0 0
ANGLE 45
SIZE 10
WIDTH 3
END
END
END
下面的示例是上述两个的组合,我们可以做一个线性的五角星序列。
制作这个符号的流程如下:
1. 定义符号
SYMBOL
NAME "star-dots"
TYPE VECTOR
FILLED TRUE
POINTS
0 0.375
0.35 0.375
0.5 0
0.65 0.375
1 0.375
0.75 0.625
0.875 1
0.5 0.75
0.125 1
0.25 0.625
END
STYLE 1 25 END
END
2. The chunk of the MapFile definition using as well the OVERLAY option:
CLASS
NAME "Hall of Fame"
EXPRESSION "star-dots"
COLOR 255 0 0
SYMBOL 'star-dots'
SIZE 14
OVERLAYCOLOR 255 255 0
OVERLAYSYMBOL 'star-dots'
OVERLAYSIZE 6
END
可以使用与上述类似的技术做出下面的符号”
对角线填充示例:
SYMBOL
NAME "diag45fill_thin"
TYPE vector
TRANSPARENT 0
POINTS
0 1 1 0
END
END
的方法如下:
SYMBOL
NAME 'Image'
TYPE PIXMAP
IMAGE 'bitmaps/image.gif'
END
上述图片的路径必须是绝对路径或相对于 symbol 文件的相对路径。
可选地你可以使用 TRANSPARENT [color index]来设置一个透明色。如果你设
置的输出图像格式 IMAGETYPE 不支持透明,这是你就必须在对应的图层中设置
TRANSPARENCY ALPLA.
Bitmap 符号的优点:
• full color
• fancy imaging effects such as buttonize, shadows, light and so on
• transparency
• easy to create
4.3.2使用 Bitmap符号填充区域使用 Bitmap 符号可以创建很好的填充效果需要注意的是,当是使用 Bitmap 符号填充区域后,你不能再改变符号的大
小,所以再某些情况下你需要为不同比例的地图创建不同比例的符号。例子:
使用的符号
面区域的填充效果
部分 Mapfile 如下:
LAYER
NAME "Test Symbols Poly"
TYPE POLYGON
STATUS ON
CONNECTIONTYPE OGR
CONNECTION "test_symbols/test_sym_layer.TAB"
HEADER "test"
CLASSITEM "test"
CLASS
NAME "Vertical Hatching Sample"
EXPRESSION "hatch"
COLOR 255 0 0
OUTLINECOLOR 0 200 0
SYMBOL 'Vertical_Hatch'
END
END
定义 TrueType 类型符号需要 TrueType 字体文件。再 Mapserver 中可以使用 FONTSET 指定对应的字体文件。字体文件中的定义如下:
arial-bold fonts/arialbd.ttf
arial fonts/arial.ttf
arial-italic fonts/ariali.ttf
文件中包含两列,第一列再 MapFile 文件中使用,第二列用来指定对应的包含路径的字体文件。
可以再 mapfile 文件中定义 TrueType 类型的符号,也可以将对应的信息写到
一个独立的文件中,然后再 mapfile 中使用 SYMBOLSET 来引用这个文件。推荐使用后者,这样可以实现复用。
TrueType 类型符号的定义示例:
SYMBOL
NAME "SurveyPoint"
TYPE TRUETYPE FONT "SURVEY"
CHARACTER "."
END
这里使用的 FONT 名称需要与 FONTSET 指定的文件中的值对应,CHARACTER
的可以使用的值如下:
l a,b,c,d„„ 类似的 ASCII 文本
l 或者是使用以下语法的字符数字,如:”r” 可以使用”字符映射表”工具(开始-程序-附件-系统工具-字符映射表)来查查
对应的字符映射。在字符映射表工具窗口的左下角你可以看到当前选中字符的
UNICODE 字符以及 ASCII 文本描述。如下图:
在上图中:
l ASCII 字符为:Question Mark = “?”
l Unicode 数字 003F(十六进制数)是字符#63 在 Symbol 文件中我们可以这样定义:
SYMBOL
NAME "Windrose"
TYPE TRUETYPE
FONT "SURVEY"
CHARACTER "?"
END
下面与上述内容的结果一样:
SYMBOL
NAME "Windrose"
TYPE TRUETYPE
FONT "SURVEY"
CHARACTER "&\#63;"
END
类型的姿态可以使用,如 Corel Draw 软件包中带有 的字体。你可以使用他们创建自己的字体:
l 在 windows 平台下可以使用 Font Creator Program.http://www.high-logic.com/products.html
l 在 linux 下可以使用 FontForgehttp://fontforge.sourceforge.net/
符号必须是”Unicode”类型。例如:这里不支持 MapInfo 符号,如果想使用 这些符号,你需要修改它的类型。使用 Font Creator Program具体操作如下: