使用c#开发mapserver之五classObj

来源:互联网 发布:现金流量适合比率算法 编辑:程序博客网 时间:2024/04/30 14:14

GIS 系统出身于制图系统,因此 GIS 系统通常都具有良好的显示效果,能制作出漂亮的地图才能吸引别人使用,地图不美观,性能再强大也没用。 MapServer 的制图功能非常强大,它的制图功能主要通过 classObj 对象来实现的。学好如何运用 class 才可以制作出美观大方的地图。


Mapfile 中, CLASS 是包含在 LAYER 段落中的,因此在 mapscript 中, classObj 包含在 layerObj 里面。 classObj 可以用来给 layer 对象设置符号以及标注信息。一个 layer 对象里面必须要有一个 class 对象,当然也可以包含多个 class 对象;一个 class 对象可以用来渲染 layer 中的所有要素,也可以用来渲染图层中具有特定属性的要素。因此可以在通过 layer 中设置多个 class 对象,对图层中的要素进行分类渲染,形成丰富多彩的专题图。分类渲染要与 layer 的属性表配合才可以使用。例如一个公路图层,可以根据该图层属性字段 [ 级别 ] 中不同属性将其分为国道,省道,高速路等,用不同的 class 来对其进行渲染。


下面是一个 mapfile 中一段 CLASS 代码:


CLASS

      NAME "Cities"

      EXPRESSION "1"

      LABEL

        ANGLE 0.000000

        ANTIALIAS TRUE

        FONT "sans-italic"

        MAXSIZE 256

        MINSIZE 4

        SIZE 8

        TYPE TRUETYPE

        BUFFER 0

        COLOR 255 0 0

        FORCE FALSE

        MINDISTANCE -1

        MINFEATURESIZE -1

        OFFSET 0 0

        OUTLINECOLOR 255 255 255

        PARTIALS FALSE

        POSITION AUTO

      END

      STYLE

        ANGLE 360

        COLOR 0 0 0

        SIZE 8

        SYMBOL 2

        WIDTH 1

      END

      TEMPLATE "ttt_query.html"

    END

 

通过上面的代码可以看到 CLASS 里包含了几个重要部分: EXPRESSION LABEL STYLE

EXPRESSION

故名思意, EXPRESSION 就是表达式的意思。它的作用是 MapServer 在绘制几何要素时,判断是否使用该 CLASS 来渲染要素。如果没有设置 EXPRESSION ,那就默认该 CLASS 对图层中的所有要素都有效。例如设置 CLASSITEM 为字段 [ 等级 ] ,上例中 EXPRESSION "1" 就表示该 CLASS 用来渲染所有 [ 等级 ] 字段中属性值为 "1" 的要素。


EXPRESSION 目前支持四种比较方式:字符串比较、正则表达式、逻辑表达式、字符串函数,用的比较多的是字符串比较和逻辑表达式。


字符串比较对大小写敏感,处理速度是最快,应用也最广泛。通常需要设置 Layer CLASSITEM CLASSITEM 的值对应于属性表中的一个字段名。上例中的 EXPRESSION "1" 就是字符串表达式的典型应用。 MapServer 会将要素的字段值与 EXPRESSION 进行比较,如果该属性字段值等于 "1" ,就使用该 CLASS 对象的设置来渲染要素。


逻辑表达式允许基于一个或多个属性建立相当复杂的比较,目前仅对 shapefile 文件有效。逻辑表达式以 “(expression)” 形式定义,用到的属性须加以 [], 即: “[ATTRIBUTE]” 。注意属性值大小写敏感并且要与 shapefile 文件中的字段一致。逻辑表达式允许操作符: =,>,<,<=,>=,=,or,lt,gt,ge,le,eq 。相对于字符表达式,它的速度要慢一些。


例如:

EXPRESSION ([POPULATION] > 50000 AND '[LANGUAGE]' eq 'FRENCH')

EXPRESSION ([POPULATION] = 9000)

LABEL

       LABEL 就是标注,它的存在表示可以把要素的一个属性信息表示为文本显示在地图上。同时可以控制标注文本的字体、大小、颜色等。要给图层设置标注,首先需要指定一个标注字段,标注字段通过 Layer 对象中的 CLASSITEM 设置。 LABEL 的有效范围也是由 EXPRESSION 来决定的。关于 label 后面会有详细的介绍。

STYLE

STYLE 用来控制地图的显示,也就是符号。它通常包含一个或者多个 SYMBOL 对象,可以通过多个 SYMBOL 对象的叠加生成复杂的符号。后面会有详细的介绍。