Symbols

Notes & Syntax

4.1.1 Notes

这部分将说明怎样在 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 的值来调整。

4.1.2 Syntax

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]。

4.1.2.1 Vector / Ellipse specific parameters

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]。

4.1.2.2 Pixmap specific parameters

1)        IMAGE:表征符号的 PNG 或者 GIF 文件的路径。取值:[path/filename]

2)        TRANSPARENT:为输入的 GIF 或 PNG 图片设置透明时的填充色,或者定义

是否所有的阴影符号应该有透明填充色。默认情况下,背景色与其父图片的颜色一致。取值:[color index]

4.1.2.3 TrueType specific parameters

1)        FONT:~可以再~FONTSET 中使用的 TrueType 字体的名称~。取值:~[char]

2)        CHARACTER:~可以引用一种特殊~TrueType 类型字体的字符。~取值:~[char]

3)        ANTIALIAS:~字体是否平滑。取值:~[true | false]

4)        GAP:~以像素为单位。定义~TrueType 线之间的距离。取值:[integer]

4.2 Vector Symbols

有四种矢量类型的符号:VECTOR,ELLIPSE,HATCH 和 CARTOLINE.你可以定义点的表现形式、线的表现形式以及面的表现形式。

4.2.1 Defining Point Representations

可以使用坐标序列来定义一个矢量符号也可以定义指定 XY 半径的椭圆来定义矢量符号。

image10 

上图对应的 mapfile 内容如下(注意起始坐标与结束坐标相同):

SYMBOL
    NAME  "Square"
    TYPE      VECTOR
    FILLED  TRUE
    POINTS
    0 0
    0 5
    5 5 
    5 0
    0 0
    END
END

理论上,构造上述符号的最好方法是使用正方形样式,不需要这样复杂。

image11 

上面的符号都可以使用对应的 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

上述代码的显示结果如下:

image12 

4.2.2 Defining Line Representations

基本的矢量符号由一系列点组成。

image13 

上图对应的 mapfile 文件内容如下:

SYMBOL 
  NAME "dashed-line-short"
  TYPE ELLIPSE
  FILLED TRUE
  POINTS 1 1 END
  STYLE 2 1 END
END

image14 

参考对应的 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

显示结果如下:

image15 

Cartoline Line 类型:

image16 

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:

image17 

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

4.2.3 Defining Line and Area Representations using Symbols**

下面的示例是上述两个的组合,我们可以做一个线性的五角星序列。

image18 

制作这个符号的流程如下:

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

可以使用与上述类似的技术做出下面的符号”

image19 

对角线填充示例:

SYMBOL   

NAME "diag45fill_thin"

TYPE vector

TRANSPARENT 0

POINTS

0 1     1 0

END   

END

4.3 Bitmap Symbols

定义 bitmap 类型的符号需要 gif 格式或 png 格式的图片。定义这种格式图片

的方法如下:

SYMBOL

NAME 'Image'

TYPE PIXMAP

IMAGE 'bitmaps/image.gif'

END

上述图片的路径必须是绝对路径或相对于 symbol 文件的相对路径。

可选地你可以使用 TRANSPARENT [color index]来设置一个透明色。如果你设

置的输出图像格式 IMAGETYPE 不支持透明,这是你就必须在对应的图层中设置

TRANSPARENCY ALPLA.

4.3.1创建 Bitmap符号**

4.3.1.1  Bitmap符号介绍**

Bitmap 符号的优点:

•      full color 

•      fancy imaging effects such as buttonize, shadows, light and so on 

•      transparency 

•      easy to create

4.3.2使用 Bitmap符号填充区域使用 Bitmap 符号可以创建很好的填充效果需要注意的是,当是使用 Bitmap 符号填充区域后,你不能再改变符号的大

小,所以再某些情况下你需要为不同比例的地图创建不同比例的符号。例子:

使用的符号

面区域的填充效果

image20 

image21 

image22 

image23 

image24 

image25 

image26 

image27 

部分 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

4.3.3 符号集合下面的连接可以下载一些免费的符号文件:

4.4 TrueType Symbols

定义 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  或者是使用以下语法的字符数字,如:”&#114” 可以使用”字符映射表”工具(开始-程序-附件-系统工具-字符映射表)来查查

对应的字符映射。在字符映射表工具窗口的左下角你可以看到当前选中字符的

UNICODE 字符以及 ASCII 文本描述。如下图:

image28 

在上图中:

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

4.4.1 创建 TrueTyp 类型的符号有很多现有的 TrueType

类型的姿态可以使用,如 Corel Draw 软件包中带有 的字体。你可以使用他们创建自己的字体:

l  在 windows 平台下可以使用 Font Creator Program.http://www.high-logic.com/products.html

l  在 linux 下可以使用 FontForgehttp://fontforge.sourceforge.net/

4.4.2 使用 TrueType 类型符号的提示

符号必须是”Unicode”类型。例如:这里不支持 MapInfo 符号,如果想使用 这些符号,你需要修改它的类型。使用 Font Creator Program体操作如下:

  1. 将对应的 Shapefile 复制到 MapServer字体文件夹(最好使用命令行复制)
  2. 点击 File – Open Font File
  3. 使用 Format / Platform Manager 功能,选择” Microsoft Symbol”并点击”Change”; the entry should switch to "Microsoft Unicode"。
  4. 保存文件

4.4.3符号集合下面是一些免费的符号下载地址: