加入栅格图层

查看示例

MapServer 除了支持矢量数据(点,线,多边形和标注),还可以显示栅格数据。通过GDAL库的使用, MapServer 可以输入和输出多种栅格格式。现在的MapServer支持RGB和多光谱图像(多层)。而在4.0以前的版本栅格输入仅限于单层,灰度或彩色图像索引。这个例子显示了如何使用多光谱数据选择要显示什么样的层。采用RGB和多光谱图像,有可能有一个明显的性能损失。

因为MapServer的5.x的使用 GD 2.0.x 版本库生成图像输出,它支持 RGB(24位真彩色)以及输出。因此,现在可以同时使用 PNG24 (真彩色)输出和8位(索引颜色或灰度)PNG。这个例子使用PNG24 IMAGETYPE。就像RGB输入,使用 PNG24 时,渲染的结果会有显著的改善。

MapServer 其实可以使用GDAL生成输出图像,但是那是另一个话题。关于它如果你想知道更多,看看 MapFile 中 在 OUTPUTFORMAT 对象的具体用法。

下面是本例中用到的Mapfile(xmfa5.map):

文件变动如下:

01 MAP
02     IMAGETYPE "PNG24"
03     EXTENT -180 -90 180 90
04     SIZE 600 300
05     SHAPEPATH "../geodata"
06     IMAGECOLOR 255 255 255
07     FONTSET "../fonts/fonts.list"
08     SYMBOLSET "../symbols/symbols35.sym"
09     LAYER
10         NAME "modis"
11         DATA "land_shallow_topo_8192.tif"
12         STATUS OFF
13         TYPE RASTER
14         PROCESSING "BANDS=1,2,3"
15         OFFSITE 71 74 65
16     END
17     LAYER
18         NAME "states_line"
19         DATA "wcountry.shp"
20         STATUS OFF
21         TYPE LINE
22         CLASS
23             NAME "State Boundary"
24             STYLE
25                 SYMBOL "line5"
26                 COLOR 255 255 0
27                 SIZE 1
28             END
29         END
30     END
31 END

带标注的 Mapfile

mapfile的结构,通过对象,看起来像这样:


                                               MAP
               LAYER #1-------------LAYER #2----|----LAYER #3--------LAYER #4
            (states_poly)           (modis)       (states_line)   (states_label)
               |                                     |               |
  (land) CLASS-|-CLASS (water)                       |-CLASS         |-CLASS
             |   |                                     |                 |
       STYLE-|   |-STYLE                               |-STYLE     STYLE-|-LABEL

修改内容如下:

f1MAPf1MAP
n2    IMAGETYPE "PNG"n2    IMAGETYPE "PNG24"
3    EXTENT -180 -90 180 903    EXTENT -180 -90 180 90
7    FONTSET "../fonts/fonts.list"7    FONTSET "../fonts/fonts.list"
nn8    SYMBOLSET "../symbols/symbols35.sym"
8    LAYER9    LAYER
n9        NAME "states_poly"n10        NAME "modis"
10        DATA "wcountry.shp"11        DATA "land_shallow_topo_8192.tif"
11        STATUS OFF12        STATUS OFF
n12        TYPE POLYGONn13        TYPE RASTER
13        LABELITEM "NAME"14        PROCESSING "BANDS=1,2,3"
14        CLASS15        OFFSITE 71 74 65
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    END16    END
41            STYLE24            STYLE
tt25                SYMBOL "line5"
42                COLOR 132 132 3226                COLOR 255 255 0
27                SIZE 1
43            END28            END

当你在 MapFile ,你会看到,新的图层 "modis" 添加到了多边形图层 "states"之后。 MapServer以相反的顺序显示层 - 后进先出(LIFO),第一层绘制在 MapFile 中定义在地图的底部。

所以国家多边形层,会绘制在结果的底部。由于栅格层被绘制在它的上面,所以不会看到它。 这就是为什么第一层得到关闭的状态值 STATUS OFF 。线图层定义在栅格图层之下,所以它会在结果的上面绘制(你可以看到它)。 这就是为什么开始从多边形层分离线层的原因。最后,标签绘制在一切之上。

MapServer的可以根据其他图层的状态来自动自动开启或关闭l图层(栅格图层被打开时多边形图层会关闭)。这个是通过 REQUIRES 参数来完成。一旦开始创建自己的 MapServer 应用程序时应该会用到这个功能。

参数说明

让我们一起来看看在 MapFile 介绍的新参数:

IMAGETYPE ,这是不是新的,但值是 PNG24 。 PNG24是24位真彩色版本的PNG格式。而不是被有限的256颜色组合的输出图像, 地图服务器现在有几百万。顺便说一下,尝试改变这个值回PNG。 注意可以使用的格式,生成图像所花费的时间。 在真彩色和索引颜色之间选择,考虑到生成图像所花费的时间。

SYMBOLSET ,分中的符号定义的文件的路径。此文件中的符号通过类对象中的SYMBOL对象参考。 在这一点上这不是真正需要的,但我想我会现在在这里抛出这个。 请参阅的 MapFile 参考, 并在的MapServer的建设与制图符号了解更多信息。

DATA "raster/mod09a12003161_ugl_ll_8bit.tif",在新添加的层对象,数据参数指向一个GeoTIFF的图像。 MapServer的矢量数据集一样,支持多个栅格文件格式。 这种支持是通过使用GDAL库。欲了解更多信息,不同的栅格格式支持MapServer和一般性讨论使用栅格地图服务器,请阅读的栅格数据如何在 http://www.mapserver.org/input/raster.html

TYPE RASTER,当使用栅格数据(图像),值为 RASTER,而不是 POLYGONLINEPOINT, 或其他。

PROCESSING "BANDS=1,2,3",这层对象参数地图服务器4.x中是新的。加工的关键字有很多的值,但在这种情况下,都用它来选择波段多光谱图像显示。这里的值字符串将被传递给GDAL库。用于这的文档目前是最小的,但是请参阅MAPFILE更多使用加工关键字的例子。

OFFSITE,此参数告诉MapServer的像素值呈现为背景(或忽略)。你可以得到利用图像的像素值处理或图像处理程序(如 GIMP,Photoshop)。

RGB 与索引影像

要比较使用 RGB图像 与 索引彩色图像 创建地图的速度,替换 MapFile 中的以下行:

DATA "raster/mod09a12003161_ugl_ll_8bit.tif"
STATUS DEFAULT
TYPE RASTER
PROCESSING "BANDS=1,2,3"
OFFSITE 71 74 65

使用下面的代码:

DATA "raster/mod09a12003161_ugl_ll_idxa.tif"
STATUS DEFAULT
TYPE RASTER
OFFSITE 70 74 66

另外,尝试改变 IMAGETYPEPNG24PNG

使用预处理

栅格数据,如遥感影像,并不仅仅是一幅图。在计算机中,图像一般会用 RGB 三个通道来表示,在遥感影像中,通道一般称为波段。而且遥感影像有波段与图像的RGB三个通道不同,不一定对应 RGB 三色,波段的数目也不一定是三个。

在 MapServer 中,除了对图像按默认方式进行渲染,还可以定义处理方式,如使用哪三个波段者假彩色使用,如果进行颜色拉伸等等。

比如,对于遥感影像,使用下面的语句,表示将波段顺序进行反转:

PROCESSING   "BANDS=3,2,1"

结果如下 :