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(mfa5.map):
文件变动如下:
01 MAP
02 IMAGETYPE "PNG24"
03 EXTENT -180 -90 180 90
04 SIZE 600 300
05 SHAPEPATH "/gdata"
06 IMAGECOLOR 255 255 255
07 FONTSET "../fonts/fonts.list"
08 SYMBOLSET "../symbols/symbols35.sym"
09 LAYER
10 NAME "topo"
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
修改内容如下:
f | 1 | MAP | f | 1 | MAP |
n | 2 | IMAGETYPE "PNG" | n | 2 | IMAGETYPE "PNG24" |
3 | EXTENT -180 -90 180 90 | 3 | EXTENT -180 -90 180 90 | ||
7 | FONTSET "../fonts/fonts.list" | 7 | FONTSET "../fonts/fonts.list" | ||
n | n | 8 | SYMBOLSET "../symbols/symbols35.sym" | ||
8 | LAYER | 9 | LAYER | ||
n | 9 | NAME "states_poly" | n | 10 | NAME "topo" |
10 | DATA "wcountry.shp" | 11 | DATA "land_shallow_topo_8192.tif" | ||
11 | STATUS OFF | 12 | STATUS OFF | ||
n | 12 | TYPE POLYGON | n | 13 | TYPE RASTER |
13 | LABELITEM "NAME" | 14 | PROCESSING "BANDS=1,2,3" | ||
14 | CLASS | 15 | 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 | END | 16 | END | ||
41 | STYLE | 24 | STYLE | ||
t | t | 25 | SYMBOL "line5" | ||
42 | COLOR 132 132 32 | 26 | COLOR 255 255 0 | ||
27 | SIZE 1 | ||||
43 | END | 28 | 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
,而不是 POLYGON
, LINE
, POINT
, 或其他。
PROCESSING "BANDS=1,2,3"
,这层对象参数地图服务器4.x中是新的。加工的关键字有很多的值,但在这种情况下,都用它来选择波段多光谱图像显示。这里的值字符串将被传递给GDAL库。用于这的文档目前是最小的,但是请参阅MAPFILE更多使用加工关键字的例子。
OFFSITE
,此参数告诉MapServer的像素值呈现为背景(或忽略)。你可以得到利用图像的像素值处理或图像处理程序(如 GIMP,Photoshop)。
要比较使用 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
另外,尝试改变 IMAGETYPE
从 PNG24
到 PNG
。
栅格数据,如遥感影像,并不仅仅是一幅图。在计算机中,图像一般会用 RGB 三个通道来表示,在遥感影像中,通道一般称为波段。而且遥感影像有波段与图像的RGB三个通道不同,不一定对应 RGB 三色,波段的数目也不一定是三个。
在 MapServer 中,除了对图像按默认方式进行渲染,还可以定义处理方式,如使用哪三个波段者假彩色使用,如果进行颜色拉伸等等。
比如,对于遥感影像,使用下面的语句,表示将波段顺序进行反转:
PROCESSING "BANDS=3,2,1"
结果如下 :