MapServer的抗锯齿

作者

Pericles Nacionales

联系方式

naci0002 at umn.edu

最后更新

2009/01/17

警告

此文档已过时。从6.0版开始,MapServer将为 gd/ 驱动程序生成别名输出,为 agg/cairo/ 驱动程序生成反锯齿输出

注解

对于MapServer的高质量抗锯齿输出,它 强烈 建议使用 AGG 渲染。本文档仅适用于您希望坚持 GD 渲染的情况,或者您使用的是早于5.0版MapServer的版本。

需要做什么

1。将map对象中的imagetype关键字更改(或添加)为png24(24位png输出)或jpeg

MAP
  ...
  IMAGETYPE PNG24
  ...
END
  1. 向图层对象添加透明度并将值设置为alpha

MAP
  ...
  IMAGETYPE PNG24
  ...

  LAYER
    ...
    TRANSPARENCY ALPHA
    ...
  END
END
  1. 将Antialias关键字添加到 CLASS 中的对象 LAYER 并将值设置为真

MAP
  ...
  IMAGETYPE PNG24
  ...

  LAYER
    ...
    TRANSPARENCY ALPHA
    ...
    CLASS
      ...
      STYLE
        ...
        ANTIALIAS TRUE
        ...
      END
      \.\.\.
    END # end class
  END # end layer
END # end map

注解

不要在类对象中使用符号或大小关键字,而是使用宽度指定线条或多边形轮廓的宽度。除非必要,否则不要使用宽度。如果必须定义符号,请使用椭圆类型的符号——它支持抗锯齿。

下面是一个真实 Mapfile 的示例:

注解

从MapServer 6中,不再支持符号类型cartoline。您必须使用agg渲染和样式模式来实现虚线。因此,下面的示例不再有效。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
MAP
  NAME 'ms101'
  EXTENT -2198022.00 -2444920.25 2707932.00 1234545.25  # CONUS LAEA (US)
  SIZE 640 480
  SHAPEPATH 'data'
  SYMBOLSET 'symbols/symbols.txt'

  IMAGETYPE PNG24

  PROJECTION
    "init=epsg:2163"
  END

  # The layer below will be rendered as 1-pixel wide, antialiased line
  # If you'd like to change the line thickness add the WIDTH keyword
  # in the STYLE object with a value of 3 or greater.
  LAYER # begin antialiased country boundary (line) layer
    NAME 'country_line'
    DATA 'shapefile/WorldCountryBorders'
    TYPE LINE
    STATUS ON
    TRANSPARENCY ALPHA

    PROJECTION
      "init=epsg:4326"
    END

    CLASS
      NAME 'Country Boundary'
      STYLE
        COLOR 96 96 96
        ANTIALIAS TRUE
      END
    END
  END # end country boundary layer

  # The layer below shows one way to draw a polygon with antialiased outline
  LAYER # begin antialiased country boundary (polygon) layer
    NAME 'country_line'
    DATA 'shapefile/Countries_area'
    TYPE POLYGON
    STATUS ON
    TRANSPARENCY ALPHA

    PROJECTION
      "init=epsg:4326"
    END

    CLASS
      NAME 'Country Boundary'
      STYLE
        COLOR 212 212 212
        OUTLINECOLOR 96 96 96
        WIDTH 3
        ANTIALIAS TRUE
      END
    END
  END # end country boundary polygon layer

  # The layer below shows one way to draw a polygon with antialiased outline
  LAYER # begin antialiased state boundary (line) layer
    NAME 'state_line'
    DATA 'shapefile/us_states'
    TYPE LINE
    STATUS ON
    TRANSPARENCY ALPHA

    PROJECTION
      "init=epsg:4326"
    END

    CLASS
      NAME 'State Boundary'
      STYLE
        COLOR 144 144 144
        SYMBOL 'cartoline'
        ANTIALIAS TRUE
      END
    END
  END # end state line layer
END # end of map file

以下是 'cartoline' 符号的定义方法:

注解

从MapServer 6,符号类型 CARTOLINE 不可用。您必须使用 AGG 渲染和样式模式来实现虚线。因此,不能再使用以下符号。

SYMBOL
  NAME 'cartoline'
  TYPE CARTOLINE
  LINECAP "round"
  LINEJOIN "round"
  LINEJOINMAXSIZE 3
END

注解

这里提供的示例仅用于说明目的——保持 Mapfile 定义简单。反走样会增加服务器上的计算开销,并可能降低服务器的性能。除非你必须使用,否则不要使用它,当然也不要在它上面使用符号,除非你真的必须使用。