2.1. 添加格网图层¶
2.1.1. 查看示例¶
除了支持矢量数据(点、线、多边形和标签)外,MapServer还可以显示栅格数据。通过使用GDAL库,MapServer可以导入和导出各种栅格格式。MapServer现在支持RGB和多光谱图像(多层)。在4.0之前的版本中,栅格输入仅限于单层、灰度或彩色图像索引。此示例说明如何使用多光谱数据来选择要显示的层。对于RGB和多光谱图像,可能会有显著的性能损失。
由于MapServer5.x使用GD2.0.x库来生成图像输出,因此它也支持RGB(24位真彩色)输出。因此,现在可以同时使用两者 PNG24
(真彩色)输出和8位(索引颜色或灰度)PNG。本例使用PNG24 ImageType。就像RGB输入一样,当使用PNG24时,渲染结果会得到显著改善。
MapServer实际上可以使用GDAL生成输出图像,但这是另一个主题。如果想了解更多信息,请参阅 OUTPUTFORMAT
对象。
以下是本例中使用的Mapfile(mfa5.map):
文件更改如下:
1MAP
2 IMAGETYPE "PNG24"
3 EXTENT -180 -90 180 90
4 SIZE 600 300
5 SHAPEPATH "/gdata"
6 IMAGECOLOR 255 255 255
7 FONTSET "../fonts/fonts.list"
8 SYMBOLSET "../symbols/symbols35.sym"
9 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
31END
带注记的 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
有关修改如下:
Open the file:diff_mfa5_mfa4.html
当在 Mapfile 中时,将看到新图层 "modis"
添加到多边形层之后 "states"
。MapServer以相反的顺序显示图层-后进先出(LIFO),在地图底部定义的Map文件中绘制的第一个图层。
因此,将在结果的底部绘制国家多边形层。由于栅格层是在其上面绘制的,因此不会被看到。这就是第一个图层获取状态值的原因 STATUS OFF
脱下来。LINE层定义在栅格层下方,因此它将绘制在结果的顶部(您可以看到它)。这就是为什么我们开始分离线层和多边形层。最后,标签被画在顶部。
地图服务器可以根据其他层的状态自动打开或关闭L层(打开栅格层时,多边形层将被关闭)。这是通过 REQUIRES
参数。一旦开始创建自己的MapServer应用程序,就应该使用此功能。
2.1.2. 参数说明¶
接下来看一下MapFile中引入的新参数:
IMAGETYPE
,这并不新鲜,但值是 PNG24
。PNG24是PNG格式的24位真彩色版本。地图服务器现在拥有数百万种颜色组合,而不是限制输出256种颜色组合。顺便说一句,尝试将此值改回PNG。注意可以使用的格式,以及生成图像所需的时间。考虑到生成图像所需的时间,在真彩色和索引色之间进行选择。
SYMBOLSET
子文件中符号定义的文件路径。该文件中的符号通过类对象中的SYMBOL对象引用。在这一点上,它并不是真的需要,但我想我现在应该把它扔在这里。有关使用地图符号构建地图服务器的详细信息,请参阅《Mapfile 参考》。
DATA "raster/mod09a12003161_ugl_ll_8bit.tif"
,在新添加的Layer对象中,Data参数指向GeoTIFF图像。与MapServer的矢量数据集一样,它支持多种栅格文件格式。这种支持是通过使用GDAL库实现的。有关地图服务器支持的不同栅格格式以及使用栅格地图服务器的一般讨论的详细信息,请阅读 http://www.mapserver.org/input/raster.html 上的栅格数据工作原理。
TYPE RASTER
,当使用栅格数据(图像)时,该值为 RASTER
,不是 POLYGON
, LINE
, POINT
,或其他人。
PROCESSING "BANDS=1,2,3"
,此Layer对象参数是MapServer 4.x中的新参数。PROCESSING关键字有很多值,但在本例中,它用于选择多光谱图像中显示的波段。这里的值字符串将被传递给GDAL库。目前有关这方面的文档很少,但有关使用处理关键字的更多示例,请参阅MAPFILE。
OFFSITE
,此参数告诉MapServer要将哪个像素值渲染为背景(或忽略),可获得图像的像素值操作或图像处理程序(如GIMP,Photoshop)。
2.1.3. 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
另外,请尝试将 IMAGETYPE
从 PNG24
更改为 PNG
。
2.1.4. 使用预处理¶
栅格数据,如遥感图像,不仅仅是一张图片。在计算机中,一幅图像通常由三个RGB通道表示。在遥感图像中,通道通常称为波段。此外,遥感图像的波段与图像的RGB通道不同。它不一定对应于RGB的三原色,条带的数量也不一定是三条。
在MapServer中,除了默认情况下呈现图像外,还可以定义如何处理图像,例如哪三个带使用假颜色、是否拉伸颜色等。
例如,对于遥感图像,使用以下语句来颠倒波段的顺序:
PROCESSING "BANDS=3,2,1"
结果如下: